微机原理:第2章 指令系统_第1页
微机原理:第2章 指令系统_第2页
微机原理:第2章 指令系统_第3页
微机原理:第2章 指令系统_第4页
微机原理:第2章 指令系统_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、第2章 指令系统 2.1计算机的编程结构内容提要寄存器1)通用寄存器2)段寄存器3)指令指针寄存器4)FLAGS(标志)寄存器存储器实地址方式和虚拟地址方式输入/输出端口寄存器寄存器1)通用寄存器8个32位寄存器:EAX、EBX、ECX、EDX、ESP、EBP、ESI和EDI8个16位寄存器:AX、BX、CX、DX、SP、BP、SI和DI8个8位寄存器:AH、BH、CH、DH、AL、BL、CL和DL2)段寄存器:CS、DS、SS、ES、FS(32位)和GS(32位)存放高位地址(低16位称为偏移量,存放在通用寄存器)3)指令指针寄存器:EIP(32位)和IP(16位) 标志寄存器:EFR(32

2、位)和FR(16位)EBX/BX、ESI/SI和EDI/DI作为地址指针默认地指向数据段;而EBP/BP /ESP/SP作为地址指针默认地指向堆栈段标志寄存器中的常用标志:6个状态标志:(记录程序运行结果的状态信息)ZF (零标志)SF (符号标志)PF (奇偶标志)CF(进位标志)OF(溢出标志)AF(辅助进位标志)3个控制标志(控制微处理器的操作和系统所处的工作方式)DF (方向标志)IF (中断允许标志)TF (单步标志)在调试程序中,可利用单步命令,在每条指令执行完后停下来查看结果。判断运算结果是否溢出的规则:两个同号数相加(或两个异号数相减)时,若运算结果的符号与原数据符号相反,表示

3、溢出。(无符号数是否溢出由进位标志判断)存储器8086例:12345678H 用地址较小的内存单元的地址作为该字单元的地址 数据的低8位存放在地址较小的内存单元中,数据的高8位存放在地址较大的内存单元中(小端方式)实地址方式每一个内存单元都有唯一的物理地址最大可寻址的内存空间为220=1MB物理地址=段基值+偏移量=24x段码+偏移量逻辑地址表示为 段码:偏移量34H20101H20102H20103H20104H12H56H78H段偏移地址主要用途CSIP指令地址SSSP或BP堆栈地址DSBX,SI,DI,变量名,8或16位数数据地址ESDI(目的串偏移地址)目的串地址存储器段基址可是任意内

4、存地址,不必是16的倍数虚拟地址方式(保护方式)最大可寻址的内存空间为246=64T逻辑地址 段选择码:偏移量线性地址=段基址+(段内)偏移量物理地址=线性地址(不采用分页机制)物理地址=页基址+页内偏移量=212x页码+页内偏移量(采用分页机制)虚拟8086方式虚拟8086方式是虚地址方式的子集,它允许在虚地址方式和分页环境下同时执行多个8086程序时间片技术:操作系统为每个任务分配一定时间段寄存器的使用与实地址方式相同输入/输出端口接口:CPU与外设之间的连接部件端口:每个接口有一个或多个端口,每个端口都有相应的寄存器对应当对一个端口进行读/写操作时,实际是对不同的端口寄存器进行操作寄存器

5、分类数据寄存器状态寄存器控制寄存器2.2操作数寻址方式寻址(addressing):指出指令中 数值型操作数的位置 或地址型操作数的 形成方式寻址方式(addressing mode):寻找操作数的不同方法操作数采取不同寻址方式会影响指令运行速度操作数寻址方式操作数类型立即数(常数,常量):im寄存器操作数:r内存操作数:m目的操作数源操作数rm im r m im r 操作数寻址方式微机指令系统使用3种来源的操作数立即数寻址(Immediate Addressing)定义:操作数在指令中寻址过程:指令立即数用途:给寄存器/内存单元赋值特点:取立即数不需占用总线周期,快程序执行过程中数值不改变

