slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
第七讲 PowerPoint Presentation
Download Presentation
第七讲

Loading in 2 Seconds...

play fullscreen
1 / 118

第七讲 - PowerPoint PPT Presentation


  • 163 Views
  • Uploaded on

第七讲. 8086/8088 指令系统. 一、寻址方式 二、指令类型 传送类指令 算术运算类指令 BCD 码校正指令 位操作类指令. ———— 8086/8088CPU. 一、 8086/8088 指令系统. 8086/8088 的指令采用变字长指令格式。指令长度 1~6 个字节。第 1 个字节包含操作码,第 2 个字节表示寻址方式,第 3~6 个字节表示位移量、立即数。. 一、寻址方式 共有八种 1. 寄存器寻址方式 2. 立即数寻址方式 3. 存储器寻址方式 直接寻址方式 寄存器间接寻址方式 变址和基址寻址方式 基址变址寻址方式

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about '第七讲' - elata


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1
第七讲

8086/8088指令系统

  • 一、寻址方式
  • 二、指令类型
    • 传送类指令
    • 算术运算类指令
    • BCD码校正指令
    • 位操作类指令
8086 8088

————8086/8088CPU

一、8086/8088指令系统

8086/8088的指令采用变字长指令格式。指令长度1~6个字节。第1个字节包含操作码,第2个字节表示寻址方式,第3~6个字节表示位移量、立即数。

slide3
一、寻址方式
  • 共有八种
    • 1.寄存器寻址方式
    • 2.立即数寻址方式
    • 3.存储器寻址方式
        • 直接寻址方式
        • 寄存器间接寻址方式
        • 变址和基址寻址方式
        • 基址变址寻址方式
    • 4.串操作寻址方式
    • 5.I/O端口寻址方式
slide4
(一)、寄存器寻址方式

(Register Address)

  • 操作数存放在指令规定的寄存器中,对于16位操作数,寄存器可以是AX,BX,CX,DX,SI,DI,SP或BP;而对8位操作数,寄存器可以是
  • AH ,AL,BH,BL,CH,CL,DH或DL。
  • 例如:
  • MOV  AX,  BX
  • 执行过程如右图所示:
slide5

————8086/8088CPU

(一)、寄存器寻址方式
  • 2.实例

MOV BL,AL;

MOV CH,CL;

MOV BP,DX;

MOV DI,AX;

  • 3.特点:执行速度快。
  • 在汇编指令中,寄存器地址直接用寄存器名表示。
slide6

————8086/8088CPU

(二)、立即数寻址方式

(Immediate Address)指令所需的操作数直接在指令代码中,随着取指令一起取到BLU的指令队列中。

特点:执行速度快,常用来提供常数。

MOV AX,1234H

MOV AL,05FH

slide8

————8086/8088CPU

(二)、立即数寻址方式

2.在汇编指令中,立即数是数值,则直接书写,如是字符,则加上引号。立即数只能作为源操作数。

MOV CX,1000H;

MOV AL,0AH;

MOV AH,‘A’;

MOV DX,“AB”;

slide9

————8086/8088CPU

(三)、存储器寻址方式
  • 上述两种寻址方式,操作数在寄存器或指令中,而以下几种寻址方式,操作数在存储器中。
  • 在汇编语言程序设计中,一个存储单元的地址采用逻辑地址来表示,其形式为:段基值:偏移量
  • 通常汇编指令中,不直接给出提供段基值的段寄存器名,而是执行指令时使用隐含来源,如DS提供段基值。因此存储器的寻址方式:主要讨论如何形成操作数逻辑地址的偏移量。
slide10

————8086/8088CPU

(三)、存储器寻址方式
  • 有效地址:按指令中存储器寻址方式计算得到的偏移量称为有效地址EA。
  • 有效地址EA是由三个地址分量的某种组合:
  • (1)位移量:指令代码中的一个8/16位二进制数。
  • (2)基地址:BX或BP的内容。
  • (3)变址量:SI或DI的内容。
  • 根据三个地址分量的不同组合,有4种不同的存储器寻址方式。
slide11

