高级汇编语言技术_第1页
高级汇编语言技术_第2页
高级汇编语言技术_第3页
高级汇编语言技术_第4页
高级汇编语言技术_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

名周

朱世

K

摩A

钻舟a

加a案

明塔亟掩

掩需博

富M

埔低招

M

S

X,嚣

X

国嫣M欧

X双世

板假假世脩

黑莱卓粱

热陋竹

高级汇编语言技术

A宏指令

A宏指令的使用过程

A宏操作符

A局部符号伪指令LOCAL

A宏库的使用

A重复汇编

>条件汇编

由宏指令

为了减少编程的工作量,通游采用两种方法:

①将程序段编写为独立的子程序

②将程序段定义成宏

将具有一定功能,需多次重复使用,且比较短

的程序段定义成一条宏指令。

使用宏指令语句可以减少程序书写错误,缩短

源程序长度,使源程序编写像高级语言一样清

晰、简洁。使用宏库后,可以提高编程效率。

宏指令的使用过程

A宏定义

A宏调用

A宏扩展

宏定义

>带参宏定义

宏指令名MACRO形参1,形参2,...

宏体

ENDM

>无参宏定义

宏指令MACRO

宏体

ENDM

宏定义

SUMMACRONUM],NUM2,RESULT

PUSHAX

MOVAX,NUM1

ADDAX,NUM2

MOVRESULT,AX

POPAX

ENDM

说明

M宏指令名是该宏定义的名称。调用时使用宏

指令名对该宏定义进行调用。

宏指令符合标识符规定。宏指令名不能重复,

但可以和源程序中的其他变量、标号、指令、

伪指令名相同,在这种情况下宏指令的优先级

最高。

MACRO必须与ENDM成对出现。MACRO标识宏

定义的开始。

形参是可选项,宏可以不带参数;带参数时,

多个形参间用逗号分隔。形参的规定与对标识

符的规定是一致的。

宏调用

宏指令名[实参1,实参2,.......]

华宏指令与子程序的区别

子程序调用由微处理器完成

宏指令调用在汇编过程中由汇编程序完成

子程序调用可以减小目标程序的大小

A宏指令调用不能

宏扩展

DisplaymacroBUF

LEADX,BUF

+LEADX,BUF1

MOVAH,9

+MOVAH,9

INT21H

+INT21H

Displayendm

I

I

I

+LEADX,BUF2

DisplayBUF1

I+MOVAH,9

I

I

+INT21H

DisplayBUF2

将两个用压缩的BCD码表示的4位十进制数

相加,结果存入RESULT单元中。

;对两数相加功能进行宏定义Macro,asm

BCDADDMACROVARX,VARY,RESULT

MOVAL,VARX

ADDAL,VARY

DAA;俅位相加、调整

MOVRESULT,AL

MOVAL,VARX+1

ADCAL,VARY+1

DAA;高位相加、调整

MOVRESULT+1,AL

ENDM

DATASEGMENT

AlDB30H,11H

A2DB79H,47H

A3DB2DUP(?)

BlDB32H,23H

B2DB71H,62H

B3DB2DUP(?)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:

MOVAX,

MOVDS,

BCDADDA1,A2,A3

BCDADDB1,B2,B3

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

+MOVAL,Al

+ADDAL,A2

+DAA;低位本目力口、调整

+MOVA3,AL

+MOVAL,Al+1

+ADCAL,A2+1

+DAA;高位相力口、调整

+MOVA3+1,AL

+;对两数相加功能进行宏定义

+MOVAL,Bl

+ADDAL,B2

+DAA;低位相加、调整

+MOVB3,AL

+MOVAL,Bl+1

+ADCAL,B2+1

+DAA;高位相加、调整

+MOVB3+1,AL

形参和实参

■F定义中可以不带任何形参,宏调用时不需提

供实参,宏展开后宏体中的所有指令不作修改

原样插入到宏调用的宏指令处。

