2016-04-19 2 views
1

Я начал 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 
+0

Если вам нужно взять номер из клавиатуру в виде строки, затем преобразуйте ее в числовую, внесите в нее некоторую математику, затем преобразуйте числовое значение в строку, чтобы отобразить ее, этот ответ содержит два procs: string2number и number2string = http://stackoverflow.com/questions/30243848/assembly-x86 -date-to-number-break-a-string-in-less-sections/30244131 # 30244131 –

ответ

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 
+0

Позвольте мне попробовать этого сэра. –

+0

это работает, но проблема в том, когда я добавляю 1 и 2, сумма равна 4. –

Смежные вопросы