微机原理第三章5
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ROLÖ · Á î µ Ä Ñ º ²³ ó Ò Æ ² Ø ³ ô
D15ò º D7 D0 CF
RORÖ · Á î µ Ä Ñ º ²Ó Ò Ò Æ ² Ø ³ ô
32
通过进位的循环指令图解
CF D15ò º D7 D0
RCLÖ · Á î Ä µ ´ ÷ ¼ ÷ Î º Ñ º ²ó ³Ò Æ ² Ø ³ ô
10
11
[例 ]
• MOV CL, 2
• SHL SI, CL
– 如指令执行前: (SI)=1450H – 则指令执行后: (SI)=5140H,CF=0 – 相当于5200*4d=20800d
11
SHR指令的执行
• SHR指令格式:SHR OPR, CNT • 功能:逻辑右移CNT位 • 每右移一位,相当于对无符号数进行除2操作。
34
[例 ]
• 循环指令举例
ROL BX,CL
; 将 BX 中的内容不带进位循环左移 CL 中规定 的次数 ROR WORD PTR[SI],1
;将物理地址为 DS*16+SI单元的字不带进位循 环右移1次
35
[例 ]
• 设CF=1, AL = 1011 0100B = 0B4H 若执行指令ROL AL, 1 ;则AL=? CF=?, OF=? 若执行指令ROR AL, 1 ;则AL= ? CF=?, OF=? 若执行指令RCR AL, 1 ;则AL=? CF=?, OF=? 若执行指令MOV CL, 3 RCL AL, CL ;则AL=?, CF=?, OF=?
6
例1:若要检测AL中的最低位是否为1,若为1则转移。 TEST AL,01H JNZ THERE …… THERE:…… 例2:若要检测AX中的最高位是否为1,若为1则转移。 TEST AX,8000H JNZ THERE …… THERE:…… 例3:若要检测CX中的内容是否为1,若为0则转移。 TEST CX,0FFFFH JZ THERE …… THERE:……
2、重复操作前缀
(1)REP •REP前缀用在MOVS、STOS 、LODS指令前。 •功能:每执行一次串指令( CX )- 1 ,直到( CX ) =0,重复执行结束。
(CX)=0? Y
当(CX)≠0,
N (CX) (CX)-1
(CX) (CX)-1 ,
2
逻辑运算指令特点
• 以上五种逻辑运算指令中,NOT不允许使用立即 数,其它 4 条指令的源操作数可以是立即数。此 外,至少有一个操作数必须存放在寄存器中,另 一个操作数则可以使用任意寻址方式。 • 它们对标志位的影响情况是,NOT指令不影响标 志位,其它4种指令将使CF和OF为0,AF位无定 义,而SF、ZF和PF则根据运算结果设臵。 • 这些逻辑运算指令对处理操作数的某些位很有用, 例如可屏蔽某些位(将这些位臵0),或使某些 位臵1或测试某些位等。
D15ò º D7 D0 CF
RCRÖ · Á î Ä µ ´ ÷ ¼ ÷ Î º Ñ º ²Ò Ó Ò Æ ² Ø ³ ô
33
[例 ]
• 如AX=0012H,BX=0034H,要求把它们装配在一 起形成AX=1234H。 • 可利用移位指令实现上述要求,程序如下: MOV AX,0012H ;设臵AX初值 MOV BX,0034H ;设臵BX初值 MOV CL,8 ;设臵移位次数 ROL AX,CL ;把AL内容移入AH ADD AX,BX ;使AX=1234H 执行 ROL 指令后, AX= 1200H,执行 ADD 指令 后,AX=1234H。 当然ADD指令也可用OR AX, BX代替,起到同 样效果。
Байду номын сангаас
1、串操作指令的共同特点
• 源串默认在数据段(DS),偏移地址由SI指定。 允许段重设; • 目标串必须在附加段,偏移地址由DI指定; • 指令自动修改地址指针,修改方向由DF决定。 DF=0 DF=1
增地址方向; 减地址方向;
• 数据块长度值由CX指定 • 可增加自动重复前缀以实现自动修改CX内容。
NEXT:
MOV AL, [SI] INC SI AND AL, 0FH MOV BL, AL MOV AL, [SI] INC SI PUSH CX MOV CL,4 SAL AL,CL POP CX ADD AL, BL MOV [DI], AL INC DI DEC CX JNZ HLT
;取入ASCII数 ;源指针指向下一个 ;把ASCII转换为BCD ;暂存至BL ; 取下一个ASCII数 ;源指针指向下一个 ;暂存CX ; 设移位次数 ;第二个ASCII数左移4位 ;恢复CX ;把两个BCD数组和 ;存至目标区 ;目标指针指向下一个 ;CX减一 ;若不为0,继续循环
分析:要把十进制数码的ASCII码的个数有可能是偶数, 但也可能是奇数。若是奇数,则把地址最低的一个转换为 BCD码(高4位为0),然后把剩下的偶数个按统一的方法 处理。
MOV MOV MOV ROR JNC ROL MOV INC AND MOV INC DEC ROR
SI, OFFSET ASCBUF; 加载源地址 DI, OFFSET BCDBUF; 加载目标地址 CX, COUNT ; 加载要转换的ASCII个数 CX, 1 ; 右移CX(除2)并把最低位移入进位标志 NEXT ;进位为0,CX为偶数,转至NEXT处理 CX, 1 ;恢复CX AL, [SI] ;取出第一个ASCII数 SI ;源指针指向下一个 AL ,0FH ;把ASCII转换为BCD [DI], AL ;存入目标区 DI ;目标指针指向下一个 CX ;个数减1 CX , 1 ;把CX除2
循环移位指令的应用
• 用于对某些位状态的测试;P124例3-34 • 高位部分和低位部分的交换; • 与非循环移位指令一起组成32位或更 长字长数的移位。 P124例3-35
例:由ASCII码转换为BCD码
若在内存的输入缓冲区中,已有若干个用ASCII码 表示的十进制数码,则每个存储单元只存放一位 十进制数码。要求把它们转换为相应的BCD码, 且把两个相邻存储单元的十进制数码的BCD码合 并在一个存储单元中,且地址高的放在前4位,以 此节省一半存储单元。
4
逻辑运算举例
• OR指令 – 假设AX中存有两个BCD数0508H,要将它们分别 转换成ASCII码,结果仍在AX中,则可用如下指令 实现: OR AX, 3030H ; AX←3538H
• XOR指令 – 若AL中存有某外设端口的状态信息,其中Dl位控制 扬声器发声,要求该位在0、l之间来回变化,原来 是1变成0,原来是0变成1,其余各位保留不变。 可以用以下指令实现: XOR AL, 00000010B
微型计算机系统原理及应用
Institute of Electrical Engineering
第三章
8086/8088指令系统
主讲人: 沈 虹
燕山大学电气工程学院
3.3.3
逻辑运算和移位指令
1
1、逻辑运算指令
• • • • • NOT OPRD AND OPRD1, OPRD2 OR OPRD1, OPRD2 XOR OPRD1, OPRD2 TEST OPRD1, OPRD2 (逻辑非运算) (逻辑与运算) (逻辑或运算) (异或运算) (位检测运算)
30
循环移位指令
• 循环移位指令
– ROL OPRD, CNT (循环左移)
– ROR OPRD, CNT (循环右移)
– RCL OPRD, CNT (带进位循环左移) – RCR OPRD, CNT (带进位循环右移)
指令格式、对操作数的要求与非循环移位指令相同
31
循环位移指令图解
CF D15ò º D7 D0
36
• 设CF=1, AL = 1011 0100B = 0B4H 若执行指令ROL AL, 1 ;则AL=0110 1001B, CF=1, OF=1 若执行指令ROR AL, 1 ;则AL=0101 1010B, CF=0, OF=1 若执行指令RCR AL, 1 ;则AL=1101 1010B, CF=0, OF=0 若执行指令MOV CL, 3 RCL AL, CL ;则AL=1010 0110B, CF=1, OF不确定
3
逻辑运算举例
• NOT指令 – NOT BX – NOT AH – NOT BYTE PTR[BX] • AND指令 – 假设DX中存有数字6和9的ASCII码,即DX= 3639H,要将它们转换成非压缩的BCD码,并且 把结果存回DX。 – 用如下指令实现: AND DX, 0F0FH ; DX←3639H ∧ 0F0FH 将DH和DL中的高4位用全0屏蔽掉,截取低4位, 最后在DX中得到6和9的BCD码0609H。
D15ò º D7 0
D0
CF
SHRÖ · Á î µ Ä ß Â » Ó Ò Ò Æ ² Ø ³ ô½ Ê Ò â Í »
• 移动次数为1的情况下,若移位之后操作数的最 高位与次高位不相同,则OF=1,否则OF=0。
12
SAR指令的执行
• SAR指令格式:SAR OPR, CNT • 功能:算术右移CNT位 • 每右移一位,相当于对带符号数进行除2操作。
SHL指令的逻辑左移操作 SAL指令的算术左移操作
9
• 算术左移指 令:
SAL OPRD,1 SAL OPRD,CL • 逻辑左移指 令: SHL OPRD,1 SHL OPRD,CL
有符号数
无符号数
• 移动次数为1的情况下,若移位之后操作数的 最高位与CF标志位状态不相同,则OF=1,否 则OF=0。这可用于判断移位前后的符号位是否 一致。
7
2、移位指令
• 非循环移位指令
– – – – SAL SHL SAR SHR 算术左移 逻辑左移 算术右移 逻辑右移
8
SAL/SHL指令的执行
• SAL指令格式:SAL OPR, CNT • SHL指令格式:SHL OPR, CNT • 这两条指令的功能完全相同,均为左移CNT位。
CF D15或D7 D0 0
3.3.4 串操作指令
• 串操作指令 :
• 数据传送类指令每次只能传送一个数据,若要传 送大批数据就需要重复编程,这样就浪费了大量的时 间和空间。 为此8086提供了一组处理主存中连续存放数据串 的指令,这就是串操作指令。
•
针对数据块或字符串的操作; 可实现存储器到存储器的数据传送;
待操作的数据串称为源串,目标地址称为目标串。
5
TEST指令的用法说明
• 指令格式:TEST dst, src • 指令功能:对两个操作数进行逻辑与操 作、并修改标志位,但不回送结果,即 指令执行后,两个操作数都不变。 • 用途: – 它常用在要检测某些条件是否满足, 但又不希望改变原有操作数的情况之 下。紧跟在这条指令后面的往往是一 条条件转移指令,根据测试结果产生 分支,转向不同的处理程序。
D15ò º D7
D0
CF
SARÖ · Á î µ Ä Ë ã Ê õ Ó Ò Ò Æ ² Ø ³ ô½ Ê Ò â Í »
13
[例 ]
• 已知(AL)=0B4H=10110100B,(CF)=1。
• 试分析下列指令分别执行后对AL和CF的影响。
(1)SAL AL, 1
(2)SAR AL, 1
(3)SHL AL, 1
(4)SHR AL, 1 ;移位后(AL)= 5AH=01011010B, CF=0
[例 ]
• 已知变量Y中为一无符号字节数,请用移位 指令完成(Y)*10计算,积放在AX中。
– – – – – – – MOV MOV SHL MOV SHL SHL ADD AL, Y ;(Y)→AL AH, 0 ;0→AH AX, 1 ;(Y)*2 BX, AX ;(AX)→BX AX, 1 ;(Y)*4 AX, 1 ;(Y)*8 AX, BX ;(Y)*10
(4)SHR AL, 1
29
• 已知(AL)=0B4H=10110100B,(CF)=1。
(1)SAL AL, 1 ;移位后(AL)= 68H=01101000B, CF=1
(2)SAR AL, 1 ;移位后(AL)=0DAH=11011010B, CF=0
(3)SHL AL, 1 ;移位后(AL)= 68H=01101000B, CF=1