Assembly 编写汇编代码来读取字符,如果它';如果是大写字母,请显示它

Assembly 编写汇编代码来读取字符,如果它';如果是大写字母,请显示它,assembly,x86-16,emu8086,Assembly,X86 16,Emu8086,我是汇编编程新手。我试图解决这个简单的代码,但emu8086编译器显示错误;我没能运行这个程序 .MODEL SMALL .STACK 100H .DATA .CODE MAIN PROC MOV AH,1 INT 21H CMP AL,'Y' JE THEN CMP AL,'Y' JE THEN JMP ELSE_ THEN: MOV AH,2 MOV DL,AL INT 21H JMP END

我是汇编编程新手。我试图解决这个简单的代码,但emu8086编译器显示错误;我没能运行这个程序

.MODEL SMALL
.STACK 100H  
.DATA
.CODE
MAIN PROC

    MOV AH,1
    INT 21H

    CMP AL,'Y'
    JE THEN
    CMP AL,'Y'  
    JE THEN
    JMP ELSE_
THEN:
    MOV AH,2
    MOV DL,AL
    INT 21H
    JMP END_IF

ELSE_: 
    MOV AH,4CH
    INT 21H
END_IF:    

MAIN ENDP
END MAIN

你的代码很接近,不是很不正确

首先:你的算法。很明显,你是从“是/否”的问题复制过来的,没有调整逻辑

你想要的是:

get char
if ( char >= 'A' && char <= 'Z' ) 
then 
   display char
else 
   /* do nothing */
endif

您收到了什么错误消息?这不是一个好主意。(另外,
cmp
/
je
具有相同的两次比较是多余的。如果输入低于
'A'
或高于
'Z'
,或者如果您愿意,签名更少/更大,您应该跳过打印代码。
结束后如果:
您没有正确退出程序的代码。
.MODEL SMALL
.STACK 100H  
.DATA
.CODE
MAIN PROC

    MOV AH,1               // get the char
    INT 21H

    CMP AL,'A'             // compare and check what to do
    JB ELSE                // smaller than 'A': don't display it 
    CMP AL,'Z'  
    JA ELSE                // bigger than 'Z': don't display it
THEN:
    MOV AH,2               // you only get here if it's an uppercase letter
    MOV DL,AL
    INT 21H
    // JMP END_IF          // since you're just skipping "do nothing" this jmp 
                           // is not needed at all
ELSE_: 
    /* do nothing */
END_IF:    
    MOV AH,4CH             // exit
    INT 21H

MAIN ENDP
END MAIN