微机原理第三章课件.ppt
3.2 8086/8088指令系统 控制转移指令特点 控制转移指令特点 控制转移指令特点 控制转移指令特点 控制转移指令特点 程序举例(1) 将20000H~20007H共8个存储器单元中的非组合BCD码累加起来,非组合BCD码的和放在20008H、20009H单元中。 MOV AX,2000H MOV DS,AX;设置默认的段寄存器值 MOV SI,0;第一个单元(20000H)的偏移量 MOV CX,8;累加次数 MOV AX,0;清空,准备累加 AGN:ADD AL,[SI]; AAA;调整为非组合BCD码,AH中为进位 INC SI;修改指针,指向下一个单元 LOOP AGN;循环控制 MOV [0008H],AX;存结果(非组合BCD码) 程序举例(2) 将分别存放在34000H、34200H处的两个4位组合BCD码相加,组合BCD码的结果放在34200H处。 MOVAX,3400H MOVDS,AX ;设置默认段寄存器值 MOVSI,0 ;使SI指向34000H单元 MOVDI,0200H ;使DI指向34200H单元 MOVAL,[SI] ADDAL,[DI] ;低2位组合BCD码相加 DAA ;调整得组合BCD码,仍在AL中 MOV[DI],AL ;组合BCD码结果(低2位)存入34200H处 MOVAL,[SI+1] ADCAL,[DI+1] ;高2位组合BCD码相加 DAA MOV[DI+1],AL ;组合BCD码结果(高2位)存入34201H处 MOV[DI+2],0 ADC[DI+2],0 ;高位的进位存入34202H处 程序举例(3) SAL AX,1;实现AX×2 MOV BX,AX SAL AX,1;实现AX×4 ADD AX,BX;实现AX×6 MOV BL,AL MOV CL,3 SHR AL,CL;实现AL÷8 SUB BL,AL;实现AL×7/8 程序举例(4) MOV CX, 10H;源串、目标串中字的个数 LEA SI, STR1;STR1:源串(数据段中)的首址标号 ADD SI, 30;SI指向源串的末地址 LEA DI, STR2;STR2:目标串(附加段中)首址标号 ADD DI, 30;DI指向目标串的末地址 STD;DF=1,串指针自动减量 REP MOVSW;完成16个字的传送 第3章 80X86/Pentium指令系统 2.返回指令RET 指令格式:RET 或 RET imm16(带立即数返回) 放在子程序的末尾 使子程序在功能完成后返回调用程序的断点处继续执行。 为能准确返回 ,返回指令类型与调用指令类型相对应。 RET返回指令有4种: 段内返回段内带立即数返回 段间返回段间带立即数返回 ① RET * 若过程定义为NEAR,则为段内返回,RET将栈顶的一个字送IP * 若程序定义为FAR,则为段间返回,RET指令将栈顶的一个双 字送IP,CS。 ②RET imm16 除完成指令的功能外,还将当前栈顶的imm16个字节内容废除。 第3章 80X86/Pentium指令系统 执行操作: IP ← ((SP+1):((SP)) IP← ((SP+1):((SP)) SP ← SP+2 SP ← SP+2 CS ← ((SP+1):((SP)) SP ← SP+n SP ← SP+2 SP ← SP+n 执行操作例见下一页 例:RET imm16堆栈使用情况 CODE SEG MENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR START: MOV AX,DATA MOV DS,AX …… PUSH BX PUSH CX CALL DELCHAR CS:XXXX