————8086/8088CPU

1.直接寻址方式
  • (Direct Address)指令所需的操作数在存储器中,操作数的有效地址EA直接由指令代码中的位移量提供。
  • 在汇编指令中,直接寻址方式可用数值地址或符号地址来表示。
  • (1)数值地址 (段寄存器必须指明)
  • (2)符号地址 (段寄存器DS可以不指明)
  • 在汇编语言程序中,常用符号地址表示存放操作数的存储单元。故汇编指令中,可用符号地址表示的直接寻址方式来存取操作数。
slide12
例如: MOV  AL,  DS:[2000H]
  • 若DS=4000H,则此指令式将数据段中物理地址为42000H 单元的内容传送AL寄存器。
  •   执行过程如下图所示:
slide13

MOV  AL,  DS:[2000H]

MOV  AL,  DS:[2000H]

slide15
操作数在数据段中,则指令中不必给出DS,如果操作数不在数据段中,则必须给出段寄存器名。操作数在数据段中,则指令中不必给出DS,如果操作数不在数据段中,则必须给出段寄存器名。
  • 例如:MOV DAB,OFH
  • MOV CL,DA+3
  • MOV AX,ES:DAW

直接寻址方式常用于访问符号地址(变量名)表示的存储单元中的操作数。

slide16
2.寄存器间接寻址方式

(Register Indirect Address)

  • 指令中所需的操作数在存储器中,操作数的有效EA直接从SI/DI/BX/BP中获得。
  • 如以SI,DI,BX间接寻址时,隐含使用DS。
  • 如以BP间接寻址时,则隐含使用SS。
slide17
这种寻址方式的使用格式如:

MOV CH,[SI];

MOV [DI],BX;

MOV AL,[BX];

MOV CX,[BP];

等价于:

MOV CH,DS:[SI];

MOV DS:[DI],BX;

MOV AL,DS:[BX];

MOV CX,SS:[BP];

slide18
例如:      MOV  AX,  [BX]
  • 它表示操作数在数据段中,存放单元与段基址的偏移量(即有效地址)在寄存器BX中。
  •   执行过程如下图所示:
slide20
3.变址寻址和基址寻址方式
  • (Indexed Addresssing) (Based Addressing)指令所需的操作数在存储器中,操作数的有效地址EA是两个地址分量之和。
  • 变址寻址:操作数的EA是SI或DI内容与位移量之和。
  • 基址寻址:操作数EA是BX或BI内容与位移量之和。
slide22
变址或基址寻址若使用SI,DI,BX,则隐含使用DS;若使用BP,则隐含使用SS。变址或基址寻址若使用SI,DI,BX,则隐含使用DS;若使用BP,则隐含使用SS。
  • 汇编指令中,位移量可用数值或符号地址,其使用格式:
  • MOV CH,10H[SI];
  • MOV TAB[DI],AX;
  • MOV AL,ARY[BX];
  • MOV STR[BP],DX;
slide23
变址或基址寻址常用来访问主存中的一维数组、表格、字符串等。变址或基址寻址常用来访问主存中的一维数组、表格、字符串等。
  • 例如:
  • MOV   AL,  05H [BX]
  • 它是BX的内容加上8位位移量05H作为操作数存放的单元地址。如果使用BP,则隐含地表示操作数示存放在堆栈段中。
  •   执行过程如下图所示:
slide25
例4-1:一维数组ARY存放在主存的数据段中,数组的每个元素长度相同且占2个字节单元。从数组的首址起依次存放各元素:例4-1:一维数组ARY存放在主存的数据段中,数组的每个元素长度相同且占2个字节单元。从数组的首址起依次存放各元素:
  • 指令:MOV AX,ARY[SI];

数组首址

元素与数组首址之间的距离

slide27
4.基址变址寻址方式

(Based Indexed Addressing)

  • 指令所需的操作数在存储器中,操作数的有效地址EA是三个地址分量之和。
  • BX或BP的内容
  • SI或DI的内容
  • 位移量
