• 汇编学习笔记47


    三、 重复汇编

    有时程序会连续地重复完成相同或几乎相同的一组语句,当出现这种情况时,可考虑用重复伪指令定义的重复块,以简化源程序。

    重复块是允许建立重复语句的宏的一种特殊形式,它们与宏的不同之处在于它们没有被命名,并因而不能被调用。

    1. 伪指令 REPT

    伪指令REPT用于创建重复块,重复块的重复次数由一个数值表达式的值给定。一般格式如下:

    REPT 数值表达式

    需重复的语句组

    ENDM

    宏汇编程序把“需要重复的语句组”连续地重复汇编由表达式所决定的次数。

    例1:

    CHAR = 'A'

    TABLE LABEL BYTE

    REPET 26

    DB CHAR

    CHAR=CHAR+1

    ENDM

    汇编为:

    + TABLE LABEL BYTE

    + DB 'A'

    + DB 'A'+1

    + …

    + DB 'A'+24

    + DB 'A'+25

    例2:

    要求建立一个100D字的数组,其中每个字的内容是下一个字的地址,而最后一个字的内容是第一个字的地址

    ARRAY LABEL WORD

    REPET 99

    DW $+2

    ENDM

    DW ARRAY

    汇编后:

    + ARRAY ABBEL WORD

    + DW $+2

    + DW $+2

    + …

    + DW $+2

    + DW ARRAY

    2. 伪指令IRP

    伪指令IRP用于创建重复块。重复次数和每次重复使用的实参由参数列表决定。一般格式如下:

    IRP 形式参数, <实参1, 实参2, ……, 实参n>

    需重复的语句

    ENDM

    其中实参的个数决定了重复的次数

    例3:

    下面重复块实现把0~9的平方存入数值QUART中

    QUART LABEL BYTE

    IRP X, <0, 1, 2, 3, 4, 5, 6, 7, 8, 9>

    DB X*X

    ENDM

    例4:

    下面的重复块实现了把若干寄存器压入堆栈

    IRP REG, <AX, BX, CX, DX>

    PUSH REG

    ENDM

    + PUSH AX

    + PUSH BX

    + PUSH CX

    + PUSH DX

    3. 伪指令 IRPC

    伪指令IRPC和IRP相似, 但实参列表是一个字符串,一般格式如下:

    IRPC 形式参数 字符串

    需要重复的语句组

    ENDM

    字符串的长度规定了重复的次数,如果字符串包含了空格, 逗号等分隔符, 那么字符串需用一对尖括号括起来。

    例5:

    TABLE LABEL BYTE

    IRPC X, 0123456789

    DW (X+1)*2

    ENDM

    例6:

    下面重复语句块实现把AX, BX, CX, DX四个寄存器依次压入堆栈

    IRPC REG, ABCD

    PUSH REG&X

    ENDM

  • 相关阅读:
    记一道有趣的数学题
    BJOI2018 二进制
    BJOI2016 IP地址
    BJOI2016 回转寿司
    BJOI2017 开车
    BJOI2019 光线
    java 下载
    springboot 运行相关命令
    sql mapper 里面 Integer 类型判断
    springboot 访问jar同级别下的文件访问问题
  • 原文地址:https://www.cnblogs.com/hailong/p/1942322.html
Copyright © 2020-2023  润新知