■形参可以是操作码或操作数的一部分,但在宏

定义体中必须使用分隔符&,&在宏定义中可作

为形参的前缀,展开时把&前后的两个符号连

接起来,形成操作码、操作数或字符串。

将寄存器内容移位的操作定义为宏指令,并

宏调用。设一个参数时,移位次数为参数CN:

SHIFTMACROCN

MOVCL,CN

SHLAX,CL

ENDM

宏调用时提供相应的实参数值:

SHIFT4

设两个参数时,参数为寄存器和移位次数:

SHIFTMACROCN,R

MOVCL,CN

SHLR,CL

ENDM

宏调用提供移位次数和寄存器:

SHIFT4,al

宏定义:

SHIFTMARCOX,Y,Z

MOVCL,X

S&ZY,CL

ENDM

上例被调用时:SHIFT4,AL,CL

SHIFT6,BX,AR

则宏展开时的目标代码:+MOVCL,4

+SALAL,CL

+MOVCL,6

+SARBX,CL

在程序设计中,对堆栈段的定义语句基本相同,只是

堆栈段的长度和初值不同。所以可以先定义一个宏

(放在宏库中),供随时不用,为编程带来很大方

便。宏定义如下:

MSTACKMACROXYZ

STACKSEGMENTSTACK

DBXYZ

STACKENDS

ENDM

宏调用时:MSTACK<100DUP(?)>

宏展开为:+STACKSEGMENTSTACK

+DB100DUP(?)

+STACKENDS

伪指令PURGE

■宏指令名可以和源程序中的其他变量名、

标号、指令助记符、伪操作名相同,此时宏指

令的优先级别最高,使其他同名的指令或伪操

作无效。

PURGE,用来在适当的时候取消宏定义。

PURGE伪指令的一般格式是:

PURGE宏定义名[,…]

方括号表示PURGE可以取消多个宏定义,宏名之

间用逗号隔开。

伪指令PURGE

SUBMACROVARX,VARY,RESULT

I

I

I

ENDM

宏调用:SUBX,Y,Z

PURGESUB

“PURGESUB”语句后的SUB恢复减法功能。

伪指令LOCAL

使用了标号的宏定义,若多次调用,势必产生标号

的多重定义。解决这一问题可使用伪指令LOCAL,

其一般格式为:

LOCAL局部标号1,局部标号2,...

宏汇编程序将为标号分别生成格式为“??

XXXX”的唯一的符号以代替各局部标号。XXXX代表

四位十六进制数0000~FFFF。这样,在汇编源程序

中,避免了多次宏调用时生成的标号重复。

・注意:LOCAL伪操作只能用在宏定义体内,而且必

须是MACRO伪操作后的第一个语句,在MACRO与

LOCAL不能出现注释和分号标志。

知吝取绝对值的宏指令如下

(macro2.asm):

宏展开后的指令为:

ABSMACROOPS+CMPCX,0

LOCALPLUS+JGE??0000

CMPOPS,0+NEGCX

JGEPLUS+??0000:MOVAX,CX

NEGOPS

PLUS:MOVAX,OPS

ENDMMOVBX,AX

宏调用:+CMPDX,0

ABSCX+JGE??0001

MOVBX,AX+NEGDX

ABSDX+??0001:MOVAX,DX

重复汇编

数值重复语句格式REPT

参数值重复语句格式IRP

字符重复语句格式IRPC

"数值重复语句格式REPT

ill______________________

矍一般格式为:

REPT表达式

;(重复块)

ENDM

其中,REPT和ENDM必须成对出现,两者间的重

复块是要重复汇编的部分。表达式的值用来表

示重复块的重复汇编次数。这种伪操作不一定

要用在宏定义体内。

有下列语句:macrol.asm

NUM=0

REPT10

NUM=NUM+1

DBNUM

ENDM

汇编后,将数据1,2,3,…,10分配给

十个连续的字节单元:

