汇编语言第六章教程.ppt
文本预览下载声明
;思考: 下面的代码段完成什么功能?; 第6章 循环程序设计6.1 循环结构程序设计;1、循环程序的组成;2、循环程序的结构形式:; 6.2 循环指令;(CX)-1 CX;例1:在屏幕上显示10行
“how do you do”,
程序名: exa.asm;例2:求1~N自然数的和,结果存在 X字单元。
程序如下:
MOV AX, 0
MOV CX, N
DONE:ADD AX,CX
LOOP DONE ;和它等价的指令是?
MOV [X],AX
;思考题:
1.下列描述错误的是_______。
A.LOOP指令以CX为循环控制计数器
B. LOOPNE指令循环的条件是CX≠0且ZF=0
C. LOOPE指令循环的条件是CX≠0且ZF=1
D. LOOPE指令循环的条件是CX≠0且ZF=0
2.下列指令中不能构成循环条件的是()。
A. JMP B. JNZ
C. LOOP D. DEC CX ;例题3:在一首址为ARY,长度为20的字符串查找字符“*”,如果找到,则将字节单元RESULT清0,否则为 -1。;WHILE结构的循环控制伪指令的格式为:
?????????? .WHILE 条件表达式
?????????? ??? 循环体
?????????? .ENDW
?UNTIL结构格式为:
?????????? .REPEAT
?????????? ??? 循环体
?????????? .UNTIL 条件表达式
?UNTIL结构还有一种格式:
?????????? .REPEAT
?????????? ??? 循环体
?????????? .UNTILCXZ [条件表达式]
;cx←cx-1,直到cx=0或条件为真;下面代码段完成的功能??
XOR AX, AX
??MOV CX,100
???.WHILE CX!=0
???????? ADD AX,CX
???????? DEC CX
????.ENDW
????MOV SUM , AX;6.3 串操作指令;串指令的特点;(2)操作数
串指令可以处理累加寄存器和存储器操作数。对于存储器操作数应先建立地址指针:
若为源操作数,则必须把源串首地址放入SI寄存器,缺省情况寻址DS所指向的段。
若为目标操作数,则必须把目标串首地址放入ES:DI寄存器,不允许使用段超越前缀。;(3)地址指针的修改
串指令执行后自动修改地址指针SI、DI。
(4)方向标志
方向标志DF决定地址指针的增减方向。
若DF=0,则地址指针增量;
若DF=1,则地址指针减量。;(5)重复前缀
串指令前可以加重复前缀REPE/REPZ、 REP或REPNE/REPNZ,使后跟的串指令重复执行。
重复次数应事先初始化在计数器CX。;二、串指令;思考:如何把自buf1开始的100个字节数据传送到buf2开始的区域中(要求用串传送指令)。;前面的例子中语句 REP MOVSB和它等价的程序段是什么?;2.取串指令 LODS 例题演示
显式格式:LODS SRC
隐含格式:LODSB, LODSW, LODSD
功能:源→累加器,
即([SI]) →AL(或AX、EAX),
且自动修改SI指针。;② 自buffer1开始的10个非压缩BCD码形式存放的十进制数转换成ASCII码,按顺序显示在屏幕上。设DS、ES已按要求设置;3.存串指令 STOS
显式格式:STOS DST
隐含格式:STOSB,STOSW,STOSD
功能:累加器→目标,
(AL(或AX、EAX))→ES:[DI],
且自动修改DI指针。;③ 把自buffer1开始的非压缩BCD码存放的十进制数转换成ASCII码,并放到buufer2中,字符串长度为10字节。设DS、ES已按要求设置;例. 用4到5种方法编写实现以下功能的程序片断。
① 把自buffer1开始的200个字节数据传送到buffer2开始的区域中。
;LAST:MOV AL,[SI]
MOV ES:[DI],AL
INC SI
INC DI
LOOP LAST;4.串比较指令 CMPS
显式格式:CMPS DST, SRC
隐含格式:CMPSB,CMPSW,CMPSD
功能:源-目标,即([SI])
显示全部