Assembly 编写汇编代码来读取字符,如果它';如果是大写字母,请显示它
我是汇编编程新手。我试图解决这个简单的代码,但emu8086编译器显示错误;我没能运行这个程序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
.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