系统:dos6.20
编译工具:masm5.0
下面是test.asm文件中的代码:
;***************************************
code segment
assume cs:code,ds:code
org 100h
;---------------------------------------
start: jmp begin
mes db 'Hi, I learn assembly.$'
begin: mov dx,offset mes
mov ah,9
int 21h
mov ax,4c00h
int 21h
;---------------------------------------
code ends
;***************************************
end start
在命令提示符下执行编译和链接命令:
masm test.asm;
link test.obj;
text.exe //这里输出有乱码结果
exe2bin text.exe //转换成com格式
text.com //输出正常
本人是汇编初学者,想请教下大家:
在用link链接后,为何直接执行test.exe会出现乱码,而通过exe2bin命令转换后,执行生成的test.com文件就正常了呢?
能否说说exe2bin的用途?
------解决方案--------------------
exe 格式时,要将 ds 赋值以指向 code 段的,否则 ds 指向在 psp 导致错误;com 格式,ds 和 cs 都是指向了 psp 但 code 和 psp 在同一段编址内,这也是为什么 com 文件自己的内容从 0100h 偏址处开始的原因。