
汇编 ds与es 之间的问题
我写了这样一个小程序,assumecs:codecodesegmentstart:callcopyDivmovax,0movds,axmovwordptrds:[0],2...
我写了这样一个小程序,
assume cs:code
code segment
start:
call copyDiv
mov ax,0
mov ds,ax
mov word ptr ds:[0],200h
mov word ptr ds:2[0],0h
mov ax,1000h
mov bh,1
div bh
mov ah,4ch
int 21h
copyDiv:
mov ax,cs
mov ds,ax
mov si,d0
mov ax,0
mov es,ax
mov di,200h
mov cx,offset endd0-offset d0
cld
rep movsb
ret
d0:
jmp d0Srart
nfo db 'Error!$',0
d0Srart:
mov dx,offset nfo
mov ah,09h
int 21h
mov ah,4ch
int 21h
endd0:
code ends
end start
输出乱码
但是我知道错在
mov ax,0
mov ds,ax
mov word ptr ds:[0],200h
mov word ptr ds:2[0],0h
把ds改为es就一切正常了,
但是,,,,为什么? 展开
assume cs:code
code segment
start:
call copyDiv
mov ax,0
mov ds,ax
mov word ptr ds:[0],200h
mov word ptr ds:2[0],0h
mov ax,1000h
mov bh,1
div bh
mov ah,4ch
int 21h
copyDiv:
mov ax,cs
mov ds,ax
mov si,d0
mov ax,0
mov es,ax
mov di,200h
mov cx,offset endd0-offset d0
cld
rep movsb
ret
d0:
jmp d0Srart
nfo db 'Error!$',0
d0Srart:
mov dx,offset nfo
mov ah,09h
int 21h
mov ah,4ch
int 21h
endd0:
code ends
end start
输出乱码
但是我知道错在
mov ax,0
mov ds,ax
mov word ptr ds:[0],200h
mov word ptr ds:2[0],0h
把ds改为es就一切正常了,
但是,,,,为什么? 展开
2个回答
展开全部
你的问题不在于ds和es的区别,而在于int21h的9号功能。
这个功能需要用到ds dx 指向需要显示的字符串,你前面改了ds,导致ds:dx指针的位置错误,指向了乱码,当然就显示乱码了。你改成用es后,ds没被破坏,显示就正确了。
你把这几句改一下试试:
mov dx,offset nfo
mov ah,09h
int 21h
改成
push cs
pop ds ;让ds和cs相同
mov dx,offset nfo
mov ah,09h
int 21h
这个功能需要用到ds dx 指向需要显示的字符串,你前面改了ds,导致ds:dx指针的位置错误,指向了乱码,当然就显示乱码了。你改成用es后,ds没被破坏,显示就正确了。
你把这几句改一下试试:
mov dx,offset nfo
mov ah,09h
int 21h
改成
push cs
pop ds ;让ds和cs相同
mov dx,offset nfo
mov ah,09h
int 21h
更多追问追答
追问
你说的办法我试过了,,但是管用啊,,点反应都没得的
追答
assume cs:code
code segment
start:
call copyDiv
mov ax,0
mov ds,ax
mov word ptr ds:[0],200h
mov word ptr ds:2[0],0h
mov ax,1000h
mov bh,0
div bh
mov ah,4ch
int 21h
copyDiv:
mov ax,cs
mov ds,ax
mov si,offset d0
mov ax,0
mov es,ax
mov di,200h
mov cx,offset endd0-offset d0
cld
rep movsb
ret
d0:
call d0Srart
nfo db 'Error!$',0
d0Srart:
pop dx
push cs
pop ds
mov ah,09h
int 21h
mov ah,4ch
int 21h
endd0:
code ends
end start
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询