350 likes | 509 Views
微型计算机原理及应用技术. 微机原理与汇编语言程序设计. 河北科技师范学院 欧美学院 信息技术系. 微机指令系统. 第 3 章. 3.1 寻址方式 ( 重点 ). 3.2 指令系统 ( 难点 ). 3.2 指令系统. 1. 数据传送指令 6. 字符串操作指令 2. 算术运算指令 7. 处理器控制指令 3. 逻辑运算指令 9. 输入 / 输出指令 4. 移位指令 10. 中断指令 5. 转移指令. 3.2.4 移位指令. 逻辑左移指令 SHL 算术左移指令 SAL
E N D
微型计算机原理及应用技术 微机原理与汇编语言程序设计 河北科技师范学院 欧美学院 信息技术系
微机指令系统 第3章 3.1 寻址方式(重点) 3.2 指令系统(难点)
3.2指令系统 1.数据传送指令 6.字符串操作指令 2.算术运算指令 7.处理器控制指令 3.逻辑运算指令 9.输入/输出指令 4.移位指令 10.中断指令 5.转移指令
3.2.4移位指令 • 逻辑左移指令 SHL • 算术左移指令 SAL • 逻辑右移指令 SHR • 算术右移指令 SAR • 循环左移指令 ROL • 循环右移指令 ROR • 带进位循环左移 RCL • 带进位循环右移 RCR
OPD CF 0 最低位 (1)逻辑左移指令SHL与算术左移指令SAL 格式:SHL/SAL OPD,COUNT 功能:将OPD左移COUNT位,低位补0。CF的内容为最后移入位的值。 算术/逻辑左移
说明: OPD可以是除立即数以外的任何寻址方式。 移位次数由COUNT决定,COUNT可以是1或CL。 SHL和SAL常用来做乘2n的运算。 例题:设DI=0123H,求DI*4=?
(2)逻辑右移指令SHR 格式:SHR OPD,COUNT 功能:将OPD右移COUNT位,高位补0。CF的内容为最后移入位的值。 OPD 0 CF 最高位 逻辑右移
(3)算术右移指令SAR 格式:SAR OPD,COUNT 功能:将OPD右移COUNT位。CF的内容为最后移入位的值。 OPD CF 最高位 算术右移
(4)循环左移指令 ROL 格式:ROL OPD,COUNT 功能:将OPD最高位与最低位连接起来,组成一个环,环中所有位一起左移COUNT位。 OPD CF 最低位 循环左移
(5)循环右移指令 ROR 格式:ROR OPD,COUNT 功能:将OPD最高位与最低位连接起来,组成一个环,环中所有位一起右移COUNT位。 OPD CF 最高位 循环右移
(6)带进位循环左移指令 RCL 格式:RCL OPD,COUNT 功能:将OPD连同CF标志位一起左移COUNT位。 OPD CF 最低位 带进位循环左移
(7)带进位循环右移指令 RCR 格式:RCR OPD,COUNT 功能:将OPD连同CF标志位一起右移COUNT位。 OPD CF 最高位 带进位循环右移
移位指令小例题 若AX=2100H,BX=0043H. 1.请将AX和BX进行装配,使得AX=4321H. 用两种方法来实现。 • ADD AX,BX • MOV CL,8 • ROL AX,CL 2. MOV CL,8 SHR AX,CL SHL BX,CL ADD AX,BX
说明: 这8条指令可分为两组,前4条为移位指令,后4条为循环指令。 所有移位指令都影响CF和OF标志位。 OF位只有当COUNT=1时才有效,当移位后最高有效位的值发生变化时(0变1,1变0),OF位置1。
3.2.5转移指令 • 无条件转移指令JMP • 条件转移指令 • 循环指令(重复控制指令) • 子程序(子程序调用指令)
无条件转移指令 JMP 无条件转移指令可以转到内存的任何地方,该指令不影响标志位的值,但它改变IP寄存器或CS寄存器的内容。 5种方式如下: 1.段内直接短转移 格式:JMP SHORT OPD 执行的操作:IP+8位位移量→IP
无条件转移指令 JMP 2.段内直接近转移 格式:JMP NEAR PTR OPD 执行的操作:IP+16位位移量→IP 说明:上述两条指令可直接缩写成JMP OPD OPD常用标号表示。
无条件转移指令 JMP 3.段内间接转移 格式:JMP WORD PTR OPD 执行的操作:(EA)→IP 说明 在这种指令中,转移的偏移地址放在一个寄存器或一个存储单元中,可用除立即数以外的任何一种寻址方式取得。再将取得的偏移地址装入IP,实现程序转移。
无条件转移指令 JMP 3.段内间接转移 格式:JMP WORD PTR OPD 执行的操作:(EA)→IP 例题:若 BX=1200H, DS=2000H (21200H)=1234H 问:执行JMP BX 后,IP=? 执行 JMP [BX] 后,IP=?
无条件转移指令 JMP 4.段间直接转移 格式:JMP FAR PTR OPD 执行的操作:OPD的段内偏移地址→IP OPD所在段的段地址→CS 说明 在这种指令中,转移的段地址和偏移地址直接放在指令的操作数字段中,实现从一个段到另一个段的转移。
无条件转移指令 JMP 5.段间间接转移 格式:JMP DWORD PTR OPD 执行的操作(EA)→IP , (EA+2)→CS 说明 在这种指令中,转移的段地址和偏移地址存放在内存中4个相邻的字节单元中,只能用存储器寻址方式取得段地址和偏移地址的值。
无条件转移指令 JMP 5.段间间接转移 格式:JMP DWORD PTR OPD 执行的操作(EA)→IP , (EA+2)→CS 例题:DS=2000H,BX=0100H,BUF=0200H (20300H)=2010H,(20302H)=4321H 问:执行 JMP DWORD PTR BUF[BX] 后 IP=? CS=?
条件转移指令 条件转移指令是根据标志寄存器的单个条件标志的设置情况进行相应的转移。 条件转移指令有如下几种: 1.根据标志位的条件转移指令 相关标志位有:ZF,SF,OF,PF 指令有:JZ(JE)/JNZ(JNE),JS/JNS, JO/JNO,JP/JNP.
条件转移指令 2.比较两个无符号数,并根据比较结果转移 指令有: JB(JNAE,JC)低于或不高于等于或CF=1 JNB(JAE,JNC) JBE(JNA) JNBE(JA)
条件转移指令 3.比较两个带符号数,并根据比较结果转移 指令有: JL(JNGE)小于或者不大于等于则转移 JNL(JGE) JLE(JNG) JNLE(JG)
条件转移指令 4.测试CX的值为0则转移指令 格式:JCXZ OPD 测试条件: (CX)=0 注意:上述条件转移指令全为8位短转移
循环指令(重复控制指令) 该组指令使用计数器CX作为控制条件实现转移,要求目标地址在本指令的-128~127字节范围内,指令不影响标志位。 循环指令LOOP 格式:LOOP OPD 测试条件:CX≠0 循环次数初值置于CX寄存器中,每执行LOOP指令一次,CX减1,并判断CX,若CX不为0则转至标号处,直到CX=0,才执行后面的指令。
循环指令(重复控制指令) 当为0或相等时循环指令 格式:LOOPZ|LOOPE OPD 测试条件:CX≠0且ZF=1. 当不为0或不相等时循环指令 格式:LOOPNZ|LOOPNE OPD 测试条件:CX≠0且ZF=0.
子程序调用指令 调用指令CALL 格式:CALL OPD 功能:把返回点(CALL指令的下一条指令地址)压入堆栈保护后,转向目标地址处执行子程序。 该指令不影响标志位的值,有4种形式:
(1)段内直接调用 格式:CALL NEAR PTR OPD 功能:IP入栈,IP+偏移量→IP。 (2)段内间接调用 格式:CALL WORD PTR OPD 功能: IP入栈,目标地址替换IP。
(3)段间直接调用 格式:CALL FAR PTR OPD 功能:当前CS入栈,把指令中的段地址送入CS,然后IP入栈,再将指令中的偏移量送入IP。 (4)段间间接调用 格式:CALL DWORD PTR OPD 功能:CS入栈,IP入栈,把存储器中双字的第二个字送入CS,第一个字送入IP。
子程序调用指令 返回指令 RET 格式:RET 功能:子程序执行完后,通过本指令返回到原调用处。本指令不影响标志位。 对段内调用:从堆栈弹回返回点的偏移地址到IP,实现调用返回。 对段间调用:从堆栈弹出返回点的偏移地址到IP,弹出段基址到CS中,实现返回。
上机题: 1.有二位BCD数存放在BUFFER单元,要求将其转化为ASCII码,存于RESULT开始的两个地址单元,并测试有否字节为‘0’的ASCII码,如有,则CF=1,结束操作。 2.编写程序实现自然数1到100的累加。 3.在字符串中搜索关键字,记下搜索的次数和关键字在串中的位置。
上机题: 分别说明下列每组指令中,两条指令的区别。 1.AND AL,0FH 和 OR CL,0FH 2.MOV AX,BX 和 MOV AX,[BX] 3.SUB BX,CX 和 CMP BX,CX 4.AND AL,01H 和 TEST AL,01H 5.JMP NEAR PTR NEXT和JMP SHORT NEXT 6.ROL AX,CL 和 RCL AX,CL 7.PUSH AX 和 POP AX
课后总结: 掌握8086CPU指令系统中9类指令的基本格式 及各自的功能。 熟练使用指令系统中的指令进行初步的程序 设计。