汇编语言指令详解

从堆栈中取出一个字放入IP中,然后从堆栈中再取出第二个字放入CS中,作为段间返回地址。

返回指令格式有:

RET ;SP=((SP+1),SP),SP=SP+2 RET n ;SP=((SP+1),SP),SP=SP+2 SP=SP+n

RET n指令要求n为偶数,当RET正常返回后,再做SP=SP+n操作。

2.条件转移指令

8088有18条不同的条件转移指令。它们根据标志寄存器中各标志位的状态,决定程序是否进行转移。条件转移指令的目的地址必须在现行的代码段(CS)内,并且以当前指针寄存器IP内容为基准,其位移必须在十127~—128的范围之内。如表2-5所示。

表2-5 条件转移指令表

汇编格式 标志位转移指令 JZ/JE/JNZ/JNE OPRD JS/JNS OPRD JP/JPE/JNP/JPO OPRD JO/JNO OPRD JC/JNC OPRD 不带符号数比较转移指令 JA/JNBE OPRD JAE/JNA OPRD JB/JNAE OPRD JBE/JNA OPRD 带符号数比较转移指令 JG/JNLE OPRD JGE/JNL OPRD JL/JNGE OPRD JLE/JNG OPRD 测试转移指令 JCXZ OPRD 结果为零/结果不为零转移 结果为负数/结果为正数转移 结果奇偶校验为偶/结果奇偶校验为奇转移 结果溢出/结果不溢出转移 结果有进位(借位)/结果无进位(借位)转移 高于或不低于等于转移 高于等于或不低于转移 小于或不大于等于转移 小于等于或不大于转移 高于或不低于等于转移 高于等于或不低于转移 小于或不大于等于转移 小于等于或不大于转移 CX=0 时转移 操 作 从该表可以看到,条件转移指令是根据两个数的比较结果或某些标志位的状态来决定转移的。在条件转移指令中,有的根据对符号数进行比较和测试的结果实现转移。这些指令通常对溢出标志位OF和符号标志位SF进行测试。对无符号

33

数而言,这类指令通常测试标志位CF。对于带符号数分大于、等于、小于3种情况;对于无符号数分高于、等于、低于3种情况。在使用这些条件转移指令时,一定要注意被比较数的具体情况及比较后所能出现的预期结果。

3.循环控制指令

对于需要重复进行的操作,微机系统可用循环程序结构来进行,8086/8088系统为了简化程序设计,设置了一组循环指令,这组指令主要对CX或标志位ZF进行测试,确定是否循环,如表2-6所示。

表2-6 循环指令表

指令格式 LOOP OPRD LOOPNZ/LOOPNE OPRD LOOPZ/LOOPE OPRD 执行操作 CX=CX-1;若CX<>0,则循环 CX=CX-1,若CX<>0 且ZF=0,则循环 CX=CX-1,若CX<>0 且ZF=1,则循环 例7 有一首地址为ARRAY的M个字数组,试编写一段程序,求出该数组的内容之和(不考虑溢出),并把结果存入TOTAL中,程序段如下:

MOV CX,M ;设计数器初值

MOV AX,0 ;累加器初值为0

MOV SI,AX ;地址指针初值为0

START:ADD AX,ARRAY[SI] ADD SI,2 ;修改指针值(字操作,因此加2) LOOP START ;重复 MOV TOTAL,AX ;存结果 例8 有一字符串,存放在ASCIISTR的内存区域中,字符串的长度为L。要求在字符串中查找空格(ASCII码为20H),找到则继续运行,否则转到NOTFOUND去执行。实现上述功能的程序段如下:

MOV CX,L ;设计数器初值

MOV SI,-1 ;设地址指针初值

MOV AL,20H ;空格的ASCII码送AL

NEXT: INC SI CMP AL,ASCIISTR[SI] ;比较是否空格? LOOPNZ NEXT JNZ NOTFOUND

…… ……

34

NOTFOUND:

…… ……

六、 标志处理和CPU控制类指令

标志处理指令用来控制标志,主要有CF、DF和IF三个。处理器控制指令用以控制处理器的工作状态,均不影响标志位,我们仅列出了一些常用指令,具体见表2-7所示。

表2-7 标志处理和CPU控制类指令

汇编语言格式 标志类指令 CLC STC CMC CLD STD CLI STI CPU控制类指令 HLT WAIT ESC LOCK NOP 执行操作 置进位标志,CF=1 清进位标志,CF=0 进位标志取反 清方向标志,DF=0 置方向标志,DF=1 关中断标志,IF=0,不允许中断 开中断标志,IF=1,允许中断 使处理器处于停止状态,不执行指令 使处理器处于等待状态,TEST线为低时,退出等待 使协处理器从系统指令流中取得指令 封锁总线指令,可放在任一条指令前作为前缀 空操作指令,常用于程序的延时和调试

习题与思考:

1.试分析下列程序段: ADD AX,BX JNC L2 SUB AX,BX JNC L3 JMP SHORTL5

如果AX、BX的内容给定如下: AX BX (1)14C6H 80DCH (2)B568H 54B7H

问该程序在上述情况下执行后,程序转向何处?

35

2.编写一段程序,比较两个5字节的字符串OLDS和NEWS,如果OLDS字符串不同于NEWS字符串,则执行NEW_LESS,否则顺序执行。

36

联系客服:779662525#qq.com(#替换为@)