第5章 微机CPU的指令系统5

发布于:2021-11-27 12:29:35

——乘除运算指令、逻辑运算指令与移位指令

1 2 3

上节回顾 有符号数的比较及 乘除法指令

逻辑与 逻辑或 逻辑异或 逻辑非

4
5

逻辑运算指令

移位指令

逻辑移位 算术移位 循环移位

2

2013-6-9

?

cmp 指令

?

针对无符号数比较结果进行转移的条 件转移指令

je jne jb jnb ja jna

3

2013-6-9

?

以 cmp ah,bh为例

? (ah)=(bh),ZF=1 ? (ah)≠(bh),ZF=0 ? (ah)<(bh)

4

2013-6-9

如果(ah)=1, (bh)=2 则 (ah)-(bh) =0ffh, SF=1

如果(ah)=0feh, (bh)=0ffh 则(ah)-(bh) =(-2)-(-1) =0ffh, SF=1

cmp 操作数1,操作数2 SF=1 操作数1<操作数2
5 2013-6-9

如果(ah)=22h, 如果(ah)=0bah, (bh)=0a0h (bh)=30h 则 (22h)-(0ah) 则(ah)-(bh) =34-(-96) =(-72)-(48) =82h=-126 =8ah, SF=1 SF=1 产生了溢出!!

cmp 操作数1,操作数2 SF=1 操作数1>操作数2
6 2013-6-9

?

比较两个有符号数的大小,不仅要考察SF (实际结果的正负),同时还要考察OF(得 知有没有溢出),就可以得知逻辑上真正结果 的正负,从而得以知道比较结果。

7

2013-6-9

比较两个有符号数的 大小
? ? ? ?

SF=1,OF=0 SF=1,OF=1 SF=0,OF=0 SF=0,OF=1

(ah)<(bh) (ah)>(bh) (ah)≥(bh) (ah)≤(bh)

8

2013-6-9

指令 JE JNE JL JGE/JNL JG JLE/JNG

含义 等于则转移(=) 不等于则转移(≠) 小于则转移(<) 不小于则转移(≥) 大于则转移(>) 不大于则转移(≤)

检测的相关标志位 ZF=1 ZF=0 ZF=0且SF ≠ OF SF = OF ZF=0且SF = OF SF ≠ OF

E:equal . N:not. L:less . G:greater
9 2013-6-9

?

编写程序完成下面计算公式,其中X和Y都是字类型 X X≤0 X+100 0 <X≤500 Y= X-500 X>500

课本例题 5.17

10

2013-6-9

乘除运算指令

11

格式: MUL Reg/Mem
?

?

乘数由Reg/Mem给出,被乘数是隐含的操作数, 由Reg/Mem的位数自动选用AL(8位)或AX (16位) 影响的标志位:CF和OF

12

2013-6-9

举例 MUL BL MUL BX

乘数位数 隐含的被乘数 8 16 AL AX

结果存放 (AX)=BL×AL (DX.AX)=BX×AX

13

2013-6-9

1.

100×10

分析: 100和10都是小于255的数据, 可做8位的乘法 Mov al,100 Mov bl,10 Mul bl (ax)=1000(03e8h)

14

2013-6-9

2.

100×10000

分析: 100小于255,10000大于255, 所以必须做16位乘法

Mov ax,100 Mov bx,10000 Mul bx

(dx)=000fh(ax)=4240h 1000000=0f4240h
15 2013-6-9

? ?

IMUL reg/mem 把显示操作数和隐含操作数都作为有符号数相乘, 对应的存放关系与MUL相同。 受影响的标志位CF与OF IMUL reg,Imm IMUL reg1,reg2/mem,Imm IMUL reg1,reg2/mem ;286+ ;286+ ;286+

?

? ? ?

16

格式: DIV Reg/Mem
?

?

除数由Reg/Mem给出,被除数由除数的位数不 同,默认的存放在AX或DX和AX中 结果根据除数的位数不同,存放在AL(商)和 AH(余数)或AX(商)和DX(余数)中

17

2013-6-9

举例 DIV BL DIV BX

除数位数 8 16

隐含的被除数 AX DX.AX

结果存放
商 余数

AL AX

AH DX

18

2013-6-9

1.

1001/100

