1

ユーザーから2桁の数字を読み取り、それを変数に格納して後で出力するには、アセンブリ内のプログラムが必要です。いろいろ試しましたが、抜けませんでした。これが私のコーディングです。

  .model small
.stack 100h
.data
    msg db "Enter a number: $"
    msg2 db "You have entered: $"
    num1 db 0
    num2 db 0
    temp db 0
    ten db 10
    readNum db 0
    t2 db 0
    t1 db 0
.code
    mov ax,@data
    mov ds,ax

    call read
    call endL
    call write


    proc endL
        mov dl,0ah
        mov ah,02h
        int 21h
        ret
    endp

    proc read
        mov dx,offset msg
        mov ah,09h
        int 21h

        mov ah,01h
        int 21h
        mov num1,al

        mul ten
        mov temp,al

        mov dl,temp
        add dl,48
        mov ah,02h
        int 21h

        mov ah,01h
        int 21h
        mov num2,al
        mov dl,num2
        add dl,temp     
        mov readNum,dl
        ret
    endp

    proc write
        mov dx,offset msg2
        mov ah,09h
        int 21h

        mov al,readNum
        mov ah,00
        div ten

        mov t1,ah
        mov t2,al

        mov dl,t1
        add dl,48
        mov ah,02h
        int 21h

        mov dl,t2
        add dl,48
        mov ah,02h
        int 21h
    endp

mov ax,4c00h
int 21h

end 

上記のプログラムによると、42 を入力すると、入力した数字は 85 と表示されます。プログラムでエラーを見つけることができませんでした。誰か助けてください。

4

2 に答える 2

2

次のプログラムをチェックしてください。私はあなたのものを編集しました。フランク・コトラーがすでに述べたように、小さな間違いがあります。つまり、ユーザー入力を数字に変換していません。ユーザー入力に 48 を追加しました。しかし、そこから 48 を引く必要があります。

.model small
    .stack 100h
    .data
        msg db "Enter a number: $"
        msg2 db "You have entered: $"
        num1 db 0
        num2 db 0
        temp db 0
        ten db 10
        readNum db 0
        t2 db 0
        t1 db 0
    .code
        mov ax,@data
        mov ds,ax

        call read
        call endL
        call write


        proc endL
            mov dl,0ah
            mov ah,02h
            int 21h
            ret
        endp

        proc read
            mov dx,offset msg
            mov ah,09h
            int 21h

            mov ah,01h
            int 21h
            sub al,48
            mov num1,al

            mov ah,01h
            int 21h
            sub al,48
            mov num2,al     

            mov al,num1
            mul ten
            add al,num2

            mov readNum,al
            ret
        endp

        proc write
            mov dx,offset msg2
            mov ah,09h
            int 21h

            mov al,readNum
            mov ah,00
            div ten

            mov dl,ah
            mov t2,dl

            mov dl,al
            add dl,48
            mov ah,02h
            int 21h

            mov dl,t2
            add dl,48
            mov ah,02h
            int 21h
        endp

    mov ax,4c00h
    int 21h

    end 
于 2013-06-08T01:30:20.607 に答える
2

ASCII値を数値に変換しないことについて他の人が指摘したこととは別に、不必要に多くの変数を使用していることに気付きました。ユーザーから 1 つの数字を取得して表示する必要がある場合は、その 1 つの数字を格納するためのスペースが必要です。

こちらのページを参考にしてみてはいかがでしょうか。
問題が解決することを願っています。

于 2013-06-17T14:04:12.047 に答える