装配添加两个数字

时间:2016-04-19 10:49:17

标签: assembly dos

我是在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

1 个答案:

答案 0 :(得分:1)

您正在阅读ascii字符,而不是按数字转换它们。我没有看到你试图写出结果的部分(注意,这只有在没有随身携带的情况下才有效!9 + 2 - > ascii&#39 ;;')

    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