汇编语言专题.pptVIP

  • 0
  • 0
  • 约1.05万字
  • 约 98页
  • 2025-10-23 发布于江西
  • 举报

教学重点;5.1高级语言特性;5.1.1条件控制伪指令;条件表达式中的操作符;;单分支结构

.IFAX0

negax

.ENDIF

movresult,ax

;双分支结构

.IFax==5

movbx,ax

movax,0

.ELSE

decax

.ENDIF; .data

_a sbyte?

_b sbyte?

_c sbyte?

tag byte?

.code

.startup

moval,_b

imulal

movbx,ax ;bx中为b2

moval,_a

imul_c

movcx,4

imulcx ;ax中为4ac; .ifswordptrbx=ax ;比较二者大小

movtag,1

;第一分支体:条件满足,tag←1

.else

movtag,0

;第二分支体:条件不满足,tag←0

.endif

.exit0 ;5.1.2循环控制伪指令;WHILE循环结构的流程图;UNTIL循环结构的流程图;;WHILE结构

xorax,ax

movcx,100

.whilecx!=0

addax,cx

deccx

.endw

movsum,ax; movcx,100

xorax,ax

leabx,array

.repeat

.ifswordptr[bx]=0

addax,[bx]

.else

.break

.endif

incbx

incbx

.untilcxz

movresult,ax;要调用带参数过程定义的过程,不应采用CALL指令,因为比较烦琐

应该采用过程调用伪指令INVOKE

使用INVOKE伪指令的前提是需要用PROTO伪指令对过程进行声明;;汇编语言程序:lt503.asm

.modelsmall

checksumdPROTOc,:word,:word ;声明过程

.stack

.data

array db12h,25h,0f0h,0a3h,3

db68h,71h,0cah,0ffh,90h

count equ$-array ;数组的元素个数result db? ;校验和

.code

.startup

INVOKEchecksumd,count,offsetarray ;调用过程

movresult,al ;保存校验和

.exit0;checksumdPROCcUSESbxcx,\

countp:word,arrayp:word

movbx,arrayp ;BX←数组的偏移地址

movcx,countp ;CX←数组的元素个数

xoral,al

sumd: addal,[bx] ;求和:AL←AL+DS:[BX]

incbx

loopsumd

ret

checksumdendp

end;;lt503.asm的列表文件(lt503.lst)

...

INVOKEchecksumd,count,offsetarray

* movax,wordptrOFFSETarray

* pushax

* movax,+000Ah

* pushax

* callchecksumd

* addsp,04h

movresult,al

...;checksumdPROCcUSESbxcx,\

countp:word,arrayp:word

* pushbp ;起始代码

* movbp,sp

* pushbx ;保护bx和cx

* pushcx

movbx,arrayp ;arrayp=[BP+6]

movcx,countp ;countp=[BP+4]

...

ret

* popcx ;结尾代码

* popbx

* popbp

* ret0000h

checksumcendp;5.2宏结构程序设计;宏——具有宏名的一段汇编语句序列

——宏定义时书写

宏指令——这段汇编语句序列的缩写

——宏调用时书写

宏展开——宏指令处用这段宏代替的过程

——宏汇编时实现

宏的参数功能强大,颇具特色

配合宏,还有宏操作符和有关伪指令;宏定义;宏调用;宏展开;宏的参数;;宏定义

shlext macroshloprand,shlnum

pushcx

movcl,shlnum

shlshloprand,cl

popcx

en

文档评论(0)

1亿VIP精品文档

相关文档