分析:除数100小于255,可以为8位除数, 被除数1001大于255,需要16位的寄存器,可 采用8位除法计算

MOV BL,100 MOV AX,1001 DIV BL

(ah)=10(商),(al)=1(余数)
19 2013-6-9

2.

计算100001/100
分析: 除数100小于255,可以是8位的除数, 但是被除数100001大于65535,不能存放到16 位寄存器AX中,要采用16位的除法计算

100001=186a1h

Mov dx,1 Mov ax, 86a1h Mov bx,100 Div bx

(ax)=1000(商),(dx)=1(余数)
20 2013-6-9

?

-112/16 ? -112存入AX ,16可以存入bl -112=90H -112怎样存入AX?

?

?

?

21

2013-6-9

? ?

CBW 字节转换字指令 功能:无操作数指令,隐含操作AH,AL。用AL的 符号位去填充AH。 CWD 字转换双字指令 功能:无操作数指令,隐含操作DX,AX。用AX的 符号位去填充DX。 P72 例5.5

? ?

?

22

逻辑运算指令

23

1. 逻辑与 2. 逻辑或 3. 逻辑非 4. 逻辑异或

24

2013-6-9

?格式:

AND Reg/mem, Reg/mem/imm
?

功能:把源操作数中的二进制位与目的操作 数中的相应的二进制位,按位进行逻辑“与” 操作,操作结果存放在目的操作数中。

?

受影响的标志位: CF、OF、PF、SF和ZF

25

2013-6-9

逻辑与:只有相“与”的两位均为1, 结果为1,否则结果为0

? ?

mov al,45h;45h=01000101b and al,31h ;31h=00110001b

将某一位或多位清零的操作
? (al)= 00000001b
? ZF PF SF OF CF

26

2013-6-9

?

将BL中的D3和D0位清0,其他位不 变

复位(清零) 将bl的D6设为0,and bl,10111111b 某些位(同0 相与),不影 将bl的D7设为0,and bl,01111111b 将bl的D0设为0,and bl,11111110b mov bl,67h; 响其他位 and bl,11110110B

27

2013-6-9

?格式:

OR Reg/mem, Reg/mem/imm
?

功能:把源操作数中的每个二进制位与目的 操作数中的相应的二进制位进行逻辑“或” 操作,操作结果存放在目的操作数中。 受影响的标志位: CF、OF、PF、SF和ZF

?

28

2013-6-9

逻辑或:只要相“或”的两位有一位是1, 结果就是1;否则,结果为0
? ?

mov al,45h;45h=01000101b OR al,31h ; 31h=00110001b

将某一位或多位置1的操作
? (al)=
01110101b

? ZF PF SF OF CF

29

2013-6-9

?

将BL中的D3和D0位置1,其他位不 变
将bl的D6设为1,or bl,01000000b 将bl的D7设为1,or bl,10000000b 将bl的D0设为1,or bl,00000001b mov bl,67h;

置位某些位

(同1相或), 不影响其他位

or bl,00001001b

30

2013-6-9

?格式:

XOR Reg/mem, Reg/mem/imm
?

功能:把源操作数中的每个二进制位与目的 操作数中的相应的二进制位进行逻辑“异或” 操作,操作结果存放在目的操作数中。 受影响的标志位: CF、OF、PF、SF和ZF

?

31

2013-6-9

逻辑异或:只有相“异或”的两位不相同, 结果才是1;否则,结果为0
? ?

mov al,45h;45h=01000101b XOR al,31h; 31h=00110001b

用于求反某一个或多个位
? (al)=
01110100b

? ZF PF CF SF OF

32

2013-6-9

?

将BL中的D3和D0位求反,其他位不 变

可用于求反 某些位(同1 相异或),不 影响其他位

mov bl,67h; 67h=01100111b xor bl,00001001b
bl=6EH(01101110)

33

2013-6-9

?格式:

OR Reg/mem
?

功能:把操作数中的每位变反,
即1←0,0←1 不影响任何标志位!

?

34

2013-6-9

逻辑非:按位取反,原来是“0”的位 变为“1”;原来是“1”的位变为“0”

? ? ?

mov al,45h;45h=01000101b not al (al)= 10111010b

练* 课本 P99 15

35

2013-6-9

?

编程实现:将一个字节变量char字符串中的大 写字母改写成小写字母,并将char01字符串的 字符小写字母改写成大写字母。

