您的位置:首页 > 编程语言

80x86汇编语言编程:宏指令

2016-01-25 12:01 405 查看
用 80x86 汇编语言编写程序时,可以使用微软推出的软件 MASM.EXE 来进行编译。

这个软件的名称,第一个字母是“M”,它代表了“宏汇编”的意思。

使用这个编译软件,就允许我们自己编写“宏指令”了。

宏指令和子程序很像。

使用子程序时,经过编译后,子程序的代码是独立存在的,可以由主程序反复的调用,整个程序比较简短。

使用宏指令时,编译后的产生目标程序很长,因为在编译的时候,软件会把宏指令的代码插入到“宏调用”的位置。

代码较长,换来的是执行速度的提高,因为省去了子程序调用、返回的操作。

现在,很多人都是利用 C 语言编程,因为 C 语言带有很多的函数库,基本就已经可以满足初级需要了。

如果利用宏指令概念和方法,我们也就可以编写自己的宏指令库,调用的时候,使用自定义的宏指令,这也就是相当于自己创作了一种新的语言。

呵呵,汇编语言,处处都涉及到计算机的内部,以至于现在没有多少人能够弄这个。

下面介绍一个关于宏的实例,其中完整的包括了:宏定义、参数引用、宏调用。

如果读者有兴趣,再看看编译后的列表文件,还会看到“宏展开”的现象。

题目:在数据段建立本班学生档案(包括姓名学号),编写根据学号查找姓名的程序。

要求:通过输入学号,输出对应的学生姓名。

做而论道编写的程序如下。

;---------------------------------
;宏定义

CHA MACRO  NUMB     ;宏名称以及参数

    LEA  DX, STRING1
    MOV  BL, NUMB   ;取参数
    MUL  BL
    ADD  DX, AX
    MOV  AH, 9
    INT  21H
ENDM                ;宏定义结束
;---------------------------------
DATA SEGMENT        ;数据段

    STRING1  DB  'Zhang san $'
CHANG  EQU  $ - STRING1
    STRING2  DB  'Li si     $'
    STRING3  DB  'Wang er   $'
    STRING4  DB  'xiao hong $'
    STRING5  DB  'fang fang $'
    STRING6  DB  'ming ming $'
    STRING7  DB  'bing bing $'

DATA ENDS
;---------------------------------
CODE SEGMENT         ;代码段

    ASSUME  CS:CODE, DS:DATA

START:
    MOV   AX, DATA
    MOV   DS, AX

    MOV   AH, 1
    INT   21H        ;INPUT: '0' ~ '6'

    AND   AL, 0FH    ;AL = 0~6

    CHA   CHANG      ;宏调用

    MOV   AH, 4CH    ;结束程序
    INT   21H
CODE ENDS
    END   START
;---------------------------------

为了简明起见,程序中没有编写针对误输入而排除错误的程序段。

题目链接:http://zhidao.baidu.com/question/510078955.html

提问者评价:谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: