Assembly win xp上的INT 21H函数#9
我试图编译并执行以下汇编代码Assembly win xp上的INT 21H函数#9,assembly,tasm,Assembly,Tasm,我试图编译并执行以下汇编代码 .model small .stack 2000H .data msg db 'Enter $'; .code .startup main: call readeq; jmp exitl; readeq proc near mov ah,9; mov dx,0; lea dx,msg; int 21H; ret; readeq endp exitl: end; .exit 结果是: Enterê♦FGÇ=u⌠░ 埃♦弗克斯├P
.model small
.stack 2000H
.data
msg db 'Enter $';
.code
.startup
main:
call readeq;
jmp exitl;
readeq proc near
mov ah,9;
mov dx,0;
lea dx,msg;
int 21H;
ret;
readeq endp
exitl:
end;
.exit
结果是:
Enterê♦FGÇ=u⌠░ 埃♦弗克斯├PS.Ç>--m☺T♠eíδ╕ ♥ï河☼╢]☺♥√;╟~ e–t=♦Gδ≤∙GG[X├S3
e9E☻特ï╪X.Ç>--m☺T♠伊伊↔â╟&;√}直径:r☻δ∩∙δ☺°[├QRS3█3.∗>--m☺T♥â╟&e8♣塔尔♂δ⌠CYQ;┘T♣δ≡∙δ☺°[ZY├Φ╬ ╦Φÿ ╦Φ. ╦ΦH╦Φ[ ╦╦代码>等等
如果我在Windows XP上使用TASM和TLINK,如何解决此问题?要正确终止您的程序,如果它是COM,您可以执行RET
,或INT 20h
(旧的CP/M方式)。如果您是EXE,请使用AX=4C00
(0是退出代码)然后INT 21h
jmp exitl不会终止您的程序。它继续运行,执行垃圾。INT 21h/0或INT 21h/ah=4c和al=return codemov dx,0不是必需的。您可以用lea dx覆盖它。