Assembly 用于比较2个数字的汇编程序。我做错了什么?

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

现在这个程序将比较52和54,如果不相等,则返回N,如果相等,则返回Y。但它正在返回纽约。有人能帮忙吗?我做错了什么?如果相等,则应使用JE跳转;如果不相等,则应使用JNE跳转

您正从
不相等的案例跌入
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