Intel80868088CPU的指令系统02.ppt_第1页
Intel80868088CPU的指令系统02.ppt_第2页
Intel80868088CPU的指令系统02.ppt_第3页
Intel80868088CPU的指令系统02.ppt_第4页
Intel80868088CPU的指令系统02.ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章 8086/8088指令系统,3.3 指令系统,可分成如下6类: (1)数据传送类 (2)算术运算类 (3)位运算类 (4)控制类 (5)I/O类 (6)串操作类 (7)转移类,符号及其含义,OPRD 泛指各种类型的操作数 mem 存储器操作数 acc 累加器操作数 dest 目的操作数 src 源操作数 disp 8 位或 16 位偏移量,可用符号地址表示 DATA 8 位或 16 位立即数 PORT 输入/输出端口,可用数字或表达式表示 ( ) 表示寄存器的内容或存储单元的内容 表示偏移地址,3.3.1 数据传送指令,数据传送指令又可分为如下四种: 通用传送 目标地址传送 标志传送 输入输出,1.通用传送指令 (1) MOV dest,src; destsrc 传送的是字节还是字取决于指令中涉及的寄 存器是8位还是16位。 具体来说可实现: MOV mem/reg1,mem/reg2 指令中两操作数中至少有一个为寄存器 例: MOV CL,DL MOV AX,BX MOV SI,CX MOV CL,BX+5, MOV reg,data ;立即数送寄存器 MOV mem,data ;立即数送存储单元 MOV acc,mem ;存储单元送累加器 MOV mem,acc ;累加器送存储单元 MOV segreg,mem/reg ;存储单元/寄存器送 段寄存器 MOV mem/reg,segreg ;段寄存器送存储单 元/寄存器,MOV指令使用规则:,1) IP不能作目的寄存器 2) 不允许memmem 3) 不允许regseg 4) 立即数不允许作为目的操作数 5) 不允许segreg立即数 6) 源操作数与目的操作数类型要一致,几个不能传送的解决办法:用AX作桥梁 存储器存储器: MOV AX,MEM1 MOV MEM2,AX 段寄存器段寄存器: MOV AX,DS MOV ES,AX 段寄存器立即数: MOV AX,DATA MOV DS,AX,应用举例:将1000H开始的100个存储单元 全部填充为ASCII码2AH(*)。,程序段如下: MOV DI,1000H MOV CX,64H MOV AL,2AH AGAIN:MOV DI,AL INC DI DEC CX JNZ AGAIN HLT,上程序段存放在代码段中,設(CS)=109EH,则各条指令存放地址如下:,CS : IP 指令 109E : 0100 MOV DI,1000H 109E : 0103 MOV CX,64H 109E : 0106 MOV AL,2AH 109E : 0108 MOV DI,AL 109E : 010A INC DI 109E : 010B DEC CX 109E : 010C JNZ 0108 109E : 010E HLT 109E : 0110,什么是堆栈? 按“后进先出(LIFO)”方式工作的存储区域。堆栈以字为单位进行压入弹出操作。 为什么要设置堆栈? 为什么要按 “后进先出”方式工作? 参见下图,(2) 堆栈操作指令,主程序,IP,继续执行,主程序,执行子程序,转子程序,压栈,弹出,返回主程序,主程序,IP,IP(下),继续执行,主程序,转子程序1,返回主程序,IP,执行子程序 2,转子程序2,返回子程序1,IP(下),执行子 程序1,继续执行,子程序1,(a),(b),子程序调用示意图,(a) 主程序调子程序; (b) 子程序嵌套示意图,压栈,弹出,IP(下),规定由SS指示堆栈段的段基址,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。,SP,SS,堆栈段,进栈方向,退栈方向,栈底,栈顶, 压栈指令 PUSH src ; src为16位操作数 例:PUSH AX ;将AX内容压栈 执行操作:(SP)-1高字节AH (SP)-2低字节AL (SP)(SP)- 2 注意:立即数不能进栈,设(AX)=1020H,执行示意图,低地址,存储区 (SS段),执行前 (AX)=1020,(SP),存储区 (SS段),进栈方向,执行后,20,10,(AL),(AH),PUSH AX指令执行示意图,(SP)-2,(SP),高地址,低地址,高地址,(SP)-1,压栈指令的格式为: PUSH reg PUSH mem/reg PUSH segreg 例如: PUSH AX PUSH BX PUSH DS,注意进栈方向是高地址向低地址发展。, 弹出指令 POP dest 例:POP BX ;将栈顶内容弹至BX 执行操作: (BL)(SP) (BH)(SP)+1 (SP)(SP)+2,POP BX 的执行示意图如下图所示,低地址,存储区 (SS段),出栈方向,执行前,20,10,POP BX指令执行示意图,(SP),存储区 (SS段),执行后 (BX)=1020,(SP),(SP)+1,(SP)+2,BX,20,10,高地址,低地址,高地址,堆栈指令使用时应注意几点: 堆栈操作总是按字进行 不能从栈顶弹出一个字给CS 堆栈指针为SS:SP,SP永远指向栈顶 SP自动进行增减量(-2,+2),格式:XCHG reg,mem/reg 功能:交换两操作数的内容。 要求: 1.两操作数中必须有一个在寄存器中; 2.操作数不能为段寄存器和立即数; 3.源和目地操作数类型要一致。 举例: XCHG AX,BX XCHG 2000,CL,(3)交换指令XCHG,(4)查表指令XLAT 执行的操作:AL(BX)+(AL) 又叫查表转换指令,它可根据表项序号查出表中对应代码的内容。执行时先将表的首地址(偏移地址)送到BX中,表项序号存于AL中。 例如:内存数据段有一张16进制数的ASCII码表,设首地址为2000H,如欲查出表中第11个代码(代码序号从0开始)即十六进制数B的ASCII码。ASCII表在DS段中,并假设(DS)=4000H。见下页图。,30,31,32,.,39,41,42,.,45,46,.,42000H+0,42000H+0BH,0,1,2,9,A,B,E,F,十六进制数ASCII码表,存储器,则可用如下几条指令实现:,MOV BX,2000H ;(BX)表首地址 MOV AL,0BH ;(AL)序号 XALT ; 查表转换 执行后得到:(AL)= 42H = B,注意:转换表长度最大为256个表项(字节)。,(5)字节-字转换指令,格式:CBW ;把AL的符号位复制到AH CWD ;把AX的符号位复制到DX 用途:用于有符号数的除法。 例如:(AL) = A7H,则执行CBW后,AH的内 容为FFH。,2. 输入输出(I/O)指令,只限于用累加器AL或AX来传送信息。 功能: (累加器)I/O端口 (1)输入指令IN 格式: IN acc,PORT ;PORT端口号0255 IN acc,DX ;DX表示的端口范围达64K 例:IN AL,80H ;(AL)(80H端口) IN AL,DX ;(AL)(DX),例:OUT 68H,AX ;(69H,68H)(AX) OUT DX,AL ;(DX)(AL) 在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器,如: MOV DX,220H IN AL,DX ;将220H端口内容读入AL,(2) 输出指令OUT 格式:OUT port,acc OUT DX,acc,3. 地址传送指令 共有三条: 格式:LEA reg,mem ; 将指定存储器的16位偏移 地址送指定寄存器 LDS reg, mem32; DS:reg(mem开始的四 个内存单元) LES reg, mem32; 同上,但DS改为ES 要求源操作数必须是一个内存操作数,目的操作数必须是一个16位的通用寄存器。,设:(SI)=1000H 则执行该指令后,(BX)=1010H 注意以下两条指令差别: LEA BX,BUFFER MOV BX,BUFFER 前者表示将符号地址为BUFFER的存储单元的偏移地址取到 BX中;后者表示将BUFFER存储单元中的内容取到 BX中.,例:LEA BX,SI+10H,下面两条指令等效: LEA BX,BUFFER MOV BX, OFFSET BUFFER 其中OFFSET BUFFER表示存储器单元BUFFER的偏移地址。 二者都可用于取存储器单元的偏移地址,但LEA指令可以取动态的地址,OFFSET只能取静态的地址。,4.标志传送指令 共有四条: (1)读标志指令LAHF LAHF把标志寄存器低8位中的5个标志位传送到AH中的指定位,如下图所示:,OF,DF,IF,TF,SF,ZF,AF,PF,CF,AH,LAHF指令的功能,FLAG,(2)设置标志指令SAHF SAHF的功能与LAHF的功能正好相反,用图来示意,只要将上图中5个箭头方向反一下即可。,OF,DF,IF,TF,SF,ZF,AF,PF,CF,AH,SAHF指令的功能,FLAG,执行的操作:(SP)-1标志寄存器高8位 (SP)-2标志寄存器低8位 (SP)(SP)-2 (4)从栈顶弹出标志寄存器指令POPF 执行的操作:标志寄存器低8位(SP) 标志寄存器高8位(SP)+1 (SP)(SP)+2 PUSHF和POPF指令用于保护和恢复标志寄存器内容。,(3)把标志寄存器推入栈顶指令PUSHF,例如: PUSH AX PUSH CX PUSHF ;保护标志寄存器内容 ;这段程序要用到AX,CX以及标志位 POPF ;恢复标志寄存器内容 POP CX POP AX,. . .,数据传送指令中,除SAHF和POPF这两条指令外,其余所有指令均不影响标志位。,3.3.2 算术运算指令,涉及两种类型数据: 无符号数和有符号数。对加减法指令,无符号和有符号数可采用同一套指令,但应注意: 参加的操作数必须都是无符号数或都是有符号数。 需使用不同的标志位来检查无符号数和有符号数的运算结果是否溢出。,两个8位数相加时有4种情况:,共有5条: (1) 不带进位的加法指令ADD 格式: ADD dest,src ;dest(dest)+(src) ADD mem/reg,data ADD mem/reg1,mem/reg2 【功能】 实现两个操作数的相加,其结果送回目的操作数中。,1.加法指令,加法指令对操作数的要求如下: 可以是字节(8位),也可以是字(16位),但二者必须一致。 源操作数可以是立即数。 可以是无符号数,也可以是有符号数,但二者应一致。 不允许都是存储器操作数。 不允许是段寄存器。,例:,ADD AL,30H ADD AX,BX+20H ADD CX,SI ADD DI,200H ADD指令对标志位(指状态标志)都有影响。,例:,ADD CL,20H ;CL(CL)+ 20H ADD AX,SI ;AX(AX)+(SI) ADD BX+2,AL ;(BX+2)(BX)+2)+(AL) ADD DX,BX+SI ;DX(DX)+(BX)+(SI) ADD AX,CL ;错误!操作数类型应一致 ADD SI,BX ;错误!不允许两个操作数都是存储器 ADD DS,AX ;错误!不允许把段寄存器作为操作数,(2) 带进位位的加法指令ADC,【格式及操作】 ADC dest,src ;dest(dest)+(src)+(CF) 【功能】 源操作数dest、目的操作数src、进位标志CF三者相加,结果送回目的操作数中。 ADC指令在格式、功能及对标志位的影响方面都与ADD指令基本相同,只是CF也要参加求和运算。,(2) 带进位位的加法指令ADC,ADC指令在形式上和功能上都有与ADD类似,只是相加时还要包括进位标志CF的内容,例如: ADC AL,68H ;AL(AL)+68H+(CF) ADC AX,CX ;AX(AX)+(CX)+(CF) ADC BX,DI ;BX(BX)+DI+1DI +(CF),例:,设CF=1,写出以下指令执行后的结果。 MOV AL,7EH ADC AL,ABH 指令执行后:AL=7EH+ABH+1=2AH,且CF=1。,例:有两个4字节的无符号数相加: 2C56F8AC+309E47BE=? 设被加数、加数分别存放在BUFFER1及BUFFER2开始的两个存储区内,结果放回BUFFER1存储区,如下页图所示。 因CPU只能进行8位或16位的加法运算,为此可将加法分4次进行。,ADC指令主要用于多字节加法运算中,56H,2CH,BEH,47H,BUFFER1,BUFFER2,ACH,F8H,9EH,30H,被加数,加数,数据段,多字节加法示意图,.,.,程序段如下: MOV CX,4 ;置循环次数 MOV SI,0 ;置SI初值为零 CLC ;清进位标志CF LL: MOV AL,BUFFER2SI ADC BUFFER1SI,A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论