+DB1

+DB2

+DB3

I

I

I

+DB10

、:参数值重复语句格式IRP

其一般格式为:

IRP形参,〈参数1,参数2,...>

:(重复块)

ENDM

此伪指令重复执行重复块中所包含的语句,

重复的次数由参数表中的参数个数决定。重复

汇编时,依次用参数表中的参数取代形参,直

到表中的参数用完为止。参数表中的参数必须

用两个三角号括起来,参数可以是常数、符号、

字符串等,各参数间用逗号隔开。

多次将AX、BX、CX、DX寄存器内容压栈,宏

定义如下:macrol2.asm

PUSHRMACRO

IRPREG,<AX,BX,CX,DX>

PUSHREG

ENDM

ENDM

汇编后:

+PUSHAX

+PUSHBX

+PUSHCX

+PUSHDX

字符重复语句格式IRPC

TKPC形参,字符串(或〈字符串〉)

;(重复块)

ENDM

此伪指令重复执行重复块中的语句,重

复汇编的次数等于字符串中字符的个数。每

次重复执行时,依次用字符串中的一个字符

取代形参,直到字符串结束。可见IRPC伪指

令与IRP伪指令类似,只是IRPC用字符串(其

三角括号可以有也可以无)代替了IRP伪指令

中的参数表。

PUSHRMACRO

IRPCREG,ABCD

PUSHREG&X

ENDM

ENDM

同样,汇编后也可得到:

+PUSHAX

+PUSHBX

+PUSHCX

+PUSHDX

宏库的使用

语句格式:INCLUDE库文件名

假设已建立一名为MACRO.LIB的宏库,其内容如下

INPUTMACROA

LEADX,A

MOVAH,10;10号系统功能调用

INT21H

ENDM

PRINTMACROA

LEADX,A

MOVAH,9;9号系统功能调用

INT21H

ENDM

RETURNMACRO

MOVAH,2

MOVDL,OAH

INT21H

MOVDL,ODH;回车换行

INT21H

ENDM

0UT2MACROA

MOVDL,A

MOVAH,2;2号系统功能调用

INT21H

ENDM

STACKOMACROA

STACKSEGMENTSTACK

DBA

STACKENDS

ENDM

现要从键盘输入一串字符到系统

缓冲区,然后将字符按相反顺序

打印,采用调用宏库的办法,其

程序如下:macro21

INCLUDEMACRO.LIB

STACKO<200DUP(0)〉;定义堆栈段

DATASEGMENT

INF01DB6INPUTSTRING:$'

INF02DB6OUTPUTSTRING:$'

BUFADB81

DB9•

DB80DUP(0)

BUFBDB81DUP(0)

DATAENDS

CODESEGMENT

ASSUMEDS:DATA,SS:STACK,CS:

CODE

START:MOVAX,DATA

MOVDS,AX

RETURN;输出回车换行

PRINTINFO1;输出INFO1代表的字符串

INPUTBUFA;键盘输入字符中到缓冲区;

LEASI,BUFA+1

MOVCH,0

MOVCL,[SI]

ADDSI,CX

LEADI,BUFB

NEXT:MOVAL,[SI]

MOV[DI],AL

DECSI

INCDI

LOOPNEXT

MOVBYTEPTR[DI],

RETURN;输出回车换行

PRINTINF02;输出的字符串变量INF02代表

PRINTBUFB;反向输出输入字符串

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

条件汇编

条件汇编指在汇编期间,宏汇编程序根据条

件是否成立决定具体汇编哪一程序段。条件

汇编用条件汇编伪指令来定义。

语句格式:

IFxx表达式

条件块]

[ELSE

条件块2]

ENDIF

伪指令"汇编条件,

IF表达式。表达拼0,则条件为其a

IFE表达却表达式4则条件为露

是第一次扫翻臭

联二次扫描为比

IFDE.F符号*符号已定义或被说明为外部符号,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论