读老罗WIN32疑问.

菜鸟一只_热爱ASM 2012-03-11 10:44:13
这个疑问在书中的P171页

.if ax == IDOK ;如果点击查看
invoke SendDlgItemMessage,hWnd,IDC_LISTBOX2,LB_GETSELCOUNT,0,0 ;返回选中的项目总数
MOV @dwCount,eax
invoke SendDlgItemMessage,hWnd,IDC_LISTBOX2,LB_GETSELITEMS,128/4,addr @szBuffer
;返回多选列表框的选中项目索引列表到缓冲区中
invoke lstrcpy,addr @szTextBuff,addr szSelect
lea esi,@szBuffer ;将地址传给esi,刚才取得的选中列表索引地址
.while @dwCount
lodsd ;
lea ecx,@szBuffer1 ;取偏移地址
invoke SendDlgItemMessage,hWnd,IDC_LISTBOX2,LB_GETTEXT,eax,ecx
;返回某个项目的字符串,w:位置索引,l:缓冲区地址
invoke lstrcat,addr @szTextBuff,addr szReturn
invoke lstrcat,addr @szTextBuff,addr @szBuffer1
dec @dwCount
.endw
.endif

问题:这个的lodsd怎么知道df的值是0还是1,好像没有对他有过赋值之类的。还是他的根据他的默认值,但我不知道他默认值是多少?0吗?我只是想确定一下。一时间看不明白请大家帮忙.
如果需要前后段代码我可以在后面贴出。
...全文
179 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wjuif 2012-04-13
  • 打赏
  • 举报
回复
楼上说的对应该先置位 CLD 否则谁知道ESI的生长方向是加还是减 LOASD 是直接从ESI取4字节到EAX中
大熊猫侯佩 2012-03-16
  • 打赏
  • 举报
回复
真想知道,直接逆api
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sholber 的回复:]

也许lstrcpy会设置DF。但不保证这样是安全的。换句话说,这属于不严谨的代码。
本来我想说,“鄙视win32的汇编,不讨论”的。
[/Quote]
..为什么要鄙视WIN32啊?
均陵鼠侠 2012-03-12
  • 打赏
  • 举报
回复
楼上所说,我。。。

其实,永远不要依赖或者猜测别的代码会设置了DF。
G_Spider 2012-03-12
  • 打赏
  • 举报
回复
默认是DF=0,即地址增方向,如果你在一个函数中设置了DF(STD)退出函数前一定要CLD 。所以,如果你在主函数中STD,再调用像printf之类的api,通常会崩溃。就怕别人写函数不严谨,置位了DF,之后,却没有清除该位。所以有时为了保险起见,在stos 之类指令之前加上cld等。
均陵鼠侠 2012-03-11
  • 打赏
  • 举报
回复
也许lstrcpy会设置DF。但不保证这样是安全的。换句话说,这属于不严谨的代码。
本来我想说,“鄙视win32的汇编,不讨论”的。

21,458

社区成员

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

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