以下面的代码为例
stack segment stack
db 8 dup(?)
stack ends
data segment
string db 'hello world'
data ends
code segment 'code'
assume cs:code,ds:data,ss:stack
start: ;mov ax,data
;mov ds,ax
mov dx,offset string
mov ah,09h
int 21H
code ends
end start
以上代码执行后无法成功输出字符串“hello world”,输出的是大段的乱码
原因:
- dos的功能调用中AH=09H的入口参数是:DS:DX=字符串地址
- 程序只是把string的偏移地址(相对于段首地址的偏移量)给到了dx而没有将数据段的段首地址给到ds段寄存器中
解决:
添加可执行代码
mov ax,data
mov ds,ax
即将以上代码段的注释符号“;”去掉