slide29
基址变址寻址若使用SI,DI,BX,则隐含使用DS,若使用BP,则隐含使用SS。基址变址寻址若使用SI,DI,BX,则隐含使用DS,若使用BP,则隐含使用SS。
  • 汇编指令中,位移量可用数值或符号地址,使用格式:
  • MOV CH,10H[BX][SI];
  • MOV TAB[BX][DI],AX;
  • MOV AL,ARY[BP][SI];
  • MOV STR[BP][SI],DX;
slide30
例如:
  • MOV  AH,  1234H [BX][DI]
  • 表示操作数地址是在数据段中,其在数据段的偏移量是BX的内容加上DI的内容再加上位移量1234H。
  •   执行过程如右图所示:
slide32

数组首址

被访问行的起始地址相对数组首址的距离

被访问数组元素相对与本行首址的距离

  • 常用来存放在主存中的二维数组。
  • MOV AL ARRAY[BP][SI]
8086 80881
8086/8088指令分类
  • 8086/8088指令按操作数地址个数划分为三种类型:
  • 双操作数指令:OPR DEST,SRC
  • 单操作数指令:OPR DEST
  • 无操作数指令:OPR
8086 80882
8086/8088指令分类
  • 8086/8088指令按指令功能分为六大类:
  • 传送类指令
  • 算术运算类指令
  • 位操作类指令
  • 串操作类指令
  • 程序转移类指令
  • 处理器控制类指令
slide35
一、传送类指令
  • 这类指令又分为四种:
  • 数据传送指令
  • 交换指令
  • 标志位传送指令
  • 地址传送指令
slide36
1.数据传送指令
  • 指令格式:MOV DEST ,SRC
  • 指令功能:DEST(SRC),不影响任何标志位.

R/M/立即数

R/M

slide38
例如:将立即数传送到通用寄存器或存储单元中:例如:将立即数传送到通用寄存器或存储单元中:
  • MOV AL,1FH ;字节传送
  • MOV AX,2345H ;字传送
  • MOV DAB,0FEH ;字节传送
  • MOV ARY[BX],1234H ;字传送
slide39
例如:寄存器之间的传送:
  • MOV AH,BL ;字节传送
  • MOV DX,CX ;字传送
  • MOV DS,AX ;字传送
slide40
例如:寄存器与存储单元之间的传送:
  • MOV CL,DAB ;字节传送
  • MOV TAB[BX],AX ;字传送
slide42
例如:将立即数传送到DS,ES中:
  • MOV AX,10A0H
  • MOV DS, AX
  • MOV ES, AX
2 xchange
2.交换指令(Xchange)
  • 指令格式:XCHG DEST ,SRC
  • 指令功能:(DEST)(SRC),不影响任何标志位.
  • 不能使用段寄存器和立即数。

R/M

R/M

slide45
例如:交换指令的使用格式:
  • XCHG AL, AH
  • XCHG AX, DAW1
slide46
例如:将DAV1字单元内容与DAV2字单元的内容交换:例如:将DAV1字单元内容与DAV2字单元的内容交换:
  • MOV AX,DAV1
  • XCHG DAV2 AX
  • MOV DAV1 , AX
slide47
3.标志位传送指令
  • (1)取标志指令(Load Register AH from Flag)
  • 指令格式: LAHF
  • 指令功能: AH(FR)7~0,
  • 不影响任何标志位
slide49
3.标志位传送指令
  • (2)存标志指令(Save Register AH into Flag)
  • 指令格式: SAHF
  • 指令功能: FR7~0( AH),
  • 影响SF、ZF、AF、PF、CF标志位
slide50
例如:将SF、ZF置1,AF、PF、CF保持不变,可用以下指令:例如:将SF、ZF置1,AF、PF、CF保持不变,可用以下指令:
  • LAHF
  • OR AH,11000000B
  • SAHF
slide51
3.标志位传送指令
  • (3) 标志压栈指令(Push Flag)
  • 指令格式: PUSHF
  • 指令功能:
  • SP( SP)-2,
  • 栈顶字单元(FR)
  • 不影响标志位
