Assembly 是否显示最近输入的字符,而部件中没有out变量?
您好,我想知道如何在没有变量“char”的情况下显示字符,如下所示Assembly 是否显示最近输入的字符,而部件中没有out变量?,assembly,Assembly,您好,我想知道如何在没有变量“char”的情况下显示字符,如下所示 .model small .stack 100h .data msg1 db 'Hay go 1 phim: $' msg2 db 13,10,'Ky tu nhan duoc la: $' char db '$' .code main proc mov ax,@data mov ds,ax mov ah,09h lea dx,msg1 int 21h mov ah,01h
.model small
.stack 100h
.data
msg1 db 'Hay go 1 phim: $'
msg2 db 13,10,'Ky tu nhan duoc la: $'
char db '$'
.code
main proc
mov ax,@data
mov ds,ax
mov ah,09h
lea dx,msg1
int 21h
mov ah,01h
int 21h
mov char,al
mov ah,09h
lea dx,msg2
int 21h
mov ah,02h
mov dl,char
int 21h
mov ah,01h
int 21h
mov ah,4ch
int 21h
endp
end main
您必须在读取字符后将
al
存储到某个位置,因为dl
用于msg2
地址的低8b,并且al
中的值由msg2
输出修改。所以单靠简单的mov-dl,al
是行不通的
有不同的方法,如何为x86CPU保留一些价值。您的mov[char],al
只是一个选项(可读性好,易于理解,非常适合大多数情况)
另一种选择是将其保存在某个寄存器中,该寄存器不会被读写之间的代码修改。通过快速查看,看起来只有ax
和dx
在这两者之间进行了修改,因此您可以将该字符存储到cl
中
例如:
...
mov ah,01h
int 21h
mov cl,al
... output msg2
mov ah,02h
mov dl,cl
int 21h
另一个选项是将值临时存储到堆栈中:
...
mov ah,01h
int 21h
push ax ; store al
... output msg2
mov ah,02h
pop dx ; restore al directly into dl
int 21h
谢谢你的帮助:D