汇编语言9精要.ppt

汇编语言9精要

* 3. 循环控制指令 1)LOOP—计数循环语句 形式:LOOP 短标号 功能:CX=(CX)-1; 若(CX)?0,则(IP)=OFFSET 标号, 否则继续执行下一句。 2)LOOPNZ/LOOPNE—非零计数循环 形式:LOOPNZ/NE 短标号 功能:CX=(CX)-1; 若(CX)?0且ZF=0,则(IP)=OFFSET 标号, 否则继续执行下一个语句。 3)LOOPZ/LOOPE—零计数循环 形式:LOOPZ/E 短标号 功能:CX=(CX)-1 若(CX)?0且ZF=1,则(IP)=OFFSET 标号, 否则继续执行下一个语句。 例3-13 求出前20个斐波那契数,斐波那契数的定义为: F0=0 F1=1 F(N+2)=F(N)+(N+1) 同样,在宏汇编MASM 6.11系统中,还增加了表达循环结构 的伪指令。 ?形式1: .WHILE condition    循环体的指令序列     .ENDW ?形式2: .REPEAT .REPEAT 循环体的指令序列 循环体的指令序列 .UNTIL condition? .UNTILCXZ [condition] 如果.UNTILCXZ后面书写了逻辑表达式,那么,该逻辑表达式 的形式只能是: “EXP1==EXP2”或“EXP1!=EXP2”。 例3-14 利用循环伪指令改写例3-13。 另外,像C语言一样与还设置了两条辅助的循环伪指令: ?终止循环伪指令,其形式如下: .BREAK .BREAK? .IF condition 该伪指令用来终止包含它的最内层循环。前者是无条件终止循 环,后者是仅当逻辑表达式condition为真时,才终止循环。 其使用场合如下: .WHILE? 1 .REPEAT … … .BREAK .IF condition .BREAK .IF condition … … .ENDW .UNTIL 0 ?循环继续伪指令,其形式如下: .CONTINUE .CONTINUE .IF condition 该伪指令用于直接跳转到包含它的最内层循环的判断循环条件 表达式的代码处。 例3-15 显示9个数字字母‘1’~‘9’,26个大写字母,和显示任意输入 的数字字符,并用按“回车”键来结束本程序的运行。 4. 子程序调用与返回指令 定义子程序的一般格式如下: 子程序名 PROC [NEAR/FAR] ? ?? 子程序名 ENDP 对子程序定义的具体规定如下: “子程序名”必须是一个合法的标识符,并且二者要前后一致; PROC和ENDP必须是成对出现的关键字,它们分别表示子程序 定义开始和结束; 子程序的类型有近(NEAR)、远(FAR)之分,其缺省的类型 是近调用NEAR型; 子程序名有3个属性:段值、偏移量和类型。 还要养成编制相应的说明文件的好习惯。其说明信息一般包括以 下几个方面内容: 功能描述; 入口参数和出口参数; 所用寄存器; 所采用的算法; 1)CALL—调用指令 形式:CALL 操作数 功能:若OPRD为16位数,保留返回地址IP于栈中: SP?(SP)-2,(SS:SP)?(IP); 实现段内转移:IP?OPRD。 若OPRD为32位数,保留返回地址CS:IP于栈中: SP?(SP)-2,(SS:SP)?(CS), SP?(SP)-2,(SS:SP)?(IP); 实现段间转移:IP?OPRD低16,CS? OPRD高16。 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

文档评论(0)

1亿VIP精品文档

相关文档