关于 lea

GhostAdz 2003-08-22 02:45:18
我的程序只定义了一个代码段 .code
我把一个串定义在里面,string1 db "hello world$"
然后我想用int 21的9功能打印出来
mov ah,09h
lea dx,string1
int 21h
显示出很多乱码!
这应该是因为exe文件一开始总是把ds和es指向psp所以ds!=cs
而lea 又是默认ds段,所以会出错,于是我在这前面加了
mov ax,cs
mov ds,ax
就正确了 但是如果不这样改
而把lea dx,string1
改成lea dx,cs:string1也还是乱码!
可我看见别人用过cs:string这种方式的,
是否因为在执行int 21h的时候机器还是会去找ds?

lea dx,cs:string1是否的确取了cs段偏移地址?
请详细回答,合适就揭贴
...全文
99 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
GhostAdz 2003-08-23
  • 打赏
  • 举报
回复
多谢各位了哈
Yashmak 2003-08-22
  • 打赏
  • 举报
回复
哎,来晚了
ikao 2003-08-22
  • 打赏
  • 举报
回复
而把lea dx,string1
改成lea dx,cs:string1也还是乱码!

因为int 21h,9h的string pointer指向的是DS:DX
没错,你lea dx,cs:string1后offset string1的确在dx中,但是ds:dx的内容却非你所要
所以只定义一个代码段最好还是
mov ax,cs
mov ds,ax
或者push cs
pop ds
zhaobird 2003-08-22
  • 打赏
  • 举报
回复

INT 21,9 - Print String

AH = 09
DS:DX = pointer to string ending in "$"

这里ds:dx

lea dx,cs:string1是否的确取了cs段偏移地址

是的
W32API 2003-08-22
  • 打赏
  • 举报
回复
你是否有看清楚别人是用在 lea 上的?在访问数据时用段跨越不是什么稀奇事(16bit模式)
问题你是用在 lea 上,那么你确定你这时候的 ds 与 cs 之间的距离小于 64k ?

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