请输入您要查询的百科知识:

 

词条 宏汇编程序
释义

宏汇编程序-MASM 汇编( Assemble )就是把用汇编语言编写的源程序翻译(汇编)成机器语言的目标程序。其基本工具是汇编程序。可使用小汇编程序( ASM ), 也可以使用微软公司产品宏汇编程序(MASM )。实验推荐使用宏汇编程序,因为它不但可以代替 ASM ,而且可以汇编具有宏定义的汇编程序。

宏意思是源程序中的一段有独立功能的程序代码

宏指令,用户自定义的指令。编程序时候,将多次使用的功能用一条宏指令来代替。

汇编包括指令 ,伪指令,宏指令。前两个都是规定的,最后一个是你自己设计的。

好处是用起来方便,::))定义就是为了使用,但是要先定义,后调用。

(这一点和子程序可是不一样啊)

例如,宏定义,两个字相乘

multiply MACRO opr1, opr2, result

push dx

push ax

mov ax,opr1

imul opr2

mov result, ax

pop ax

pop dx

ENDM

调用这个宏,

multiply cx, var, xyz[bx]

宏展开

1 push dx

1 push ax

1 mov ax, cx

1 imul var (var不能使立即数)

1 mov xyz[bx], ax

1 pop ax

1 pop dx

(就是带进去,看明白了吧,注意一点,必须保证展看后有效)

例如,求绝对值

宏定义,

absol MACRO oper

LOCAL next

cmp oper, 0 (和0比较)

jge next

neg oper (求补,就是求绝对值了)

next: (防止多次存入一个地址)

ENDM

宏调用,

.........

absol var

.......

absol bx

宏展开,

1 cmp var,0

1 jge ??0000

1 neg var

1 ??0000:

..........

1 cmp bx, 0

1 jge ??0001

1 neg bx

1??0001:

(很清楚把,就像是你做好了一个公式,然后带入就是了,

汇编学到这里才觉得有趣:))

&使用

例如宏定义,

leap macro cond, lab

j&cond lab

endm

宏调用

leap z, there

.........

leap nz, here

宏展开,

1 jz there

.........

1 jnz here

(明白了吧,就是and,合起来的意思,没有什么好讲的,)

在举一个例子

msg macro lab, num, xyz

lab&num db 'WELCOEME YOU STUDY WITH JINZHOU MR,&xyz'

endm

宏调用

msg ary, 1, wang (这个地方不用注释吧,就是调用两次:)

......

msg ary, 2, zhang

宏展开

1 ary1 db 'WELCOEME YOU STUDY WITH JINZHOU MR wang'

.......

1 ary2 db 'WELCOEME YOU STUDY WITH JINZHOU MR zhang'

(特别简单吧,很好玩吧,)

%用法

例如,

宏定义,

msg macro count, string

msg&count db string

endm

errmsg macro text

cntr = cntr + 1

msg %cntr, text

endm

宏调用

entr=0

....

errmsg 'SYNTAX ERROR'

.......

errmsg 'INVALID OPERAND'

宏展开

1 cntr = cntr + 1

1 msg %cntr, 'SYNTAX ERROR'

2 msg1 db 'SYNTAX ERROR'

...........

1 cntr = cntr + 1

1 msg %cntr, 'INVALID OPERAND'

2 msg1 db 'INVALID OPERAND'

(看出来了吧,就是代替,一般只能看到2所显示的,为了清楚理解,

把1也写出来了)

宏库的建立与调用,(一般以mac后缀)

建立宏库,很简单,遍上号码,变成一个程序就是了

入 MACRO.MAC macro1 MACRO

........

ENDM

..... macro2 MACRO

.........

ENDM

.......

(想用多少用多少)

调用,

方式include加上 路径

不举例子了,很简单。

简单说一下宏调用和子程序的区别:

子程序在程序执行期间调用,只占用自身大小的一段空间。

(必须到子程序的IP,好处是节省内存,效率高,

但是因为要保存返回地址,转向地址,时间长,适合长代码,

频繁调用的)

宏调用,在汇编期间被展开,调用一次展开一次。

注:可能有失误之处,请大家指出,另外这是学习的记录

文章引用自:

随便看

 

百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2025/1/11 1:15:50