6、,常数例: MOV AX,1234H低地址高地址CS操作码34H12H34H12HAX寄存器寻址(Register Addressing)定义:操作数在CPU内部寄存器中寻址过程:指令寄存器数书写:寄存器名例:已知:BX=1234H,MOV AX, BX优点:在CPU内寻找操作数,存取速度快34H12HBXAX12H34H通用寄存器8个32位寄存器:EAX、EBX、ECX、EDX、ESP、EBP、ESI和EDI8个16位寄存器:AX、BX、CX、DX、SP、BP、SI和DI8个8位寄存器:AH、BH、CH、DH、AL、BL、CL和DLI/O端口寻址(Input/Output Port Addr

7、essing)主机和外设间的数据传输都通过输入/输出端口寻址范围:64KB寻址类型:直接寻址:只用于寻址地址从00H0FFH这256个端口, 端口号用8位2进制数表示例: IN AL,50H 50H端口的字节读入AL 间接寻址:可用于寻址全部64KB个端口,应首先将端口号送入DX注意:地址大于0FFH的端口,只能采用间接寻址方式例:OUT DX,AL AL中的字节输出到DX所指的端口中 存储器寻址直接寻址寄存器间接寻址寄存器相对寻址基址加变址寻址相对基址加变址寻址相对比例变址寻址基址加比例变址寻址相对基址加比例变址寻址直接寻址(Direct Addressing)定义:内存操作数的偏移地址在指

8、令中寻址过程:有效地址形成:书写:变量名例:MOV AL, a将DS:a为地址的内存单元的数据送AL( a事先已定义)数值(无符号整数)例:MOV AL, DS:1100H注意:在宏汇编程序中段寄存器名不能缺省与段r合成指令偏移地址物理地址数寄存器间接寻址(Register Indirect Addressing)定义:寄存器的内容是要寻找的内存操作数的偏移地址寻址过程:书写:寄存器名间址寄存器:16位机: BX、BP、SI和DI32位机: EAX、EBX、ECX、EDX、ESP、EBP、ESI和EDI与段r合成指令偏移地址物理地址数寄存器寄存器间接寻址(Register Indirect A

9、ddressing)说明:若以BX,SI,DI(16位机)或EAX,EBX,ECX,EDX,ESI和EDI (32位机)之一作间址寄存器,默认与DS合成物理地址若以BP和EBP作为间址寄存器,默认与SS合成物理地址若将间址寄存器内容作为其它段偏移地址,需加段超越符号。例:ES:SI特点:在程序运行时修改寄存器内容,可用同一条指令对不同内存单元的数据进行操作低地址高地址CS段操作码34H12H34H12HAXDS段20000H21100HDS20000110021100H+例1:DS=2000H,SI=1100H 内存数据=1234H MOV AX, SISI寄存器间接寻址(Register I

10、ndirect Addressing)21101H寄存器相对寻址方式 (Register ReIative Addressing)定义:内存单元的有效地址是间址寄存器内容与指令中给出的位移量(符号常整数)之和有效地址=间址寄存器内容+8/16/32位位移量间址寄存器:BX/BP/SI/DI/EAX/EBX/ECX/EDX/ESP/EBP/ESI/EDI书写:位移量间址寄存器名间址寄存器名位移量间址寄存器名+位移量低地址高地址CS段操作码00H15H34H12H34H12HDXDS段70000H73500HBX150073500H+例1:DS=7000H,BX=2000H MOV DX,1500

11、HBXDS700002000寄存器相对寻址应用举例基址加变址寻址(Based Indexed Addressing)内存单元的EA为基址寄存器内容与变址寄存器内容之和EA=基址寄存器内容+变址寄存器内容基址寄存器:16位机: BX和BP32位机: EAX、EBX、ECX、EDX、ESP、EBP、ESI和EDI变址寄存器:16位机:SI和DI32位机:EAX、EBX、ECX、EDX、EBP、ESI和EDI用基址加变址寻址合成EA时,默认段取决于基址寄存器MOV AL,EBX+EBP 默认段为DS段相对基址加变址寻址(ReIative Based Indexed Addressing)内存单元EA

