词条 | 宏汇编程序 |
释义 | 宏汇编程序-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条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。