我是汇编语言的新手。我试图添加2个只有2位数的整数,但每当我尝试访问num1中的第二个数字时,它神秘地访问num2的第一个数字。我需要帮助!我真的不知道为什么。我正在使用TASM btw。
这是我的代码。
;-----------------------
.model small
.stack
.data
num db ?
num2 db ?
result db ?
prompt1 db "Enter 1st number: $"
prompt2 db "Enter 2nd number: $"
prompt3 db "Addition: $"
.code
main proc
;use the data segment
mov ax, @data
mov ds, ax
mov es, ax
;-------input first number--------------------
;setcursor
mov ah, 02
mov dh, 00h
mov dl, 00h
int 10h
mov ah, 09
lea dx, prompt1
int 21h
mov cx, 02
lea si, num
loop1:
mov ah, 07
int 21h
cmp al, 0Dh
je outA
cmp al, '0'
jge True_A
jmp false
True_A:
cmp al, '9'
jle True_B
jmp false
True_B:
mov ah, 02
mov dl, al
int 21h
mov [si], al
jmp next
next:
inc si
dec cx
false:
jnz loop1
outA:
mov bl, '$'
mov [si], bl
;--------input 2nd number-----------------------------
;setcursor
mov ah, 02
mov dh, 02h
mov dl, 00h
int 10h
mov ah, 09
lea dx, prompt2
int 21h
mov cx, 02
lea di, num2
loop2:
mov ah, 07
int 21h
cmp al, 0Dh
je outB
cmp al, '0'
jge True_C
jmp falseA
True_C:
cmp al, '9'
jle True_D
jmp falseA
True_D:
mov ah, 02
mov dl, al
int 21h
mov [di], al
jmp nextA
nextA:
inc di
dec cx
falseA:
jnz loop2
outB:
mov bl, '$'
mov [di], bl
;--------------------------------------
mov ah, 02
mov dh, 05h
mov dl, 00h
int 10h
mov ah, 02
mov dl, num + 1
int 21h
mov ax, 4c00h
int 21h
main endp
end main
答案 0 :(得分:3)
num db ?
num2 db ?
result db ?
输入2位数字的例程都会对内存执行3字节大小的写入操作。第一个数字,第二个数字,然后是 $ 字符。但是,您为每个数字仅定义了一个字节的存储空间。只需更改相关定义即可。
num db ?,?,?
num2 db ?,?,?
result db ?,?,?,?
我建议给结果一个额外的存储字节,因为添加可能有3位数。最大值为99 + 99 = 198