12、是基址寄存器和变址寄存器的内容与位移量(8/16/32位)三者之和EA=基址寄存器内容+变址寄存器内容+位移量注意:合成EA时,默认段取决于基址寄存器例:MOV AL,TWOARRAYEBXESI相对比例变址寻址(ReIative Scaled Indexed Addressing)内存单元EA由变址寄存器的内容乘以比例因子,再加上位移量构成比例因子:1/2/4/8(默认值是1)比例因子2用来寻址字存储器数组比例因子4用来寻址双字存储器数组比例因子8用来寻址四字存储器数组EA=变址寄存器比例因子+位移量注意:只适用于32位机例: MOV EAX,EBX*4+ARRAY 基址加比例变址寻址(Ba

13、sed Scaled Indexed Addressing)内存单元的EA由基址寄存器的内容加变址寄存器的内容与比例因子乘积构成EA=基址寄存器+变址寄存器比例因子例:MOV EAX, EBX+EDX*4有效地址EBX+EDX4取出连续4个单元的内容送入EAX注意:EAX,EBX,ECX,EDX,EBP,ESI,EDI都可存放32位偏移地址相对基址加比例变址寻址(ReIative Based Scaled Indexed Addressing)内存单元EA是由基址寄存器内容、变址寄存器内容与比例因子的乘积,以及位移量三项之和构成EA=基址寄存器+变址寄存器比例因子+位移量例:MOV AX, T

14、WOARREBXESI*2位移量TWOARR指向二维数组首地址基址寄存器EBX指向某一行变址寄存器ESI指向某一列,数组元素为2字节长 注意:EAX,EBX,ECX,EDX,EBP,ESI,EDI都可存放32位偏移地址。2.3Pentium的指令系统概念Pentium指令分类:1.传送指令2.算术运算指令3.逻辑运算和位操作指令4.串操作指令5.转移和调用类指令(书3.3.2和3.3.5)6.控制指令指令(Instruction):微处理器执行的基本操作指令系统(Instruction set):微处理器所能执行的全部指令的集合传送指令按功能分:1.1通用传送指令1.2标志传送指令1.3地址传

15、送指令1.4输入输出指令1.5转换类指令1.1.1数据传送指令1.1.1.1MOV指令1.1.1.2符号扩展传送指令1.1.1.3零扩展传送指令1.1.2堆栈操作指令1.1.2.1进栈指令1.1.2.2出栈指令1.1.2.3 16位通用寄存器进栈/出栈指令1.1.2.4 32位通用寄存器进栈/出栈指令1.1.3数据交换指令1.传送指令功能:实现寄存器之间、寄存器与存储器之间及寄存器与I/O端口之间的数据传送1.1.1.1传送指令(Move)格式:MOV 目的, 源功能:把一个字节/字/双字 数据从源送至目的注意:立即数不能作目的;立即数不能送段r;若源为立即数,目的为m,在目的前应用PTR标明

16、其数据类型;段r之间不能传送;CS和IP不能作目的;源和目的不能同为m;源和目的类型一致。目的操作数源操作数rm im r m im r 立即数(常数,常量):im寄存器操作数:r内存操作数:m双操作数指令中,目的操作数与源操作数必须类型一致MOV AL,050AH非法指令:050Ah已经超出AL的数值范围。指令应改为:MOV AX,050AH 除串操作指令外,不允许双操作数都是存储单元 mov word ptr 2bxsi,di不能直接在存储器和存储器之间传送数据指令应改为: mov ax,di mov 2bxsi,ax要小心段寄存器的操作 MOV DS,ES 非法指令,不允许段寄存器之间直

