版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第3章 寻址方式与指令系统 指令系统的一般概念8086 CPU 的寻址方式8086指令系统一、指令系统的一般概念基本数据类型及其存储规则数据存储 基本数据类型:字节、字、双字、四字、双四字字节一个字节占用内存的一个地址;字两个相邻字节组成的16位二进制;双字4个相邻字节组成的32位二进制数;四字8个相邻字节组成的64位二进制数;双四字16个相邻字节组成的128位二进制数。注意:高位字节存高地址,低位字节存低地址指令与指令系统指令格式指令中应包含的信息:运算数据的来源运算数据的来源运算结果的去向运算结果的去向执行的操作执行的操作指令的助记符表示助记符格式可用以下通式表示:L:op D1, D2,
2、 D3其中:L是标号,在标识符后面跟有冒号(:)op是助记符,指令操作码的名字, D1,D2,D3是操作数参数,可以有0-3个。指令格式零操作数指令:零操作数指令: 操作码操作码 单操作数指令:单操作数指令: 操作码操作码 操作数操作数双操作数指令:双操作数指令: 操作码操作码 操作数,操作数(最常见)操作数,操作数(最常见)多操作数指令:多操作数指令: 三操作数及以上三操作数及以上指令格式操作码 操作数,操作数执行何种操作执行何种操作目标操作数目标操作数源操作数源操作数参加操作的数据或数据存放的地址参加操作的数据或数据存放的地址 MOV MOV AXAX, BXBX操作码操作码( (助记符助
3、记符) )目的操作数源操作数目的操作数源操作数例:例:指令格式操作数的存在形式指令格式相同的操作,采用不同的操作数,指令执行的速度不同: 存储器快!快!立即数立即数寄存器寄存器二、8086CPU的寻址方式寻址方式寻找操作数所在地址的方法(操作数寻址) 寻找指令所在地址的方法 (指令地址寻址) 重点掌握重点掌握8086 CPU 的操作数寻址方式立即数寻址方式: 操作数直接包含在指令字节中寄存器寻址方式 : 操作数存放在指令规定的CPU内部寄存器中存储器寻址方式: 操作数在内存数据区中,指令给出其地址信息I/O端口寻址方式: 操作数在I/O端口中,指令给出端口地址信息。1. 立即寻址 操作数直接包
4、含在指令字节中指 令:MOV AX,3412H功 能:(AX) = 3412H1. 立即寻址立即寻址特点:指令执行速度较快(在指令队列中直接取数)。立即数只能是整数,且只能作为源操作数。代码段代码段12123434MOV AX, 3412HMOV AX, 3412H的指令代码的指令代码3434AXAXAHAHALAL操作码操作码12122.寄存器寻址操作数在CPU的内部寄存器中2.寄存器寻址优点:由于操作数已存于寄存器中,执行速度快。注:寄存器可同时作为源操作数和目的操作数。3.存储器寻址方式(重点) 操作数在内存数据区中,指令给出其地址信息 存储器寻址方式的种类(重点)根据有效地址(EA)的
5、给出方式,分为: 直接寻址方式 寄存器间接寻址方式 寄存器相对寻址方式 基址加变址寻址方式 相对的基址和变址寻址方式存储器寻址方式(重点)1)直接寻址方式 定义:指令中直接给出操作数的偏移地址 默认操作数在数据段 例如: MOV AX,7834H 该指令将有效地址EA=7834H单元中的内容传送到AX寄存器中。若(DS)=2000H,则该指令源操作数的存储单元的物理地址为20000H7834H=27834H。代码段代码段操作码操作码3434数据段数据段2 0 0 02 0 0 0DSDS2000020000+7834+783427834278343434 1212AXAXMOV AX,7834
6、HMOV AX,7834H指令代码指令代码787812123434图图3.3.7 7直接寻址方式寻址过程直接寻址方式寻址过程直接寻址直接寻址方式下,操作数默认在数据段,但允许段重设,即由指令定义段(段前缀指令)。例:MOV AX,ES:1200H存储器寻址方式(重点)2)寄存器间接寻址方式 定义:操作数偏移地址为指令中的寄存器的内容。寄存器间接寻址由寄存器间接给出操作数的偏移地址;存放偏移地址的寄存器称为,它们只能是:操作数的段地址(操作数处于哪个段)取决于选择哪一个间址寄存器: BX,SI,DI BP默认在默认在数据数据段段默认在默认在堆栈堆栈段段寄存器间接寻址 寄存器间接寻址基址寻址(间址
7、基址寻址(间址寄存器为寄存器为基址基址 寄存器寄存器BX,BP)变址寻址(间址变址寻址(间址寄存器为寄存器为变址变址寄存器寄存器SI,DI)寄存器间接寻址例 存储器寻址方式(重点)3)寄存器相对寻址方式定义:操作数的偏移地址为寄存器的内容加上 一个位移量注:使用的寄存器只能是BX、BP、SI、DI, 位移量由指令给出。寄存器相对寻址MOV AX,BX+6824H 代码段代码段操作码操作码2424数据段数据段2626787868681 12 23 34 4DSDS2 27 73 32 2BXBX1234012340273227321B2961B29678 2678 26AXAXMOVMOVAX,
8、BXAX,BX6824H6824H指令代码指令代码+6824+6824图图3.9 3.9 寄存器相对寻址操作过程寄存器相对寻址操作过程存储器寻址方式(重点)4)基址加变址寻址方式定义:操作数的偏移地址为一个基址寄存器的内容 + 一个变址寄存器的内容;执行下列指令:MOV SI,1100HMOV BX,SIMOV AX,BX+SI2222H H1111H H2200H2200H偏移地址偏移地址AH ALAH AL 11 22 11 22数数据据段段存储器寻址方式(重点)5) 相对的基址和变址寻址方式定义:操作数的偏移地址为 基址寄存器内容+变址寄存器内容+位移量注:操作数的段地址由选择的基址寄存
9、器决定。执行以下程序段:MOV DI,1100HMOV BP,DIMOV AL,BP+DI+52222H H1111H H2205H2205H偏移地址偏移地址ALAL 2222堆堆栈栈段段总结寻址方式 对应的操作数存放形式 总结存储器寻址方式对间址寄存器的使用 总结存储器寻址中地址操作数的表示法总结寻址方式使用中的常见错误 4.I/O端口寻址操作数存放在IO端口中。两种编址方式:1)与存储器统一编址方式2)独立的IO空间编址方式1)与存储器统一编址方式:将IO端口地址视为存储器的一部分,可采用五种存储器寻址方式进行寻址。(用MOV指令即可访问)2)独立的IO空间编址方式采用专用指令:IN、OU
10、T此时有两种寻址方式:l)直接端口寻址方式端口地址的寻址范围是00FFH,端口地址直接由指令给出。例:IN AL,27H注意:27H不是立即数,但不需要加2) 间接端口寻址方式端口地址的寻址范围是00FFFFH,端口地址由DX寄存器给出。注意:使用专用寄存器DX来存放端口地址,但不要加。三、8086指令系统掌握操作码的含义指令对操作数的要求指令的对标志位的影响指令的功能8086 CPU 基本指令分类数据传送类指令算术运算类指令逻辑运算和移位指令串操作指令控制转移类指令处理器控制类指令 数据传送类指令 通用传送指令 累加器 AC 专用传送指令 地址传送指令 标志传送指令 一、通用数据传送指令1.
11、 最基本的传送指令 MOV(用的最多)通用传送指令 MOV 数据传送原则reg regreg sregreg msreg mreg immm imm通用寄存器的桥梁作用 通用寄存器的桥梁作用 m mimm m*MOV 数据传送中注意的问题 l l 两操作数不允许同时为存储器操作数两操作数不允许同时为存储器操作数MOV 数据传送中注意的问题l两操作数不允许同时为段寄存器。l源操作数是立即数时,目标操作数不能是段寄存器。lCS、IP不可作为目的操作数, FLAGS一般也不作为操作数在指令中出现。MOV数据传送指令例判断下列指令的正确性:MOV AL,BXMOV AX,SI05HMOV BXBP,B
12、XMOV DS,1000HMOV DX,09HMOV 1200,SI2. 堆栈操作指令 PUSH、POP入栈指令 PUSH指令执行过程:SP - 2 SP操作数高字节 SP+1操作数低字节 SP SPSP堆堆栈栈段段SPSP高高8 8位位低低8 8位位入栈指令的操作设AX=1234H,SP=1200H执行 PUSH AX 指令后堆栈区的状态: 12001200H H 堆堆栈栈段段 SP-2=11FEH SP-2=11FEH12H12H34H34H12001200H H 堆堆栈栈段段12H 34H12H 34HAXAX入栈后入栈后入栈前入栈前出栈指令POP指令执行过程: SP SP+1 SP S
13、P+2操作数低字节操作数低字节操作数高字节操作数高字节 SPSP堆堆栈栈段段SPSP高高8 8位位低低8 8位位出栈指令的操作执行 POP AX 12H12H34H34H1 11FEH1FEH 堆堆栈栈段段代代码码段段PUSHPUSH 12 34 12 34 AX AX SP+2SP+212001200H H 出栈后出栈后出栈前出栈前PUSH、POP 对堆栈指针 SP 的影响PUSH、POP指令中 src、dst 操作数的使用 PUSH、POP指令中 操作数的禁用 3. 数据交换指令 XCHG XCHG 指令的应用范围 XCHG 指令的 禁用情况例用 MOV、PUSH,POP、XCHG 指令
14、完成两寄存器AX、BX 中数据的交换(讨论所用机器码数量) 二、累加器专用传送指令1. 输入输出指令对端口操作的指令格式: IN AC,源操作数 OUT 目的操作数,AC举例: IN AL,50H IN AX,70H OUT 44H,AL OUT 80H,AX 2. 数据查表(换码)指令 XLAT代码段代码段D7D77979数据段数据段404078780 03 30 00 0BXBX07070300030080307803070 70 7ALALXLATXLAT指令代码指令代码+80000+800008 80 00 00 0DSDS803008030080301803018030780307图
15、图3.13.17 7XLATXLAT指令执行过程指令执行过程查表指令例数据段中存放有一张ASCII码转换表,设首地址为2000H,现欲查出0BH对应的ASCII码。303031313232.393941414242.4545464620002000H+0H+020002000H+11H+1100112299AABBEEFF查表指令例可用如下指令实现:MOV BX,2000H ;BX表首地址MOV AL,0BH ;AL序号XLAT ;查表转换执行后:AL = 42H还可用其他方法实现,如:MOV BX,2000HMOV AL,BX+0BH三、地址传送类指令1. 取有效地址指令 LEA 例:将符号
16、地址 BUFF 的有效地址赋给通用寄存器 BX注:这条指令常用于将注:这条指令常用于将变量变量的的1616位偏移地址取出位偏移地址取出送目标寄存器送目标寄存器符号地址符号地址LEA指令例比较下列指令: MOV SI,DATA1 LEA SI,DATA1 MOV BX,BX LEA BX,BX DATA1DATA1符号符号地址地址1212H H34H34H1100H1100H88H88H77H77HBX=1100HBX=1100H执行结果:执行结果:SI=1234HSI=1234H执行结果:执行结果:SI=DATA1SI=DATA1执行结果:执行结果:BX=7788HBX=7788H执行结果:执
17、行结果:BX=1100HBX=1100H20 位物理地址与 32 位逻辑地址2. 目标地址传送指令 LDS、LES代码段代码段C5C57878数据段数据段5656000020201 10 00 00 0DSDS初值初值+2130+213012130121307 8 5 67 8 5 6SISILDS SI, 2130HLDS SI, 2130H指令代码指令代码363621213030 10000 10000图图3.3.1818LDSLDS指令执行过程指令执行过程2 20 00 00 0DSDS终值终值地址传送指令的比较指令 LEA 与 LDS,LES 的区别地址传送指令的比较已知:DS09A0
18、H,BX0048H 执行后:执行后:DI0048H 执行后:执行后:DI003EH DS0816H 执行后:执行后:DI003EH ES0816HDS = 09A008H3EH00H16H0048H0049H004AH004BH四、标志传送指令 OF DF IF TF SF ZF AF OF DF IF TF SF ZF AF PF CFPF CF15 15 11 10 9 8 7 6 5 4 3 2 1 011 10 9 8 7 6 5 4 3 2 1 0FLAGSFLAGSLAHFLAHFSAHFSAHFAHAH图图3.19 LAHF3.19 LAHF和和SAHFSAHF指令传送操作指令传
19、送操作数据传送类指令总结源、目的操作数类型必须一致源、目的操作数不能同时是存储器操作数源、目的操作数不能同时是段寄存器立即数、CS、IP不能作目的操作数数传指令仅改变目的操作数,源操作数保持不变 (XCHG指令除外)数传指令的执行不影响状态标志位 (SAHF、POPF指令除外)XLAT指令专用寄存器为 AL(偏移量)、BX(表首地址)算术运算类指令加法指令 减法指令 乘法指令 除法指令 算术运算类指令计算机中两数运算后的溢出检测算术运算类指令二进制数的表值范围与标志 两个8位二进制数的加法运算及和的溢出分析 表示无符号数时 无溢出表示有符号数时 无溢出 两个8位二进制数的加法运算及和的溢出分析
20、 表示无符号数时 有溢出表示有符号数时 无溢出 两个8位二进制数的加法运算及和的溢出分析 表示无符号数时 无溢出表示有符号数时 有溢出 两个8位二进制数的加法运算及和的溢出分析 表示无符号数时 有溢出表示有符号数时 有溢出 算术运算 加法类指令加法指令 ADD 算术运算 加法类指令加法指令 ADC 常用于多字节数相加,使用前要先将常用于多字节数相加,使用前要先将CFCF清零。清零。算术运算 加法类指令ADD、 ADC 指令的操作数及类型 算术运算 加法类指令两点说明 算术运算 加法类指令INC 加 1(增量)指令 例两双倍精度字 1234FEDCH 和11228765H 相加 算术运算 减法类
21、指令SUB、SBB、DEC 减法指令算术运算 减法类指令NEG 求补指令算术运算 减法类指令CMP 比较指令 算术运算 减法类指令讨论 CMP AL,BL算术运算 减法类指令讨论 CMP AL,BL (AL、BL 均为无符号数)算术运算 减法类指令讨论 CMP AL,BL (AL、BL 均为有符号数)算术运算 减法类指令与CMP 指令有关的条件判断指令 CMP指令应用 LEA BX,MAX LEA SI,BUF MOV CL,19 MOV AL,SINEXT:INC SI CMP AL,SI JNC GOON ;CF=0转移 XCHG SI,AL算术运算 乘法类指令乘、除法指令与加、减法指令的
22、比较算术运算 乘法类指令乘法指令中的专用寄存器算术运算 乘法类指令MUL 无符号数乘法指令算术运算 乘法类指令MUL对操作数的要求算术运算 乘法类指令IMUL 有符号数乘法指令算术运算 除法类指令除法指令中的专用寄存器算术运算 除法类指令DIV 无符号数除法指令算术运算 除法类指令DIV对操作数的要求算术运算 除法类指令IDIV 有符号数除法指令算术运算 除法类指令CBW、CWD 有符号数扩展指令BCD码运算调整指令将指令执行的二进制运算结果调整为压缩BCD码或扩展BCD码表示的十进制数。共6条,使用专用寄存器 AL或AL、AH;不能单独使用,要紧跟在相应的算术运算指令之后。算术运算类指令总结
23、算术运算指令会影响状态标志位加减法指令无专用寄存器乘除法指令有专用寄存器 AL、AH、AX、DX乘法指令有8816、 161632模式除法指令有16 8 8,8、3216 16、16 模式比较指令不送回相减结果,仅影响状态标志位加减法指令无有符号、无符号之分乘除法指令有有符号、无符号之分逻辑运算和移位指令逻辑运算指令 移位指令 循环移位指令 逻辑运算类指令逻辑运算指令对 操作数的 要求大多与MOV指令 相同;“非”运算指令 要求操作数 不能是立即数;除“非”运算指令 外,其余指令的执行都会使标志位 OF=CF=0。逻辑运算类指令AND、OR、XOR 位与、或、异或指令“与”指令的应用实现两操作
24、数 按位相与的 运算AND BL,SI使目的操作数的某些位不变,某些位清零AND AL,0FH在操作数不变的情况下,使CF和OF清零AND AX,AX“或”指令的应用实现两操作数按位相 “或”的 运算OR AX,DI使目的操作数的某些位不变,某些位置“1”OR CL,0FH在不改变操作数的 情况下使OF=CF=0OR AX,AX“异或”指令的应用实现两操作数按位相 “异或”的 运算XOR AX,DI使目的操作数的某些位不变,某些位置取反XOR CL,0FH逻辑运算类指令TEST 位测试指令逻辑运算类指令NOT 位取非指令移位指令 非循环移位指令 循环移位指令注:注:n 移动一位时由指令直接给出
25、;移动一位时由指令直接给出;n 移动两位及以上,则移位次数由移动两位及以上,则移位次数由CLCL指定。指定。非循环移位指令SHL、 SAL 左移位指令CF0 MSB LSBCF0 MSB LSB非循环移位指令SHR、 SAR 右移位指令CF MSB LSB0CF MSB LSB循环移位指令ROL、ROR 不带进位位的循环移位CF MSB LSBCF MSB LSB循环移位指令RCL、RCR 带进位位的循环移位CF MSB LSBCF MSB LSB逻辑运算类指令移位指令中寄存器 CL 的使用逻辑运算和移位指令总结AND、TEST指令的相同点和不同点位与、或、异或对位值的作用SHL、SAL指令形
26、式不同功能相同SHR、SAR指令形式不同功能不同CL寄存器在移位量中的作用大、小循环移位指令的区别串操作类指令串传送指令 MOVSB, MOVSW指令串比较指令 CMPSB, CMPSW指令串扫描指令 SCASB, SCASW 指令从串取指令 LODSB, LODSW指令存入串指令 STOSB, STOSW指令串操作指令说明用一条指令实现对一串字符或数据的操作;可实现存储器到存储器的数据传送;待操作的数据串称为源串,目的地址对应的数据串称为目的串。串操作指令的特点源串一般存放在数据段,偏移地址由SI指定。允许段重设;目标串必须在附加段,偏移地址由DI指定;指令自动修改地址指针,修改方向由DF决
27、定。 DF=0 DF=1数据块长度值由CX指定;可增加重复前缀以实现自动修改CX内容。地址指针增加;地址指针增加;地址指针减少;地址指针减少;串操作指令的重复前缀无条件重复REP条件重复REPE 相等重复REPZ 为零重复REPNE 不相等重复REPNZ 不为零重复CXCX0 0 ZF=1ZF=1CXCX0 0 ZF=0ZF=0CXCX0 0 重复重复串操作指令流程(以传送操作为例)取源串地址取源串地址取目标串地址取目标串地址设串长度设串长度传送一个字节或字传送一个字节或字修改地址指针修改地址指针修改串长度值修改串长度值传送完否?传送完否?N NY Y设操作方向设操作方向串操作指令串传送 MO
28、VS串比较 CMPS串扫描 SCAS串装入 LODS串送存 STOS串传送指令指令格式: MOVSB MOVSW指令功能: 将源串中 所指的存储单元内容(字或字节)传送到目标串中 ES:DI 所指的存储单元中;然后根据 DF 值自动修改 SI、DI。串传送指令常与无条件重复前缀连用串传送指令例对比用MOV指令和MOVSB指令实现字节串传送 要求:将数据段DS中从 AREA1开始存放的 100 个字节数复制到附加段ES以 AREA2为首址的区域中。DSESARREA2ARREA1用 MOV 指令用 MOVSB 指令用 REP 前缀 控制转移类指令无条件转移指令 JMP 组指令有条件转移指令 JX
29、X 组指令过程调用指令 CALL、RET指令中断指令 INT、IRET指令循环控制指令 LOOP,LOOPZ,LOOPNZ指令控制转移类指令无条件转移指令 无条件转移到目标地址,执行新的指令有条件转移指令 在具备一定条件的情况下转移到目标地址通过修改指令的通过修改指令的偏移地址偏移地址或或段地址及偏移地址段地址及偏移地址实现程序的转移实现程序的转移1. 无条件转移指令格式: JMP OPRD目标地址目标地址与与JMPJMP在同一在同一代码段代码段与与JMPJMP不在同不在同一代码段一代码段无条件段内转移转移的目标地址在当前代码段内,段地址不 改变。即:目标地址是16位偏移地址。指令中直接给出目指令中直接给出目标地址标地址由指令中的寄存器或存储由指令中的寄存器或存储器操作数指出目标地址器操作数指出目标地址段内段内直接转移直接转移段内段内间接转移间接转移段内直接转移转移的目标地址由指令直接给出格式:JMP Label近地址标号近地
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年沪教版选择性必修1生物上册阶段测试试卷
- 创新的小学生字词教学案例分享
- 从食材到菜品家庭菜谱设计的全解析
- 公共设施与社区服务类服饰品牌的联名项目
- 2025中国航材集团总部岗位招聘2人高频重点提升(共500题)附带答案详解
- 2025中国电信股份限公司湾沚分公司招聘10人高频重点提升(共500题)附带答案详解
- 2025中国城市规划设计研究院公开招聘60名高校毕业生高频重点提升(共500题)附带答案详解
- 2025下半年黑龙江省哈尔滨理工大学招聘专职辅导员心理健康教师26人历年高频重点提升(共500题)附带答案详解
- 2025下半年江苏盐城市水利局部分事业单位招聘15人历年高频重点提升(共500题)附带答案详解
- 2025下半年广东江门市开平市招聘事业单位职员拟聘历年高频重点提升(共500题)附带答案详解
- MOOC 数字逻辑电路实验-东南大学 中国大学慕课答案
- 齐鲁名家 谈方论药智慧树知到期末考试答案2024年
- 南京工业大学桥梁工程课程设计
- 2024年华电甘肃大基地煤电分公司招聘笔试参考题库含答案解析
- 2022年度设备部安全生产工作计划5篇
- GB∕T 39757-2021 建筑施工机械与设备 混凝土泵和泵车安全使用规程
- 英国学派多元主义与社会连带主义论争
- 电梯公司安全生产管理制度汇编.doc
- 儿童保健档案表.doc
- 新产品开发流程表
- 保命未来经0001
评论
0/150
提交评论