如何比较汇编语言中的数字

时间:2014-08-13 18:44:49

标签: assembly tasm

.model small
.stack 64
.data

STR1 DB 'Enter the first number: $';
STR2 DB 'Enter the second number: $';
STR3 DB 'Number 1 is greater than number 2$';
STR4 DB 'Number 1 is less than number 2$';
STR5 DB 'Number 1 is equal to number 2$';

KB_INPUT LABEL BYTE
MAX_LEN DB 20
ACT_LEN DB ?
KB_DATA DB 20 DUP ('$')

KB1_INPUT LABEL BYTE
MAX1_LEN DB 20
ACT1_LEN DB ?
KB1_DATA DB 20 DUP ('$')

.code

main proc far
mov ax, @data
mov ds, ax

LEA DX, STR1
MOV AH, 09H
INT 21H


MOV AH,01H
LEA DX, KB_INPUT
INT 21H


MOV DL, 0DH
MOV AH, 02H
INT 21H

MOV DL, 0AH
MOV AH, 02H
INT 21H

LEA DX, STR2 
MOV AH, 09H
INT 21H


MOV AH,01H
LEA DX, KB1_INPUT
INT 21H


MOV DL, 0DH
MOV AH, 02H
INT 21H

MOV DL, 0AH
MOV AH, 02H
INT 21H

mov al, KB_DATA+0
CMP al,KB1_DATA+0
JE eqll
JG gtr
JL lesss

eqll:
LEA DX, STR5
MOV AH, 09H
INT 21H

gtr:
LEA DX, STR3
MOV AH, 09H
INT 21H

lesss:
LEA DX, STR4
MOV AH, 09H
INT 21H

exit:
mov ax,4C00H
int 21h
main endp
end main

我想显示两个数字之间的关系。但是当我输入数字1的“5”和数字2的“4”时,会出现错误,为什么?

1 个答案:

答案 0 :(得分:0)

您需要在每个案例之后添加JMP,例如

eqll:
LEA DX, STR5
MOV AH, 09H
INT 21H
JMP exit

在您显示的每条消息之后没有JuMP指令,处理器将继续运行并打印其他消息。 这就像在高级语言中编写switch(..)case:...但忘记在每个case语句之后放置。 我认为你的意思是错误,你得到多条消息?