乘法错误没有得到正确的结果?

时间:2017-12-24 14:45:47

标签: emu8086

我想做什么?

我正在从用户那里获取两个整数并尝试使用mul指令对它们进行多次复制。

有什么问题?

每当我尝试多次显示2个整数并尝试显示结果时,我会输出字母 T 作为输出。

data segment 

    msg1 db "Enter first number:$" 
    msg2 db 10, 13,"Enter second number:$" 
    msg3 db 10, 13,"The product is:$"
    n1 db ? 
    n2 db ?
    pkey db "press any key...$" 

ends

stack segment

    dw 128 dup(0) 

ends

code segment 
start: ; set segment registers: mov ax, data mov ds, ax mov es, ax

; add your code here

mov ax, @data 
mov ds, ax

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

mov ah, 01h 
int 21h

sub al, 48 
mov n1, al

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

mov ah, 01h 
int 21h

sub al, 48 
mov n2, al

mul n1

mov bl, al

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

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

mov ah, 4ch 
int 21h

lea dx, pkey 
mov ah, 9 
int 21h ; output string at ds:dx

; wait for any key....
mov ah, 1 
int 21h

mov ax, 4c00h ; exit to operating system. int 21h
ends

end start ; set entry point and stop the assembler.

1 个答案:

答案 0 :(得分:0)

为什么输入字母 T 作为输出?

这些说明:

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

导致AL的值更改为24(其实际为INT 21h指令,将AL的值更改为24)和指令{{1} } 将mov ah, 09h的内容设置为AH。然后是下一条指令

09

add ax, 48 添加到AX的内容中,该内容在AL中提供4884十六进制),这是54的ASCII值,然后显示{的内容{1}}使用以下代码:

T

显示字母AL

要解决此问题,请执行以下操作:

mov dl, al mov ah, 02h int 21h 指令后添加:

T

并在显示mul之后 像这样改变al到bl的发生:

mov bl, al     ; save the content of AL to BL