17、接传送数据 指令应改为:MOV AX,ES MOV DS,AX1.1.1.2符号扩展传送指令 1.1.1.3零扩展传送指令格式:MOVSX 目的,源功能:把数据从源送至目的的同时将符号扩展到目的寄存器的高位例:MOVSX EBX,DL若DL=80H,EBX=0FFFF FF80H格式:MOVZX 目的,源功能:把数据从源送至目的的同时将0扩展到目的寄存器的高位例:MOVZX BX,DL若DL=80H,BH=0,BL=80H唯一差别:前者按符号位扩展,高位可能为0,也可能全为1;后者将高位扩展为0相同点:源位数少,目的位数多 可由8位扩展到16/32位,也可由16位扩展到32位 源:r/m;目的

18、:r1.1.2堆栈操作指令进栈指令出栈指令16位通用寄存器进栈/出栈指令32位通用寄存器进栈/出栈指令堆栈:按照“后进先出” 或 “先进后出” 原则组织的一段内存区域,必须放在堆栈段(SS)段基址:堆栈段中地址最小的单元,由SS指向;栈底:堆栈内地址最大的单元(固定端)(高地址)栈顶:栈操作时存取最后一个数据的内存单元(浮动端)(低地址)进栈指令格式:PUSH 源操作数( r16/32/m16/32/seg )功能:将操作数从源存入由SP/ESP指向的栈顶78H56H34H12H78H56H34H12H00H04HSS段首地址10000H10010HESP(原栈顶)ESP(压入CS 后栈顶)0

19、400HESP(压入EBX+ESI 后的栈顶)12345678H08000HDS段首地址EIPCS段首地址04000HESIpush cspush dword ptr ebx+esi设:CS=400H,DS=800H, SS=1000HESP=10H,EBX=200H,ESI=20H初始栈顶地址=SS10H+ESP =1000H10H+10H =10010H数据地址=DS10H+EBX+ESI =800H10H+200H+20H =08220HP34例2出栈指令格式: POP 目的操作数( r16/32/m16/32/seg )功能:将SP/ESP指向的栈顶字操作数送指定目的78H56H34H

20、12H00H04HESP(弹出数据后栈顶)12345678HEAX10010HSS段首地址10000H08000HDS段首地址CS段首地址04000H设:该条指令位于上述2条PUSH指令之后 例:pop eax 操作: eaxESP ;将ESP指向的4个字节的内容送eaxESPESP+4 ;栈指针加41.1.3数据交换指令格式:XCHG 目的, 源功能:将源操作数与目的操作数内容互换注意:立即数不能作该指令 的操作数;段r之间不能互换;源和目的不能同为m;源和目的类型一致。例: xchg bx,si非法指令,源和目的不能同为内存操作数; mov cx,si ;cx ds:si xchg cx,

21、bx ;cx ds:bx xchg cx,si ;cx ds:si1.2标志传送指令指令分类:提取标志指令LAHF设置标志指令SAHF标志进栈指令PUSHF/PUSHFD PUSHF 功能:将16位标志寄存器FR的内容压入堆栈 PUSHFD功能:将32位标志寄存器EFR的内容压入堆栈 标志出栈指令POPF/POPFD POPF 功能:将栈顶字送标志寄存器FR POPFD功能:将栈顶双字送标志寄存器EFR 说明: 将SF,ZF,AF,PF,CF状态标志 AH的第7,6,4,2,0位CFPFAFZFSFTFIFDFOFAHFlagsAHCFPFAFZFSFTFIFDFOFFlags1.3地址传送指

22、令功能:将内存操作数的地址送指定寄存器分类:有效地址传送指令:LEA格式:LEA 目的,源功能:将源操作数(m)的有效地址(偏移地址)送目的操作数指定的通用寄存器。说明:源是代表内存操作数地址的变量,标号或地址表达式实地址方式:将源的有效地址送16位通用寄存器虚地址方式:将源的有效地址送32位通用寄存器逻辑地址传送指令:LDS,LES格式:LDS r , m 功能:将源指定的段基值和偏移量送DS和目的r说明:源是m,提供存放段基值和偏移量的内存区域首字节地址目的是16/32位通用寄存器注意:操作目的不是获取内存操作数1.4输入输出指令Intel系统用于I/O寻址的地址线是16条:端口最多为21

