我想做什么?
我正在从用户那里获取两个整数并尝试使用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.
答案 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中提供48
(84
十六进制),这是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