Assembly 是否显示最近输入的字符,而部件中没有out变量?

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

您好,我想知道如何在没有变量“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    
    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