23、665536(64K)个地址范围0000H0FFFFH指令:IN:实现从I/O到CPU的信息传送格式: IN 累加器,端口号功能:将字节/字/双字数据从输入端口送至累加器AL/AX/EAX直接寻址和间接寻址:OUT:实现从CPU到I/O的信息传送格式: OUT 端口号,累加器功能:将AL/AX/EAX中的信息送输出端口直接寻址和间接寻址1.5转换类指令换码指令格式:XLAT / XLATB 操作数功能:将内存指定字节单元的内容送AL字节/字扩展指令格式:CBW 功能:将AL中的符号位 扩展到AH中格式:CDQ功能:将EAX中的符号位扩展到EDX中,组成4字操作数EDX:EAX字节交换指令格式:

24、BSWAP 目的功能:将32位通用寄存器中的4个字节通过两两交换(1和4字节交换,2和3字节交换),实现反序排列格式:CWD/CWDE 功能:CWD将AX中的符号位扩展到DX中CWDE将AX中的符号位扩展到EAX的高位2.算术运算指令数值范围无符号二进制数8位操作数:025616位操作数:06553632位操作数:04G(4230)带符号二进制数8位操作数:-128+12716位操作数:-32768+3276732位操作数:-2G(-2230) +2G(2230)加法指令、减法指令、乘法指令、除法指令2.算术运算指令2.1.1不带进位的加法指令2.1.2带进位的加法指令2.1.3增量指令2.1

25、.4交换加法指令2.1加法指令2.2减法指令2.3乘法指令2.4除法指令2.5 BCD码调整指令2.2.1不带借位的减法指令2.2.2带借位的减法指令2.2.3减量指令2.2.4求补指令2.2.5比较指令2.2.6比较交换指令2.2.7 8字节比较交换指令2.3.1无符号数乘法指令2.3.2带符号数乘法指令2.4.1无符号数除法指令2.4.2带符号数除法指令10进制数的输出方法BCD码的数值范围BCD码调整的原因非压缩型BCD码加法调整指令压缩型BCD码加法调整指令非压缩型BCD码减法调整指令压缩型BCD码减法调整指令乘法调整指令除法调整指令十进制数运算应用举例例1:已知al=13H执行neg

26、 al后,al=0edh 考点:求补指令(Negative)格式:NEG 目标操作数功能:目标0-目标例2:实现510AL的程序段是:(A) MOV AL,5 MUL 10(B) MOV BL,5 MOV AL,10 MUL AL(C) MOV AX,5 MOV BX,10 MUL BX(D) MOV AL,5 MOV BL,10 MUL BX考点:无符号数乘法指令(Unsigned Multiplication) 格式:MUL 源操作数 功能:字节乘法:AXAL源操作数(8位r/m) 字乘法:DX:AXAX源操作数(16位r/m) 双字乘法:EDX:EAXEAX源操作数(32位r/m)例3:

27、已知AL内容为压缩型BCD码,对它进行加1操作,下述错误程序段为INC AL DAA(B) ADD AL,1 DAA(C) ADC AL,1 DAA(D) STC ADC AL,0 DAA考点:十进制算术指令应用3.逻辑运算和位操作指令3.1逻辑指令3.1.1逻辑“与” : AND 目标操作数,源操作数3.1.2逻辑“或”: OR 目标操作数,源操作数3.1.3逻辑“异或”:XOR 目标操作数,源操作数3.1.4逻辑“非”: NOT 目标操作数3.1.5测试指令: TEST3.2移位和循环移位指令3.2.1移位指令3.2.2循环移位指令3.2.3带进位的循环移位指令3.2.4双精度移位指令3.2.5位扫描指令算术左移指令算术右移指令逻辑左移指令逻辑右移指令循环左移指令ROL 循环右移指令ROR带进位的循环左移指令RCL带进位的循环右移指令RCR双精度左移指令SHLD双精度右移指令SHRD正向位扫

温馨提示

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

评论

0/150

提交评论