zoukankan      html  css  js  c++  java
  • MASM 重复汇编

    其实重复汇编也属于宏结构,本文应该可以说是上面前一篇文章的另一部分。

    程序中有时要连续重复一段相同或基本相同的语句,这时可以使用重复汇编来完成。重复汇编一样是在编译前进行展开的。重复汇编伪指令有3个:REPEAT/FOR/FORC,3条汇编伪指令的区别在于如何制定重复次数。

    1.REPEAT

    我们可以用重复汇编定义'0' - '9',请看以下示例程序:

    option    casemap:none
    
    include        windows.inc
    include        kernel32.inc
    include        user32.inc
    includelib    kernel32.lib
    includelib    user32.lib
    
    asc    =    '9'
    
    .data
    
    szNums        db    asc
            repeat    '9' - '0'
                asc  = asc - 1
                db    asc
            endm
            db    0
    .code
    
    Main    proc
        invoke    MessageBox,0,offset szNums,offset szNums,MB_OK
        invoke    ExitProcess,0
    Main    endp
    
    _START:
        call    Main
    end    _START

    2.FOR

    FOR伪指令按照实参表个数进行重复汇编,实参用<>括起来,并用,分割。比如,我们可以不使用pushad,而换一种方式压入所有寄存器。

    源代码如下:

        FOR    reg32,<eax,ebx,ecx,edx,edi,esi,ebp>
            push    reg32
        ENDM

    3.FORC

    FORC伪指令按字符串字符个数重复汇编。字符串可以用<>括起来,也可以不括,按照从左到右的顺序,每一次重复用一个字符替换形参。比如,我们可以写一段代码把一串10进制数字转换为字符串类型。

    .386
    .model    flat,stdcall
    option    casemap:none
    
    include        windows.inc
    include        kernel32.inc
    include        user32.inc
    includelib    kernel32.lib
    includelib    user32.lib
    
    .data
    szBuf        db    256    dup(0)
    
    .code
    
    Main    proc
        mov    esi,offset szBuf
        FORC    num,<0123456789>
            mov    byte ptr[esi],num
            add    byte ptr[esi],'0' - 0
            inc    esi
        ENDM
        invoke    MessageBox,0,offset szBuf,offset szBuf,MB_OK
        invoke    ExitProcess,0
    Main    endp
    
    _START:
        call    Main
    end    _START
  • 相关阅读:
    Error:Execution failed for task ':app:transformClassesWithDexForDebug'.
    Appcan——Box
    基于SSH框架的网上商城的质量属性
    框架的选择
    软件体系结构的认识
    Cocos2d-x项目创建方式
    一、设计模式简介
    数组与字符串四(例子、使用(2))
    数组与字符串三(Cocos2d-x 3.x _Array容器)
    数组与字符串二(例子、使用)
  • 原文地址:https://www.cnblogs.com/galano/p/8721429.html
Copyright © 2011-2022 走看看