slide52
3.标志位传送指令
  • (4) 标志压栈指令(Pop Flag)
  • 指令格式: POPF
  • 指令功能:
  • FR(栈顶字单元)
  • SP( SP)+2,
  • 影响所有标志位
slide53
3.装入有效地址指令
  • 这种指令将存储器操作数的地址装到指定寄存器中.

M

16位通用R

  • 指令格式:LEA DEST ,SRC
  • 指令功能:DESTSRC的EA,
  • 不影响任何标志位.
slide54
例如:LEA指令的使用:
  • LEA DI, TAB
  • LEA BX, 10H[SI]
slide56
二、算术运算类指令
  • 这类指令包括加、减、乘、除4种指令。
slide57
1.加法运算指令
  • (1)加法指令

通用R/M/立即数

通用R/M

  • 指令格式:ADD DEST ,SRC
  • 指令功能:DEST(SRC)+(DEST)按结果置OF、SF、ZF、AF、PF、CF。
slide58
例如:加法指令的使用格式;
  • ADD AX,SI
  • ADD DAW,0F8CH
  • ADD DL,TAB[BX]
slide59
例如:“指令ADD DL,0A4H”置标志位的过程。
  • (DL)=E5H=11100101B
  • + A4H=10100100B
  • 1 10001001BDL
  • CF置1, AF置0
  • PF置0,ZF置0, SF置1, OF置0,
slide60
1.加法运算指令
  • (2)带进位加法指令

通用R/M/立即数

通用R/M

  • 指令格式:ADC DEST ,SRC
  • 指令功能:DEST(SRC)+(DEST)+CF
  • 按结果置OF、SF、ZF、AF、PF、CF。
slide61
例如:有一个32位的无符号数存放在DX、AX中,若要加上常数276F1A23H,则用以下指令实现:例如:有一个32位的无符号数存放在DX、AX中,若要加上常数276F1A23H,则用以下指令实现:
  • ADD AX,1A23H
  • ADC DX,276FH
slide62
1.加法运算指令
  • (3)加1指令

通用R/M

  • 指令格式:INC DEST
  • 指令功能:DEST(DEST)+1
  • 按结果置OF、SF、ZF、AF、PF
  • 不影响CF。
  • INC指令主要用于计数器的计数或修改地址指针。
slide64
2.减法运算指令
  • (1)减法指令

通用R/M/立即数

通用R/M

  • 指令格式:SUB DEST ,SRC
  • 指令功能:DEST(DEST) - (SRC)
  • 按结果置OF、SF、ZF、AF、PF、CF。
slide65
例如:减法指令的使用格式;
  • SUB AL ,8FH
  • SUB BX, AX
  • SUB DAW,DX
slide66
例如:“指令SUB AL,0A8H”置标志位的过程。
  • (AL)=B7H=10110111B
  • + A8H=10101000B
  • 00001111BDL
  • CF置0, AF置1
  • PF置1,ZF置0, SF置0, OF置0
slide67
例如:有三个字节单元A、B、C,可用以下指令实现例如:有三个字节单元A、B、C,可用以下指令实现
  • (A)+(B)-(C)A;
  • MOV AL, A
  • ADD AL, B
  • SUB AL, C
  • MOV A, AL
slide68
2.减法运算指令
  • (2)带借位减法指令

通用R/M/立即数

通用R/M

  • 指令格式:SBB DEST ,SRC
  • 指令功能:
  • DEST (DEST) - (SRC)- CF
  • 按结果置OF、SF、ZF、AF、PF、CF。
slide69
2.减法运算指令
  • (3)减1指令

通用R/M

  • 指令格式:DEC DEST
  • 指令功能:DEST(DEST)-1
  • 按结果置OF、SF、ZF、AF、PF,不影响CF。
  • DEC指令主要用于计数器的计数或修改地址指针
slide71
2.减法运算指令
  • (4)求负数指令

通用R/M

  • 指令格式:NEG DEST
  • 指令功能:DEST0-(DEST)
  • 操作数看作带符号数
  • 按结果置OF、SF、ZF、AF、PF、CF。
