1 / 33

第 5 章 86 系列微型计算机的指令系统

第 5 章 86 系列微型计算机的指令系统. 主要内容 86 系列汇编语言及指令的格式与寻址方式 传送类指令 数据操作类指令 串操作指令 控制类指令. 5.2 传送类指令. 传送类指令是指令系统中最活跃的一类指令,也是条数最多的一类指令,主要用于数据的保存及交换等场合。 传送类指令可以分为 4 种: 通用数据传送指令 目标地址传送指令 标志位传送指令 I/O 数据传送指令. 5.2 传送类指令. 说明: · 表示运算结果影响标志位, - 表示运算结果不影响标志位。. 5.2.1 通用数据传送指令. 通用数据传送指令包括: 1 .传送指令 MOV

evette
Download Presentation

第 5 章 86 系列微型计算机的指令系统

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第5章 86系列微型计算机的指令系统 主要内容 • 86系列汇编语言及指令的格式与寻址方式 • 传送类指令 • 数据操作类指令 • 串操作指令 • 控制类指令

  2. 5.2 传送类指令 • 传送类指令是指令系统中最活跃的一类指令,也是条数最多的一类指令,主要用于数据的保存及交换等场合。 • 传送类指令可以分为4种: • 通用数据传送指令 • 目标地址传送指令 • 标志位传送指令 • I/O数据传送指令

  3. 5.2 传送类指令 说明: ·表示运算结果影响标志位, - 表示运算结果不影响标志位。

  4. 5.2.1 通用数据传送指令 • 通用数据传送指令包括: 1.传送指令MOV 2.数据交换指令XCHG 3.查表转换指令 XLAT 4. 堆栈操作指令PUSH和POP 1. 最基本的传送指令MOV • MOV指令是形式最简单、用得最多的指令。它可以实现CPU内部寄存器之间的数据传送、寄存器和内存之间的数据传送,还可以把一个立即数送给CPU的内部寄存器或内存单元。 • 语句格式:MOV OPD,OPS • 功能:将源操作数传送入目的地址,源地址内容不变。即(OPS)→OPD。 • 对标志位的影响:无

  5. 5.2.1 通用数据传送指令 例如: • MOV AL,BL • MOV ES,DX • MOV AX,[BX] • MOV [DI],AX • MOV CX,[1000] • MOV BL,40 • MOV DX ,5040 • MOV WORD PTR[SI],6070

  6. 5.2.1 通用数据传送指令 说明: (1)双操作数指令不允许两个操作数同时为段寄存器或存储器操作数 MOV seg ,seg ;错误 MOV mem ,mem ;错误 (2)立即数不能传送到段寄存器中。 MOV seg ,imm ; 错误 (3)目的操作数不允许使用CS段寄存器。 (4)指令指针IP,不能作为MOV指令的操作数 (5)dest与src必须类型匹配,即同时是字节或字类型。 (6)MOV指令不影响标志寄存器的值。

  7. 5.2.1 通用数据传送指令 例:错误的MOV 指令如下所示: • MOV AX,BL • MOV DS,1000H • MOV [BX] ,[SI] • MOV ES,CS • MOV CS,AX 例:设B是已定义的字节变量,判断指令的正确性。 • MOV AX,B • MOV AL,0 ;类型不匹配 ;不允许立即数送段寄存器 ;不允许内存操作数之间传送 ;不允许段寄存器之间传送 ; CS不能作为目的操作数 ;错误,类型不匹配 ;正确,MASM可以判断出要送字节0

  8. 5.2.1 通用数据传送指令 2.交换指令 • 交换指令XCHG可以实现字节交换,也可以实现字交换。 • 格式:XCHG DEST ,SRC; • 功能:将源操作数与目的操作数的内容互换。 • 交换过程可以在CPU的内部寄存器之间进行,也可以在内部寄存器和存储单元之间进行,但不能在两个存储单元之间执行数据交换过程。 • 例如: XCHGAL,BL  ;AL和BL之间进行字节交换   XCHGBX,CX  ;BX和CX之间进行字交换   XCHG[2530],CX ;CX中的内容和2530,2531两单元的内 容交换

  9. 5.2.1 通用数据传送指令 3.换码指令 • XLAT是一条完成字节翻译功能的指令,它可以使累加器中的一个值变换为内存表格中的某一个值,一般用来实现编码制的转换。 • 语句格式:XLAT • 功能:将(BX)为首址(AL)为位移量的字节存储单元中的数据送AL寄存器。即([BX+AL])→AL。 • 使用换码指令时,要求BX寄存器指向表的首地址,AL的内容为表中某一项与表格首地址之间的偏移量,指令执行时,会将BX和AL中的值相加,把得到的值作为地址,然后将此地址所对应的单元中的值取到AL中去。

  10. 5.2.1 通用数据传送指令 下图表示了换码指令的功能。XLAT指令就是通过查表方式来完成翻译功能的,因此,在执行该指令之前,必须建立好一张翻译表,该表的最大容量为256字节。

  11. 5.2.1 通用数据传送指令 4.堆栈操作指令 堆栈作用: • 在调用一个过程时,保存返回地址; • 暂时存放寄存器或存储器单元操作数的内容。 进栈 PUSH SRC ; 操作: (SP) (SP)-2 ((SP)+1,(SP))  (SRC) 出栈 POP DST ; 操作:(DST)((SP)+1,(SP)) (SP) (SP)+2

  12. 5.2.1 通用数据传送指令 • 例如,将16位通用寄存器CX的内容压入堆栈,然后,弹出栈顶至CX中 • 已知:(SS)=0200H, (SP)=0008H, (CX)=12FAH。

  13. 5.2.1 通用数据传送指令

  14. 5.2.2 目标地址传送指令 这是一类专用于传送地址码的指令,可用来传送操作数的段地址或偏移地址,共包含以下3条指令:LEA、LDS、LES 1.取有效地址指令 • 语句格式: LEA OPD,OPS • 功能:LEA的功能是将存储器地址送到一个寄存器,主存按源地址的寻址方式计算偏移地址,将偏移地址送入指定寄存器。 • LEA指令格式中,要求源操作数必须为内存单元地址,目的操作数必须为一个16位的通用寄存器。这条指令常用来使一个寄存器作为地址指针。 • 例如: LEAAX,[2728] ;将2728单元的偏移量送AX,指令执行后,AX中 为2728 LEABX,[BP+SI] ;指令执行后,BX中的内容为BP+SI的值  LEASP,[0482]  ;使堆栈指针SP为482 问题:LEA指令与MOV指令有何区别?

  15. 5.2.2 目标地址传送指令 LEA 指令与MOV 指令的区别: LEA SI,BUFF指令是将标号BUFF的偏移地址送入寄存器中; MOV SI,BUFF指令是将标号BUFF所指存储单元的内容送入SI。 0 LEA SI,BUFF; 执行后:(SI)=0002H 段起始地址 1 BUFF = 2 48 3 00 MOV SI,BUFF; 执行后:(SI)=0048H 4 FE 5 FF

  16. 13 57 24 68 DS 5.2.2 目标地址传送指令 2.将地址指针装到DS和另一个寄存器的指令 • 语句格式:LDS OPD,OPS • 功能: LDS指令的功能是把4个字节的地址指针(其中包括一个段地址和一个偏移量)传送到两个目的寄存器,其中,地址指针的后两个字节即段地址一定送到DS中。 例:(DS)=C000H,(C2480H)=1357H,(C2482H)=2468H LDS SI,[2480] DS:2480H 57H DS:2481H 13H DS:2482H 68H SI DS:2483H 24H

  17. 5.2.2 目标地址传送指令 3.将地址指针装到ES和另一个寄存器的指令 • 语句格式:LES OPD,OPS • LES指令与LDS指令的操作基本相同,所不同仅在于将源操作数所指向地址指针中的段基址(后两个字节)传送到ES段寄存器,而不是DS段寄存器。

  18. 5.2.3 标志位传送指令 1.读取标志指令 • 语句格式:LAHF • 功能:将标志寄存器的低8位送入AH寄存器。 • 该指令的执行对标志位无影响。 2.设置标志指令SAHF • 语句格式:SAHF • 功能:将AH的内容送入标志寄存器的低8位,高8位不变。从该指令功能可看出,SAHF为LAHF的逆过程。

  19. 5.2.3 标志位传送指令 3.对标志寄存器的压入堆栈指令和弹出堆栈指令 • PUSHF指令将标志寄存器的值压入堆栈顶部,同时,堆栈指针SP的值减2,此指令在执行时标志寄存器的值不变。 • POPF指令的功能正好相反,此指令在执行时从堆栈中弹出一个字送到标志寄存器中,同时堆栈指针SP的值加2。 • PUSHF和POPF指令一般用在子程序和中断处理程序的首尾,起保存主程序标志和恢复主程序标志的作用。

  20. 5.2.4 输入/输出数据传送指令 1.输入指令IN • 输入指令用来从指定的外设端口寄存器取信息送入累加器。它有四种形式: (1)语句格式:IN AL,PORT    功能:(PORT) →AL (2)语句格式:IN AX,PORT    功能:(PORT) →AX (3)语句格式:IN AL,DX    功能:([DX]) →AL (4)语句格式:IN AX,DX    功能:([DX]) →AX • PORT指端口号,即端口寄存器地址。

  21. 5.2.4 输入/输出数据传送指令 2. 输出指令 • 输出指令用来把累加器的内容送往指定的外设端口寄存器,它有四种形式: (1)语句格式:OUT PORT,AL    功能:(AL) →PORT (2)语句格式:OUT PORT,AX    功能:(AX) →PORT (3)语句格式:OUT DX,AL    功能:(AL) →[DX] (4)语句格式:OUT DX,AX    功能:(AX) →[DX]

  22. 5.2.4 输入/输出数据传送指令 直接IN指令(口地址只能 8 位) IN AL ,50H IN AX ,80H 间接IN指令(口地址是16 位,也可8 位) MOV DX,0FFF2H IN AL ,DX 直接OUT指令(口地址只能 8 位) OUT 44H , AL OUT 70H , AX 间接OUT指令(口地址是16 位,也可8 位) MOV DX,87FEH MOV DX ,80H MOV AL ,40H OUT DX ,AL OUT DX ,AL

  23. 5.3 数据操作类指令 • 86系列 CPU指令系统中,具有完备的加、减、乘、除算术运算指令,可处理不带符号或带符号的8/16位二进制整数,以及不带符号的装配型/拆开型十进制整数。 数据操作类指令包括以下几种类型的指令: • 算术运算指令 • 加法指令 • 减法指令 • 乘法指令 • 除法指令 • BCD码运算(十进制调整)指令 • 逻辑运算和移位指令 • 逻辑运算指令 • 移位指令 • 循环移位指令

  24. 5.3.1 算术运算类指令 1.加法指令 • 不带进位的加法 ADD 格式: ADD DEST,SRC 功能: DEST+SRC DEST • 带进位的加法 ADC 格式: ADC DEST,SRC 功能: DEST+SRC+CF DEST • 加 1 指令 INC 格式: INC DEST 功能: DEST+1 DEST (不影响CF) 说明: • SRC:立即数、通用REG、M三种寻址方式,DEST:通用REG、M两种寻址方式。 • 立即数不能做目的操作数,DEST,SRC不能同为存储器寻址方式, 类型要一致,段寄存器不能做操作数。 • 这三条指令运算结果将影响状态标志位,但是INC指令不影响标志CF。

  25. 5.3.1 算术运算类指令 例如: ADDAL,50H  ; AL和50H相加,结果放在AL中 ADDDI,SI  ; DI和SI的内容相加,结果放在DI中  ADD [BX+DI],AX ; BX+DI和BX+DI+1两个存储单元的内容和AX ; 中的内容相加,结果放在BX+DI和BX+DI+1所 ;指的存储单元中 例如:  ADCAX,SI  ; AX和SI中的内容以及CF的值相加,结果放在AX中 ADCDX,[SI] ; SI和SI+1所指的存储单元的内容和DX的内容          ;以及CF的值相加,结果放在DX中

  26. 5.3.1 算术运算类指令 例如: INCAL     ; 将AL中的内容加1 INCCX        ; 将CX中的内容加1 INCBYTE PTR[BX+DI+500] ; 将BX+DI+500所指的存储单元的内容加1 2.减法指令 • 不带借位减法 SUB 格式:SUB DEST,SRC; 功能:DEST - SRC DEST • 带借位减法SBB 格式:SBB DEST,SRC; 功能:DEST - SRC - CF DEST • 减 1 指令DEC 格式:DEC DEST ; 功能:DEST - 1 DEST • 求补指令NEG 格式: NEG DEST; 功能:0 - DEST DEST • 比较指令 CMP 格式: CMP DEST,SRC; 功能:DEST - SRC(只影响标志位,不回送结果,所影响的标志位见课本123页表5-4) • 以上五条指令均可作字或字节运算,而且除DEC不影响CF外,其他都按一般规则影响状态标志位 。

  27. 5.3.1 算术运算类指令 例如: SUBBX,CX ; 将BX中的内容减去CX中的内容,结果放在BX中 SUB [BP+2],CL ; 将SS段的BP+2所指的单元中的值减去CL ; 中的值,结果放在BP+2所指的堆栈单元中 SUBAL,20  ; AL中的数减去20,结果放在AL中 SUBWORD PTR [DI],1000H ;DI和DI+1所指的两单元中的数减去1000H, ;结果放在DI和DI+1所指的单元中 例如: SBBAX,2030H ; 将AX的内容减去立即数2030H,并减去进位位CF的值         SBBWORD PTR [DI+2],1000H ; 将DI+2和DI+3所指的   ;两单元的内容减去立即数1000H,并减去CF           ;的值,结果放在DI+2和DI+3所指的单元中

  28. 5.3.1 算术运算类指令 例如: DECAX  ;将AX的内容减1,再送回AX中   DECBL  ;将BL的内容减1,结果送回BL中   DECBYTE PTR [DI+2] ;将DI+2所指的单元的内容减1,结果送回此单元 例如: NEGAL ; 将AL中的数取相反数,送回AL NEGCX ; 将CX中的数取相反数,送回CX 例如:  CMPAX,2000H ; 将AX的内容和2000H相比较,结果影响标志位 CMPAL,50H  ; 将AL中的数和50H比较,结果影响标志位 CMPAX,[BX+DI+100] ; 将累加器和两个存储单元的数相 ;比,单元地址由BX+DI+100和      ; BX+DI+101指出 CMPDX,DI ; 将DX和DI的内容相比

  29. 5.3.1 算术运算类指令 3.乘法指令 • 乘法运算是双操作数运算,但是,在指令中却只指定一个操作数,另一个操作数是隐含规定的。 • 其中的操作数可以是寄存器操作数或存储器操作数,而隐含的为AL或AX。 • 指令格式: 无符号数乘法 MUL SRC ;(AX) (AL)*(SRC)字节乘法 ;(DX,AX) (AX)*(SRC)字乘法 带符号数乘法 IMUL SRC;操作同上 • 进行字节运算时,目的操作数必须是累加器AL,乘积在寄存器AX中。 • 进行字运算时,目的操作数必须是累加器AX,乘积在寄存器DX,AX中。

  30. 5.3.1 算术运算类指令 • 注: • 乘法指令运算结果只影响状态标志CF、OF。 • SRC只能是通用REG或M寻址,不能是立即数。 • 只能是字节乘字节或字乘字。 • 存储器寻址时加类型说明,如 MUL BYTE PTR [BX], • MUL WORD PTR [BX] • 例如: • MOV AL,0A3H ;(AL)=0A3H • MOV BL, 11H ;(BL)=11H • MUL BL ;(AX)=0AD3H

  31. 5.3.1 算术运算类指令 4.除法指令 • 指令格式: 无符号数除法DIV SRC 带符号数除法IDIV SRC • 在除法运算中,如果除数是8位的,则要求被除数是16位的;如果除数是16位的,则要求被除数是32位的。

  32. 符号扩展指令: 字节扩展到字 CBW;将寄存器AL中的符号位扩展到寄存器AH 字扩展到双字 CWD;将寄存器AX中的符号位扩展到寄存器DX 7 AH 0 7 AL 0 CBW 0 15 DX 0 15 AX CWD 5.3.1 算术运算类指令 • 注: • 当除数是字节数据时,被除数必须放在AX中;当除数是字数据时,被除数必须放在DX,AX中。 • 除法指令运算结果对状态标志无定义。 • 8086/8088规定IDIV指令运算结果余数的符号与被除数相同。 • 当被除数位数不够时,需扩展到所需的位数,带符号数需进行符号位扩展。 • 若商超出字或字节表示的范围,自动产生 0 号中断

  33. 作业: P136 5.4-5.7

More Related