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
  • 相关阅读:
    用硬件卡克隆Linux集群
    基于Linux系统WINE虚拟机技术的研究
    Rpm另类用法加固Linux安全
    基于TC技术的网络流量控制实战
    开源世界里的七剑
    借Stunnel工具保护E-mail服务器
    如何应对DDOS网络攻击(之二)
    如何应对DDOS网络攻击
    Leetcode-983 Minimum Cost For Tickets(最低票价)
    Leetcode-413 Arithmetic Slices(等差数列划分)
  • 原文地址:https://www.cnblogs.com/galano/p/8721429.html
Copyright © 2011-2022 走看看