slide72
例如:“指令NEG AL”置标志位的过程。
  • 00000000B
  • -(AL)=80H=10100100B (-128)
  • -10000000BDL
  • CF置1, AF置0
  • PF置1,ZF置0, SF置0, OF置1
slide73
例如:假设(AL)=01H,(BL)=A8H,即
  • -58H的补码
  • NEG AL
  • NEG BL
  • 上述二条指令执行后,(AL)=FFH,即-01H的补码,(BL)=58H.
slide74
例如:DAW+2、DAW字单元存放一个32位带符号数,求这个数的负数并存入原单元中,可用以下指令:例如:DAW+2、DAW字单元存放一个32位带符号数,求这个数的负数并存入原单元中,可用以下指令:
  • NEG DAW
  • MOV AX,0
  • SBB AX,DAW+2
  • MOV DAW2+2,AX
slide75
2.减法运算指令
  • (5)比较指令

通用R/M/立即数

通用R/M

  • 指令格式:CMP DEST,SRC
  • 指令功能:DEST-(SRC)
  • 按结果置OF、SF、ZF、AF、PF、CF。
  • CMP指令利用所设标志位来反映两个操作数的大小。
slide76
例如:AL、BL中存放的是无符号数
  • CMP AL,BL
  • CMP执行后,
  • 若ZF=1,表明(AL)=(BL)
  • 若CF=0,表明(AL)〉=(BL)
  • 若CF=1,表明(AL)〈(BL)
slide77
3. 乘法运算指令
  • 无符号数乘法指令

通用R/M

  • 指令格式:MUL OPRD
  • 字节无符号数相乘:
  • AX(OPRD)*(AL)
  • 字无符号相乘
  • DX:AX(OPRD)*(AX)
slide79
MUL 指令只影响CF、OF
  • MUL执行后:
  • 若AH/DX为全0,则CF、OF置0
  • 若AH/DX不为0,则CF、OF置1。
slide80
例如:两个字节单元DAB1、DAB2内容相乘,乘积放在PROC字单元中,可用以下指令实现:例如:两个字节单元DAB1、DAB2内容相乘,乘积放在PROC字单元中,可用以下指令实现:
  • MOV AL,DAB1
  • MUL DAB2
  • MOV PROC ,AX
slide81
4. 除法运算指令
  • 无符号数乘法指令

通用R/M

  • 指令格式:DIV OPRD
  • 字节无符号数相除:

AL(AX)/(OPRG)

  • 字无符号相除

DX:AX(DX:AX)/(OPRD)

slide83
DIV 指令执行后无有效标志结果。但以

下情况将产生0型中断:

  • 除数为0,即(OPRD)=0
  • 商溢出,即(AL)>FFH

或(AX)>FFFFH

slide84
例如:将两个字节单元VAR1、VAR2内容相除,商在QUOT字节单元中,可用以下指令实现:例如:将两个字节单元VAR1、VAR2内容相除,商在QUOT字节单元中,可用以下指令实现:
  • MOV AL,VAR1
  • MOV AH, 0
  • DIV VAR2
  • MOV QUOT ,AL
slide85

7

6

5

4

3

2

1

0

四、BCD码校正指令
  • BCD码分为两种格式:组合型、非组合型
  • 组合型:一个字节表示两个BCD码
  • 例如:34=(00110100)组合BCD

BCD码(高位)

BCD码(低位)

slide86

7

6

5

4

3

2

1

0

四、BCD码校正指令
  • BCD码分为两种格式:组合型、非组合型
  • 非组合型:一个字节的低4位表示一个BCD码

例如:

34=(00000011,00000100)非组合BCD

BCD码

slide87
四、BCD码校正指令
  • (1)非组合型加法校正指令
  • 指令格式:AAA
  • 在执行AAA指令前,已用ADD/ADC指令完成一位非组合型BCD码加法,且结果已在AL中。
slide88
四、BCD码校正指令
  • (1)非组合型加法校正指令
  • 指令格式:AAA
  • 指令功能:
  • 若(AL)3~0<9,且AF<=0,则将AL高4位清0,AF、CF置0。
  • 若(AL)3~0>9,或AF=1,AL高4位清0,AF、CF置1。
