Assembly 用于比较2个数字的汇编程序。我做错了什么?
现在这个程序将比较52和54,如果不相等,则返回N,如果相等,则返回Y。但它正在返回纽约。有人能帮忙吗?我做错了什么?如果相等,则应使用JE跳转;如果不相等,则应使用JNE跳转 您正从Assembly 用于比较2个数字的汇编程序。我做错了什么?,assembly,x86-16,Assembly,X86 16,现在这个程序将比较52和54,如果不相等,则返回N,如果相等,则返回Y。但它正在返回纽约。有人能帮忙吗?我做错了什么?如果相等,则应使用JE跳转;如果不相等,则应使用JNE跳转 您正从不相等的案例跌入A1案例。如果您希望每种情况只发生一次,则需要跳转到NOT_EQUAL末尾的A1之后。好的,在@Chris Pitnam的帮助下,我将代码修改为:-现在它可以工作了。谢谢 DATA SEGMENT VALUE1 DB 54H VALUE2 DB 52H DATA ENDS CODE SEGMENT
不相等的案例跌入A1
案例。如果您希望每种情况只发生一次,则需要跳转到NOT_EQUAL
末尾的A1
之后。好的,在@Chris Pitnam的帮助下,我将代码修改为:-现在它可以工作了。谢谢
DATA SEGMENT
VALUE1 DB 54H
VALUE2 DB 52H
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA
MOV AX,DX
MOV DS,AX
MOV AL,VALUE1
MOV BL,VALUE2
CMP AL,BL
JE A1
JNE NOT_EQUAL
NOT_EQUAL: MOV AH,02H
MOV DX,OFFSET 'N'
INT 21H
A1:MOV AH,02H
MOV DX,OFFSET 'Y'
INT 21H
CODE ENDS
所以我是否需要在A1之后添加另一段代码,比如A2,然后跳转到第一行代码。dx中有什么?我觉得这不对劲mov ax,@data
?是的,不过您可能会使用更好的名称,如ELSE
和END\u IF
,以便更容易理解。分支时只进行一次跳转也是非常标准的。IE,比较,然后在false时跳转到false case,如果没有跳转,则执行true case,在true case末尾跳转到false case之后。@FrankKotler这是intel 8086处理器语法。DX是这里的数据寄存器。MOV AX,DX@ChrisPitman嗯,就像我跳转到不相等,如果它不相等,执行相等而没有任何跳转?请你把会议结束后的最后几行写给我,好吗。现在,如果删除JNE,会发生什么?它会做完全相同的事情。
DATA SEGMENT
VALUE1 DB 54H
VALUE2 DB 52H
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA
MOV AX,DX
MOV DS,AX
MOV AL,VALUE1
MOV BL,VALUE2
CMP AL,BL
JE A1
JNE NOT_EQUAL
NOT_EQUAL:
MOV AH,02H
MOV DX,OFFSET 'N'
INT 21H
JMP END1
A1:
MOV AH,02H
MOV DX,OFFSET 'Y'
INT 21H
END1:
MOV AH,4CH
MOV AL,00
INT 21H
CODE ENDS