1

アセンブリ コードに問題があります。数値を交換した後にユーザー入力の 2 つの数値を追加したいのですが、これらの数値を追加すると、機能がうまく機能しませんでした。ありがとうございます。

これがコード

.model small 
.stack 100h
.data
        msg1 db 'Enter the number1:$'
        msg2 db 'Enter the number2:$'
        msg3 db 'After swap numbers are:$'
        msg4 db 'Sum is:$'
        num1 db ?
        num2 db ?
        sum db ?
        diff db ?
.code
MAIN PROC
        mov ax,@data
        mov ds,ax

        mov ah,09h         ;display first msg
        mov dx,offset msg1
        mov ah,01h         ;taking input
        int 21h
        mov num1,al


        mov ah,09h         ;display second msg
        mov dx,offset msg2
        int 21h
        mov ah,01h         ;taking input
        int 21h
        mov num2,al

        mov bl,num1
        mov cl,num2
        mov num1,cl
        mov num2,bl

        mov ah,09h         ;display third msg
        mov dx,offset msg3
        int 21h
        mov ah,02h
        mov dl,num1
        int 21h
        mov ah,02h
        mov dl,num2
        int 21h

        mov bl,num1
        add bl,num2
        mov sum,bl

        mov ah,09h       ;display fourth msg
        mov dx,offset msg4
        int 21h
        mov ah,02h
        mov dl,sum
        int 21h

        mov ah,4ch
        int 21h
MAIN ENDP 

END MAIN
4

1 に答える 1

1

プログラムは 1 桁の数字を 2 つ入力するため、合計が 18 になる可能性があります。コードはこの可能性に対処していませんが、これは意図的なものである可能性があります。

入力を受け取ったとき、(願わくば) 48 から 57 の範囲の ASCII 文字を受け取りました (これらは 0 から 9 の数字を表します)。これらの値を変数num1num2に割り当てる前に、48 を引いて、これらの値の文字の性質を取り除く必要があります。

mov ah, 09h         ;display first msg
mov dx, offset msg1
mov ah, 01h         ;taking input
int 21h
sub al, 48
mov num1, al
mov ah, 09h         ;display second msg
mov dx, offset msg2
int 21h
mov ah, 01h         ;taking input
int 21h
sub al, 48
mov num2, al

このようにして、後で合計すると、両方の数値の真の合計になります

結果を出力する準備ができたら、値をテキスト表現に変換する必要があります。48を追加するだけです。

mov ah, 09h         ;display third msg
mov dx, offset msg3
int 21h
mov ah, 02h
mov dl, num1
add dl, 48
int 21h
mov ah, 02h
mov dl, num2
add dl, 48
int 21h

mov ah, 09h         ;display fourth msg
mov dx, offset msg4
int 21h
mov ah, 02h
mov dl, sum
add dl, 48
int 21h
于 2015-11-07T12:18:48.203 に答える