我将数字10除以10,我希望显示值,即ax和dx,但是TASM不允许我将ax,也不允许dx移动到dl中并排显示它们
.model small
.stack 100h
.data
Integer dw 5h
Numbre dw 5h
.code
Start:
mov ax,@data
mov ds,ax
mov ax,Integer
mov bx,Numbre
add ax,bx
mov cx,10h
mov dx,0h
jmp compare
compare : cmp ax,09
ja divide
jbe display_result
divide : div cx
add ax,"0"
add dx,"0"
jmp display_result_large
display_result : add ax,"0"
mov dl,ax
mov ah,2h
int 21h
jmp endall
display_result_large : mov dl,ax
mov ah,2h
int 21h
mov dl,dx
mov ah,2h
int 21h
jmp endall
endall : mov ah,4ch
int 21h
end Start
答案 0 :(得分:3)
dl
是一个8位寄存器 - ax
和dx
是16位寄存器。您可以将ax
的低字节和高字节作为al
和ah
以及将dx
作为dl
和dh
来访问。因此,您应使用mov dl, ax
而不是mov dl,al
。
指令mov dl,dx
将被mov dl,dl
取代,但这将是毫无意义的操作。但是,由于您在dl
时更改了mov dl,al
的值,因此您必须以某种方式保存并恢复它。最简单的方法是使用堆栈:
display_result_large :
push dx ; save dx on the stack
mov dl,al
mov ah,2h
int 21h
pop dx ; restore dx's old value. the low byte of dx is dl, so
; the character is already in the correct register.
mov ah,2h
int 21h
jmp endall