初学win32 asm 的问题
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.data
szCaption db '恭喜',0
szText db '当您看到这个信息的时候,您已经可以编译Win32汇编程序了!',0
;code segment
; assume cs:code
.code
start:
push 0
push "ddd"
invoke MessageBox ,NULL, 'nea',offset szText,0
invoke ExitProcess,NULL
ret
;code ends
end start
为何invoke MessageBox ,NULL, 'test',offset szText,0
出错'test'不能这样用吗?说是访问无权访问的虚拟内存,为何?
问题点数:0、回复次数:3Top
1 楼dunkel(内心和夜 哪个黑)回复于 2003-11-02 16:53:19 得分 0
不能啊, 你看看最后生成的 .exe 就可以发现, 编译程序将 "ddd" 这样的字符串作为立即数 0x646464 使用了(字符 'd' 的 ascii 值为 64h), 和你的原意是大相径庭了. 字符串应该先定义后再使用, 就象 szText 和 szCaption 一样: (下面的代码就可以显示一个对话框了)
start:
invoke MessageBox ,NULL, ,offset szText, offset szCaption, 0
invoke ExitProcess,NULL
ret
Top
2 楼sunjmmeishao1(天山兜兜)回复于 2003-11-02 16:57:45 得分 0
单这一句也不对啊
invoke MessageBox ,NULL, 'nea',offset szText,0
'nea'有问题,我知道改为字符串就可以,可是这样为何不对,是不是'nea'+0就可以了把
Top
3 楼jiniang(小羊)回复于 2003-11-02 21:47:19 得分 0
.386
.model flat,stdcall
option casemap:none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
.data
szCaption db '恭喜',0
szText db '当您看到这个信息的时候,您已经可以编译Win32汇编程序了!',0
;code segment
; assume cs:code
.code
start:
;push 0
;push "ddd"
;invoke MessageBox ,NULL, addr 'nea',addr szText,0
invoke MessageBox,NULL,addr szText,addr szText,0
;或者
;invoke MessageBox,NULL,offset szText,offset szText,0
invoke ExitProcess,NULL
ret
;code ends
end startTop




