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

Assembly 如何在汇编语言中添加两个16位数字?,assembly,x86,tasm,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

当我加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 

简单回答:通过使用ADD

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

您需要转换字符串的ASCII表示形式,添加其二进制值,然后将结果转换回ASCII


对于这两个问题,在SO

中有很多文章。简单的回答是:通过使用ADD

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

您需要转换字符串的ASCII表示形式,添加其二进制值,然后将结果转换回ASCII


对于这两个问题,有很多文章,所以这是同一个问题:多位数。了解如何将字符串转换为数字(atoi)和相反的数字(itoa)。这方面应该有很多问题。我知道如何扭转局面,但我不知道现在该如何解决这个问题。。有什么可以帮我修改代码的吗??谢谢你刚刚给了你答案。您正在尝试将表示数字的多位数字符串转换为数字。没有万能的指令可以做到这一点,而是需要从右向左循环读取字符串,并从文本转换为整数和乘法。在汇编中,有很多例子可以用于谷歌的
atoi
。汇编中的“字符串”是什么:如何将(无符号)数值转换为字符串:。。字符串到值:。。。您还应该了解什么是
byte/word/dword
,以及它们可以处理多少信息,因为
num1db?
不足以处理0-900范围的数字,所以您的900+100示例无论如何都会失败。您正在堆栈上
push
ing
ax
,但未使用它。这是不好的做法,在这种情况下几乎是无害的,但是..如何使用我推的斧头??。。。我很抱歉,因为我只是汇编编程的新手。这是同一个老问题:多位数。了解如何将字符串转换为数字(atoi)和相反的数字(itoa)。这方面应该有很多问题。我知道如何扭转局面,但我不知道现在该如何解决这个问题。。有什么可以帮我修改代码的吗??谢谢你刚刚给了你答案。您正在尝试将表示数字的多位数字符串转换为数字。没有万能的指令可以做到这一点,而是需要从右向左循环读取字符串,并从文本转换为整数和乘法。在汇编中,有很多例子可以用于谷歌的
atoi
。汇编中的“字符串”是什么:如何将(无符号)数值转换为字符串:。。字符串到值:。。。您还应该了解什么是
byte/word/dword
,以及它们可以处理多少信息,因为
num1db?
不足以处理0-900范围的数字,所以您的900+100示例无论如何都会失败。您正在堆栈上
push
ing
ax
,但未使用它。这是不好的做法,在这种情况下几乎是无害的,但是..如何使用我推的斧头??。。。我很抱歉,因为我只是这个汇编编程的新手。或者他实际上可以逐位添加两个ASCII字符串。。。有时,当我看到这些学生的问题时,我很想用这种方式发布解决方案,只是想试试选择器的反应他实际上可以一个数字一个数字地添加两个ASCII字符串。。。有时,当我看到这些学生的问题时,我很想用这种方式发布解决方案,只是想试试选择器的反应D