如何在汇编语言中添加两个16位数?

时间:2016-12-06 08:54:58

标签: assembly x86 tasm

当我添加3 + 3时,它的答案是正确的,但当我添加7 + 7时,它不起作用。我想添加两个数字,如75 + 75,答案应该是150或900 + 100,答案应该是1000.

它的程序请告诉我。我的代码有什么问题,我很抱歉因为我只是新的汇编语言..

.model small
.stack 0100h
.data
     num1 db ?
     num2 db ?
     msg1 db 13,10, "Enter 1st Number : $"
     msg2 db 13,10, "Enter 2nd Number : $"
     msg3 db 13,10, "The answer is : $"
.code

    mov ax, @data
    mov ds, ax

    lea dx,msg1
    mov ah,09h
    int 21h

start:  
    mov ah,01h
    int 21h
    cmp al,0dh              
    je second                                                           
    sub al,30h                                                            
    push ax                                                            
    mov num1,al 
    jmp start

second:
    lea dx,msg2
    mov ah,09h
    int 21h

number2:    
    mov ah,01h
    int 21h
    cmp al,0dh              
    je ans                                                          
    sub al,30h                                                            
    push ax                                                            
    mov num2,al 
    jmp number2

ans:

    mov al,num1
    add al,num2

    MOV AH,9
    LEA DX,MSG3 
    INT 21H

    ADD AL,30H
    MOV AH,2h
    MOV DL,AL
    INT 21H

jmp start

end 

1 个答案:

答案 0 :(得分:0)

简单回答:使用ADD< 16bit Register>,< 16bit Register>

你混淆了两件事:二进制表示和ASCII表示。你的cpu不知道“4711”或“12345”是什么意思。它只是一系列字节。

你需要转换字符串的ASCII表示,添加它们的二进制值,并将结果转换回ASCII

对于两者而言,SO中有很多文章