zoukankan      html  css  js  c++  java
  • 汇编中如果汇编和调用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, 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
    @@:
       pushad
       invoke MessageBoxA,NULL,CTEXT("13"),CTEXT("13"),MB_OK
       popad
        loop @B
        
        invoke ExitProcess,0
        
    end START
  • 相关阅读:
    APP之百度地图SDK的AK值获取(android)
    横向滚动菜单-选中标题居中显示
    函数按引用传参问题
    js验证提交
    Java servlet ajax
    数据库3种读
    mybatis插件
    mybatis 缓存
    从前端对象中获取的文本变为字符串,并替换其中一些指定的字符
    多个窗口开启后,切换到指定title的窗口
  • 原文地址:https://www.cnblogs.com/qq32175822/p/3997517.html
Copyright © 2011-2022 走看看