如何在 Assembly (tasm) 的 ax 和 dx 中显示结果和余数
How do I display the result and remainder in ax and dx in Assembly (tasm)
我有数字 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
dl
是一个 8 位寄存器 - ax
和 dx
是 16 位寄存器。您可以访问 ax
的低字节和高字节,如 al
和 ah
,以及 dx
的低字节和高字节,如 dl
和 dh
。所以你应该使用 mov dl,al
.
而不是 mov dl, ax
指令mov dl,dx
将被mov dl,dl
取代,但那将是一个毫无意义的操作。但是,由于您在 mov dl,al
时更改了 dl
的值,因此您必须以某种方式保存和恢复它。最简单的方法是使用堆栈:
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
我有数字 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
dl
是一个 8 位寄存器 - ax
和 dx
是 16 位寄存器。您可以访问 ax
的低字节和高字节,如 al
和 ah
,以及 dx
的低字节和高字节,如 dl
和 dh
。所以你应该使用 mov dl,al
.
mov dl, ax
指令mov dl,dx
将被mov dl,dl
取代,但那将是一个毫无意义的操作。但是,由于您在 mov dl,al
时更改了 dl
的值,因此您必须以某种方式保存和恢复它。最简单的方法是使用堆栈:
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