宏汇编程序

宏汇编程序-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,好处是节省内存,效率高,

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

  频繁调用的)

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

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

 

你可能感兴趣的:(编程,String,汇编,语言,工具,include)