data segment char db ‘BaSic’ char01 db ‘AssEmBlY’ data ends

36

2013-6-9

大写 A

ASCII码 01000001b

小写 a

ASCII码 01100001b

B
C D

01000010b
01000011b 01000100b ……

b
c d

01100010b
01100011b 01100100b

37

2013-6-9

移位指令

38

? ?

较常用的指令 移动的位数由立即数或CL寄存器给出, 8086CPU,由立即数给出的移位位数只能 为1!其后的cpu可以是1~31;

39

2013-6-9

?

?

逻辑左移 SHL 、逻辑右移 SHR 格式:

SHL/SHR Reg/Mem, 1/CL
影响的标志位:CF、OF、PS、SF、ZF

40

2013-6-9

?

SHL/SHR功能:
1. 将一个寄存器或内存单元中的数据向左或向右移位 2. 将最后移出的一位写入CF中 3. *淖畹突蜃罡呶徊沽

SHL

SHR

41

2013-6-9

Eg1: Mov al,01001000b Shl al,1 ; Mov cl,2 Shr al,cl

Mov al,01001000b Mov cl,2 Shr al,cl Shl al,1

左移1位,执行后(al)=10010000,CF=0 右移2位,执行后(al)=00100100,CF=0

42

2013-6-9

?

算术左移SAL、算术右移SAR

格式:SAL/SAR Reg/Mem, 1/CL
受影响的标志位:CF、OF、PF、ZF和SF

43

2013-6-9

? ?

算术左移(SAL): 把目的操作数的低位向高位移,空出的低位补零 , 同SHL

? ?

算术右移(SAR): 把目的操作数的高位向低位移,空出的高位用最高 位填补

44

2013-6-9

Eg : mov al,10001000b mov cl,2 sar al,cl sal al,1

mov al,10001000b mov cl,2 sal al,1 sar al,cl

右移2位后,(al)=11100010b,CF=0
算术左移与逻辑左移相同, 算术左移1位,(al) =11000100b,CF=1

45

2013-6-9

? ?

逻辑左移SHL执行一次移位,相当于无符号数的乘2 逻辑右移SHR执行一次移位,相当于无符号数的除2
mov dx,ax shl ax,1 shl ax,1 mov bx,ax add dx,ax mov cl,2 mov si,bx shl ax,cl mov cl,3 addbx,cl shl ax,bx sub bx,si add dx,bx

编程练*: 编程练*: 用加法和移位指令实现: 用加法和移位指令实现: (ax)=(ax)×10 (dx)=(ax)×3+(bx)×7 假设为无符号数,无进位 假设为无符号数,无进位

46

2013-6-9

格式:SALD/SARD Reg/Mem,Reg,Imm/CL
?

?

?

其中:第一操作数是一个16位/32位的寄存器或存储单元 ;第二操作数(与前者具有相同位数)一定是寄存器;第三 操作数是移动的位数,它可由CL或一个立即数来确定。 在执行SHLD指令时,第一操作数向左移n位,其“空出” 的低位由第二操作数的高n位来填补,但第二操作数自己 不移动、不改变。 在执行SHRD指令时,第一操作数向右移n位,其“空出 ”的高位由第二操作数的低n位来填补,但第二操作数自 己也不移动、不改变。

47

SHLD

SHRD

P76 页 表5.6

48

不带进位的循环移位
? ? ?

不带进位的循环左移ROL/循环右移ROR 受影响的标志位:CF和OF 将移出的位填补到空出的位,并送入CF中。

ROL

ROR

49

2013-6-9

Eg: Mov al,01001000b mov cl,2 ROL al,1 ROR al,cl
?

(al)=10010000b
(al)=00100100b

CF=0
CF=0

50

2013-6-9

带进位的循环移位
带进位的循环左移RCL
带进位的循环右移RCR 受影响的标志位:CF和OF 将移出的位送入CF中,将CF的 值填补到空出的位

51

2013-6-9

Eg mov al,10000100b mov cl,2 RCL al,1 RCR al,cl
?

(al)=00001001 CF=1

(al)=11000010 CF=0

练* 99页 17

52

2013-6-9

2. P99页 15题

53

2013-6-9


相关推荐

最新更新

猜你喜欢