【问题标题】:How can I add two 16 bit numbers in assembly language? [duplicate]如何在汇编语言中添加两个 16 位数字? [复制]
【发布时间】:2016-12-06 08:54:57
【问题描述】:

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

【问题讨论】:

  • 这是同一个问题:多位数字。看看如何将字符串转换为数字 (atoi) 和反向 (itoa)。这方面应该有很多问题。
  • 我知道如何扭转,但我不知道现在是否能解决这个问题.. 有什么可以帮助我修复我的代码的吗?谢谢
  • 玛格丽特刚刚给了你解决方案。您正在尝试将表示数字的多位字符串转换为数字。有 no 灵丹妙药指令可以做到这一点,但是需要循环从右到左读取的字符串并将文本转换为整数并进行乘法运算。 atoi google 的汇编中有很多例子。
  • 什么是汇编中的“字符串”:stackoverflow.com/a/40580889/4271923 如何将(无符号)数值转换为字符串:stackoverflow.com/a/40505938/4271923 .. 字符串转换为值:stackoverflow.com/questions/10471281/… ... 你还应该学习byte/word/dword 是什么,以及它们可以处理多少信息,因为 num1 db ? 不足以处理 0-900 范围内的数字,因此您的 900+100 示例无论如何都会失败。你在堆栈上pushing ax,但没有使用它。这是不好的做法,在这种情况下几乎无害,但是..
  • 如何使用我推的斧头??...我很抱歉,因为我只是这个汇编编程的新手..

标签: assembly x86 tasm


【解决方案1】:

简单回答:通过使用 ADD ,

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

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

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

【讨论】:

  • 或者他可以实际上逐位添加两个ASCII字符串...有时当我看到这些学生问题时,我很想以这种方式发布解决方案,只是为了试试讲师会如何反应... :D
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
相关资源
最近更新 更多