首页 > 代码库 > 汇编中如果汇编和调用API混合用的话要注意Pushad popad
汇编中如果汇编和调用API混合用的话要注意Pushad popad
某群有个人提出一个奇怪的问题,这段代码的循环不正常
;MASMPlus 代码模板 - 控制台程序
.386
.model flat, stdcall
option casemap :none
include windows.inc
include user32.inc
include kernel32.inc
include masm32.inc
include gdi32.inc
includelib gdi32.lib
includelib user32.lib
includelib kernel32.lib
includelib masm32.lib
include macro.asm
.data
lpMsg db "Hello World!",0
.data?
buffer db MAX_PATH dup(?)
.CODE
START:
mov ecx,5
@@:
invoke MessageBoxA,NULL,CTEXT("13"),CTEXT("13"),MB_OK
loop @B
invoke ExitProcess,0
end START
按道理Loop等于ECX-1,然后查看ECX==0,如果相当则不循环,如果不等于则进行循环,但是这个ECX却不是5
在调用Api前后加入pushad popad则正常了
;MASMPlus 代码模板 - 控制台程序.386.model flat, stdcalloption casemap :noneinclude windows.incinclude user32.incinclude kernel32.incinclude masm32.incinclude gdi32.incincludelib gdi32.libincludelib user32.libincludelib kernel32.libincludelib masm32.libinclude macro.asm.data lpMsg db "Hello World!",0 .data? buffer db MAX_PATH dup(?) .CODESTART: mov ecx,5@@: pushad invoke MessageBoxA,NULL,CTEXT("13"),CTEXT("13"),MB_OK popad loop @B invoke ExitProcess,0 end START
汇编中如果汇编和调用API混合用的话要注意Pushad popad
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。