程序集添加两个数字

Posted

技术标签:

【中文标题】程序集添加两个数字【英文标题】:Assembly adding two numbers 【发布时间】:2016-04-19 10:49:16 【问题描述】:

我在 30 小时前开始学习组装 我正在尝试做一个活动,我可以运行一些代码 但我无法打印这两个数字的总和,我的代码有什么问题?

这是我当前的输出

Enter First Number:
Enter Second Number:

但有些不会打印

这是我的代码

.MODEL small
.STACK 100h
.DATA

        operation db, 13, 10, "Addition $"
        message1 db 13, 10, "Enter First Number: $"
        message2 db 13, 10, "Enter second Number: $"
        message3 db 13, 10, "Sum: $"
        newline db 13, 10, "$"

        nameinput label byte
        maxnamelen db 50
        curnamelen db ?
        namefield db 50 dup(?)

.CODE
start:
        mov ax, @data
        mov ds,ax

        mov ah,09h
        mov dx, offset operation
        int 21h

        mov ah, 01h
        int 21h

        cmp al, '1'
        je Addition

        Addition:
        mov ah, 09h
        mov dx, offset message1
        int 21h
        mov ah, 01h
        int 21h

        mov ah, 09h
        mov dx, offset newline
        int 21h

        mov ah, 09h
        mov dx, offset message2
        int 21h
        mov ah, 01h
        int 21h

        add al, bl
        mov ah, 09h
        mov dx, offset newline
        int 21h

        mov ax, 4c00h
        int 21h

        END

【问题讨论】:

如果您需要从键盘捕获一个数字作为字符串,然后将其转换为数字,对其进行一些数学运算,然后将数字转换为字符串以显示它,此答案包含两个过程:string2number 和 number2string = ***.com/questions/30243848/… 【参考方案1】:

您正在阅读 ascii 字符,而不是将它们转换为数字。我没有看到您尝试编写结果的部分(请注意,这仅在没有进位时才有效!9+2 -> ascii ';')

    mov dx, offset message1
    int 21h
    mov ah, 01h
    int 21h
    mov bl,al   ; save what you read
    sub bl,48   ; subtract '0'
    ...
    add bl,al   ; won't subtract '0' from second number... (save in bl)
    mov ah, 09h
    mov dx, message3
    int 21h
    mov ah, 02  ; print dl
    mov dl,bl   ; get value
    int 21h     ; ...because you would add '0' to print

【讨论】:

让我试试这个先生。 它有效,但问题是当我将 1 和 2 相加时,总和为 4。

以上是关于程序集添加两个数字的主要内容,如果未能解决你的问题,请参考以下文章

如何在人脸的两个点集之间添加度量以将其用于数字图像中的对象检测以进行人脸识别

Maven 程序集:添加同一工件的不同版本

团体程序设计天梯赛练习集——整除光棍

使用InternalsVisibleToAttribute给assembly添加“友元assembly”特性遭遇"强签名"

程序集强签名和安装程序数字签名

调用“ret”与调用sys_exit数字程序集gcc之间有什么区别