slide89
例如:从键盘输入两个一位十进制数,然后相加,结果在AH,AL中,其程序段如下:例如:从键盘输入两个一位十进制数,然后相加,结果在AH,AL中,其程序段如下:
  • MOV AH,1
  • INT 21H
  • MOV BL,AL
  • MOV AH,1
  • INT 21H
  • ADD AL,BL
  • AAA
slide90
下面分两种情况说明执行AAA指令的校正过程:
  • 情况1:设(AL)=‘3’=33H,
  • (BL)=‘5’=35H
  • 执行ADD 00110011
  • 指令: +)00110101
  • 等于: 01101000AL
  • 执行AAA指令:因为3+5=8<9,且AF=0;则AL高4位清0
  • AL高4位清0: 00001000AL,AF,CF置0.
slide91
情况2:设(AL)=‘8’=38H,
  • (BL)=‘6’=36H
  • 执行ADD 00111000
  • 指令: +)00110110
  • 等于: 01101110AL
  • 执行AAA指令:因为8+6=14>9,所以进行校正
  • (AL)+6: 01101110+6=01110100AL
  • AH加1 :00000001AH
  • AL高4位清0:00000100AL,AF,CF置1
  • 最后校正的结果在AH、AL中:
  • (AH)=01H,(AL)=04H
slide92
四、BCD码校正指令
  • (2)组合型加法校正指令
  • 指令格式:DAA
  • 指令功能:
  • 若(AL)3~0>9,或AF=1,则AL(AL)+6,AF置1。
  • 若(AL)7~4>9,或CF=1,则AL(AL)+60H,CF置1。
slide93
例如:实现两个4位十进制数的加法4678+2556,结果放在DX中,其程序段如下:例如:实现两个4位十进制数的加法4678+2556,结果放在DX中,其程序段如下:
  • MOV AL,78H
  • ADD AL,56H
  • DAA
  • MOV DL,AL
  • MOV AL,46H
  • ADC AL,25H
  • DAA
  • MOV DH,AL
slide94
四、BCD码校正指令
  • (3)非组合型减法校正指令
  • 指令格式:AAS
  • 在执行AAS指令前,已用SUB/SBB指令完成非组合型BCD码减法,且结果已在AL中。
slide95
四、BCD码校正指令
  • (3)非组合型减法校正指令
  • 指令格式:AAS
  • 指令功能:
  • 若(AL)3~0<9,且AF=0,则将AL高4位清0,AF、CF置0。
  • 若(AL)3~0>9,或AF=1,则AL(AL)-6和AH(AH)-1,AL高4位清0,AF、CF置1。
slide96
四、BCD码校正指令
  • (4)组合型减法校正指令
  • 指令格式:DAS
  • 在执行DAS指令前,已用SUB/SBB指令完成组合型BCD码减法,且结果已在AL中。
slide97
四、BCD码校正指令
  • (4)组合型减法校正指令
  • 指令格式:DAS
  • 指令功能:
  • 若(AL)3~0>9,或AF=1,则AL(AL)-6,AF置1。
  • 若(AL)7~4>9,或CF=1,则AL(AL)-60H,CF置1。
slide98

通用R/M/立即数

逻辑与指令 AND DEST,SRC

通用R/M

五、位操作类指令
  • 包括逻辑运算指令、测试指令和移位指令
  • 1.逻辑运算指令
  • 有4条,其格式与功能分别为:

指令功能:DEST(SRC)∧ (DEST)

slide99

通用R/M/立即数

通用R/M/立即数

逻辑或指令 OR DEST,SRC

逻辑异或指令 XOR DEST,SRC

通用R/M

通用R/M

指令功能:DEST(SRC) ∨(DEST)

指令功能:DEST(SRC)⊕(DEST)

上述三条指令影响:SF、ZF、PF,CF和OF置0,

AF不确定。

slide100
五、位操作类指令
  • 逻辑非指令:NOT DEST
  • 指令功能:DEST(DEST),不影响标志位.
  • 例如:设(AL)=10100101B,指令”AND AL,OFH”的逻辑与运算及置标志位的过程如下:
  • (AL)=10100101
  • OFH=00001111
  • 00000101AL
  • 标志位:SF=0,ZF=0,PF=1
