汇编Win32的问题,汤老师进

来源:百度知道 编辑:UC知道 时间:2024/06/15 10:45:53
...
local @szBuffer[58]:byte
....
.elseif ax==IDOK
mov @szBuffer,'1'
invoke SetDlgItemText,hWnd,IDC_CUSTOMTEXT,addr @szBuffer
......
其中,IDC_CUSTOMTEXT是1个text框的ID, 就要显示的框.

上面的代码的结果是:每次按 按钮,都显示一个 ‘1’,但是我的问题是怎么样才可以每次按,都在原的字符后面加 个‘1’,比如第一次按了 显示‘1’,第二次按 显示‘11’,第3次按‘111’。。
分数双手奉上。
mov @szBuffer[EDI],'1'
INC EDI
invoke SetDlgItemText,hWnd,IDC_CUSTOMTEXT,addr @szBuffer
没能实现,一按 就错误提示,然后关闭程序.

这个要全局变量才成的,@szBuffer[58]:byte要定义在函数体的外面。
否则每调用窗口处理函数都会对@szBuffer重新分配,这样@szBuffer的内容永远都是'1'。并且还要注意@szBuffer需要0结束符。

由于要递增,则还要循环@szBuffer,找到结束符0。然后写入'1'和结束符0

两点:第一是@szBuffer要为全局变量
第二是在IDOK消息里面,需要找到结束符0,然后写入'1'和结束符0

关于Win32汇编,我只是看了看,并未进入实践。但其基础还是Intel8086/8088,即16位汇编,只是扩展了一些指令,改分段式寻址为平坦式寻址,提供了许多可供我们直接使用的API。

楼主的问题,关键是改变字节变量@szBuffer的内容,使其每次按键都改变它的值。可以初始化变址寄存器EDI,使其等于0
XOR EDI,EDI
然后,每次
mov @szBuffer[EDI],'1'
INC EDI
invoke SetDlgItemText,hWnd,IDC_CUSTOMTEXT,addr @szBuffer

记得invoke好像是要求要显示的字符串是以0结尾。细节问题,你再看看书。

很抱歉! Win32汇编,我不熟悉。

@szBuffer 确实需要0字符串结尾
要实现字符串操作了解一下
lodsb
这个汇编指令。