2016-12-06 83 views
0

当我添加3 + 3它的答案是正确的,但是当我添加7 + 7它不起作用。我想添加两个数字,如75 + 75其答案应该是150或900 + 100其答案应该是1000.如何在汇编语言中添加两个16位数字?

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

.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 
+3

很多文章这是相同的ol'问题:多位数字。看看如何将一个字符串转换为数字(atoi)和反向(itoa)。这方面应该有很多问题。 –

+0

我知道如何反转,但是,我不知道现在如何解决这个问题..有什么,你可以帮我修复我的代码?谢谢 –

+1

玛格丽特刚刚给你解决方案。您试图将代表数字的多位字符串转换为数字。有* no * panacea指令来做到这一点,而是,需要循环阅读从右到左的字符串,并从文本转换为整数和相乘。在谷歌的'atoi'汇编中有很多例子。 –

回答

0

简单的答案:使用添加< 16位注册>,< 16位注册>

你”重新混淆两件事:二进制表示和ASCII表示。你的CPU不知道“4711”或“12345”的含义。这只是一系列的字节。

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

两个,也有SO

+0

或者他*可以*实际添加两个ASCII字符串逐位数字......有时当我看到这些学生问题时,我很想试着用这种方式发布解决方案,只是为了试验这个讲师如何反应...:D – Ped7g