我的第一个数字的第二个数字与第二个数字的第一个数字相同。我不知道为什么

时间:2015-08-09 15:22:18

标签: assembly x86 tasm

我是汇编语言的新手。我试图添加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

1 个答案:

答案 0 :(得分:3)

num db ?
num2 db ?
result db ?

输入2位数字的例程都会对内存执行3字节大小的写入操作。第一个数字,第二个数字,然后是 $ 字符。但是,您为每个数字仅定义了一个字节的存储空间。只需更改相关定义即可。

num    db ?,?,?
num2   db ?,?,?
result db ?,?,?,?

我建议给结果一个额外的存储字节,因为添加可能有3位数。最大值为99 + 99 = 198