slide101
五、位操作类指令
  • 例如:这些指令常用于对操作数的某些位进行操作
  • AND AL,0F0H
  • OR BL,80H;
  • XOR AX,AX;赋0
  • XOR AL,01H;求反
slide102

通用R/M/立即数

TEST DEST,SRC

通用R/M

五、位操作类指令
  • 2.测试指令

指令功能:(SRC)∧ (DEST),

按结果置SF、ZF、PF

slide103
五、位操作类指令
  • 例如:测试AL中最低位的状态,可用指令:
  • TEST AL,01H
  • TEST指令后,
  • 如最低位为0,则ZF=1;
  • 如最低位为1,则ZF=0
slide104

1/CL

1/CL

算术左移指令 SAL DEST,COUNT

算术右移指令 SAR DEST,COUNT

通用R/M

通用R/M

五、位操作类指令
  • 3.移位指令
  • (1)算术移位指令(OF、SF、ZF、PF、CF,AF未定)
slide106
五、位操作类指令
  • 例如:(AL)=00001000B,
  • (BL)=11111000B(-8的补码)
  • SAL AL,1
  • SAL BL,1
  • 上述指令执行后:
  • (AL)=00010000B,
  • (BL)=11110000B(-16的补码)
slide107
五、位操作类指令
  • 例如:(AL)=00001000B,
  • (BL)=11111000B(-8的补码)
  • SAR AL,1
  • SAR BL,1
  • 上述指令执行后:
  • (AL)=00000100B,
  • (BL)=11111100B(-4的补码)
slide108
五、位操作类指令
  • 例如:AX中存放一个带符号数,若要完成(AX)*3/4,可用以下程序段:
  • MOV DX,AX
  • SAL AX,1
  • ADD AX,DX
  • MOV CL,2
  • SAR AX,CL
slide109

1/CL

1/CL

逻辑左移指令 SHL DEST,COUNT

逻辑右移指令 SHR DEST,COUNT

通用R/M

通用R/M

  • 3.移位指令(有8条,分为算术、逻辑循环移位指令)
  • (2)逻辑移位指令(OF、SF、ZF、PF、CF,AF未定)
slide111
五、位操作类指令
  • 例如:(AL)=11111111B,
  • (BL)=11111111B
  • SHL AL,1
  • SHL BL,1
  • 上述指令执行后:
  • (AL)=11111110B,
  • (BL)=01111111B
slide112
五、位操作类指令
  • 例如:要求按CL中的数(0~15)所指定AX中的位分离出来,可用以下程序段:
  • MOV BX,1
  • SHL BX,CL
  • AND AX,BX
  • 设(CL)=3,则SHL执行后
  • (BX)=0000000000001000
slide113

1/CL

1/CL

循环左移指令 ROL DEST,COUNT

循环右移指令 ROR DEST,COUNT

通用R/M

通用R/M

  • 3.移位指令(有8条,分为算术、逻辑循环移位指令)
  • (2)循环移位指令(OF、CF)
slide115
3.移位指令(有8条,分为算术、逻辑循环移位指令)3.移位指令(有8条,分为算术、逻辑循环移位指令)
  • (3)循环移位指令( CF,OF)

1/CL

带进位循环左移指令 RCL DEST,COUNT

通用R/M

1/CL

带进位循环右移指令 RCR DEST,COUNT

通用R/M

slide116
五、位操作类指令
  • 例如:(AL)=01111111B,
  • (BL)=01111111B
  • ROL AL,1
  • ROR BL,1
  • 上述指令执行后:
  • (AL)=11111110B,
  • (BL)=10111111B
slide117
例如:3个字长的无符号数从高到低位存放在M+4、M+2、M字单元中,若要将该数右移一位,可用以下程序段:例如:3个字长的无符号数从高到低位存放在M+4、M+2、M字单元中,若要将该数右移一位,可用以下程序段:
  • SHR M+4,1
  • RCR M+2,1
  • RCR M,1