北航微机原理课件_第三章_第1页
北航微机原理课件_第三章_第2页
北航微机原理课件_第三章_第3页
北航微机原理课件_第三章_第4页
北航微机原理课件_第三章_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

1、第三章 8086的寻址方式和指令系统 3.1 8086的寻址方式寻址方式指令:操作码操作数操作码:指出操作的性质操作数:操作的对象指令分类(操作数)指令分类(操作数)单操作数、双操作数和无操作数PUSH AX MOV AX, BX RET双操作数:源操作数,目的操作数寻址方式操作数的存放寄存器存储器或I/O端口地址立即数一个8位或者16位的常数操作数的存取效率寄存器:CPU立即数:指令队列存储器根据偏移地址计算20位物理地址 偏移地址:有效地址(EA)寻址方式寻址方式寻址方式指令中说明操作数所在地址的方法寻址的方法越多,CPU指令功能就越强,灵活性就越大不同的寻址方式根据操作数存在位置不同7种

2、:立即数寻址方式、寄存器寻址方式、直接寻址方式、寄存器间接寻址、寄存器相对寻址、基址变址寻址方式、相对基址变址寻址方式其它 立即数寻址方式立即数寻址方式立即数寻址方式操作数作为指令代码的一部分存放在代码段内指令队列中 举例举例寄存器寻址方式寄存器寻址方式寄存器寻址方式操作数放在寄存器中16位的操作数AX,BX,CX,DX,SI,DI,BP,SP等8位的操作数AL,AH,BL,BH,CL,CH,DL,DH举例举例注意注意源操作数用所有寻址方式指定目的操作数用除立即数之外的所有寻址方式指定源操作数与目的操作数长度一致直接寻址方式直接寻址方式直接寻址方式操作数放在存储器中有效地址(EA)由指令直接给

3、出缺省时和有效地址匹配的段寄存器:DS操作数的物理地址?三种情况三种情况直接寻址方式 段超越前缀 符号地址直接寻址方式直接寻址方式举例举例 段超越前缀 对代码段、堆栈段以及附加段进行直接寻址举例举例符号地址用符号地址代替数值地址举例举例寄存器间接寻址方式寄存器间接寻址方式操作数放在存储器中有效地址由间接寻址寄存器间接给出寄存器EA(BX,BP,SI,DI) 配合使用DS:BX,SI,DI16DS( BX,SI,DI )BP:SS16SSBP 举例(也可使用段超越前缀)举例(也可使用段超越前缀)寄存器相对寻址方式寄存器相对寻址方式操作数放在存储器中EA由间接寻址寄存器的值加上一个相对数(8位或者

4、16位位移量)间接给出寄存器为BX, SI, DI, BP EA(BX,BP,SI,DI)相对数 举例举例基址变址寻址方式基址变址寻址方式操作数放在存储器中EA由一个基址寄存器(BX或BP)的值加上一个变址寄存器(SI或DI)的值间接给出配合BXDSSSBP组合(缺省:4种)段基址可以使用段超越前缀修改 举例举例相对基址变址寻址方式相对基址变址寻址方式操作数放在存储器中有效地址由一个基址寄存器的值加上一个变址寄存器的值再加上一个相对数(8位或者16位位移量)间接给出EA(BX,BP)(SI,DI)相对数组合缺省:4种 段基址可以使用段超越前缀修改 举例举例地址表达式规则 立即数放在 内表示直接

5、地址,如2000HBX,BP,SI,DI在 内BX和BP不能同时出现在一个内,SI和DI也不能同时出现方括号有相加的含义等价写法等价写法BP默认使用SS来提供段基址;其余情况默认使用DS来提供段基址可使用段超越前缀对默认的段寄存器进行修改 其它寻址方式隐含寻址DAA对AL寄存器中的数据进行十进制数调整,仍保存在AL中IO端口寻址IN AL,63H直接端口寻址IN AL,DX间接端口寻址3.2 指令的机器码表示方式 机器码汇编语言源程序用汇编语言编写的程序(主要由指令系统组成的语言)由指令助记符组成的程序机器码汇编语言指令对应的二进制编码(编程时不需要了解指令机器码)计算机不能识别汇编语言程序,

6、需要将汇编语言中的各个指令翻译成计算机能识别的二进制机器语言指令每条指令长度范围?举例MOV AL,32B0H 20H 汇编指令指令书写的格式指令书写的格式程序在存储器中随机放置3.3 8086的指令系统 80868086指令指令六大类 数据传送指令算术运算指令逻辑运算和移位指令字符串处理指令控制转移指令处理器控制指令 数据传送指令 通用数据传送指令MOV传送指令 指令格式 指令功能允许数据传送的途径(图)(图)R之间,之间,R和和M之间之间IP CS立即数立即数间接交换数据(间接交换数据(M之间和段之间和段R之间)之间)传送字传送字/字节字节举例举例汇编语言中对数据段的定义 MOV语句经常对

7、数据段进行数据传送操作举例举例SEGMENT ENDSDB DWX Y 在数据段的偏移地址?MOV AL, X MOV AL, 0例2DUPAREA1,AERA2,ARRAY,STRING的偏移地址?MOV AL, AREA1 MOV AREA2, ALMOV AX, 9堆栈操作指令 PUSH指令格式指令功能指令执行过程注意:源操作数不能是立即数以字为操作单位举例举例立即数如何入栈保存?堆栈操作指令 POP指令格式指令功能指令执行过程注意:目的操作数不能是立即数,CS举例举例交换指令 XCHG指令格式指令功能R之间(不包括段R),R与M之间注意:段寄存器、立即数两个M单元举例举例表转换指令 X

8、LAT指令格式XLATXLAT 转换表指令功能将一个字节从一种代码查找转换成另一种代码在M中建立表格表格的起始地址-BX要查找的偏移地址-ALBX+ALAL 举例举例ASCII码码7段码段码输入输出指令 完成I/O端口与累加器(AL,AX)直接的数据传送 IN OUTIN指令格式(直接端口寻址,间接端口寻址)指令功能举例举例OUT指令格式指令功能举例举例地址目标传送指令 LEA取有效地址指令指令格式指令功能源操作数必须为存储单元目的操作数16位R,且不能为段R举例举例算术运算指令 由CPU的算术逻辑运算单元ALU完成在PSW中存放ALU运算结果特征其中16位PSW中9位有意义,6位受运算结果影

9、响(CF、PF、AF、OF、SF、ZF)加法和减法无符号/有符号二进制整数无符号压缩/非压缩十进制整数加法指令 ADD 加法指令 源Op目的Op目的Op影响6个标志位ADC 带进位的加法指令 源Op目的OpCF目的Op影响6个标志位操作数注意事项操作数注意事项举例举例:如何取出CF值? 4字节数相加 INC 增量指令不影响CF 对内存单元说明对字还是字节进行操作举例举例加法指令 压缩型BCD码加法调整指令DAA 将两个压缩BCD数相加后的结果调整为正确的压缩BCD数AL(隐含寻址)DAA调整过程若做加法后AL中的低半字节9或AF=1,则ALAL+6;然后,若AL中的高半字节9或CF=1, 则A

10、LAL+60H,并使CF=1,否则CF=0举例举例884988H 49H加法指令 非压缩型BCD码加法调整指令 AAA把AL中的运算结果调整为1位非压缩BCD码数如果有进位,则进位进到AH中,并且AF=1 调整过程若AL低4位9或AF1,则:ALAL+6用与操作将AL高4位清0AF置1,CF置1,AHAH+1否则,AL寄存器的高4位清0 举例9 BCD 5 BCD 十进制加法 9H + 5H AH=0减法指令SUB 减法指令 目的Op目的Op源Op举例举例SBB 带借位的减法指令 目的Op目的Op源OpCF举例举例DEC 减量指令不影响CF举例举例 NEG 取负指令目的Op0目的Op举例举例

11、减法指令CMP 比较指令目的Op源Op -影响PSW举例举例 十进制调整指令DAS(压缩)AAS(非压缩)AL逻辑运算指令NOT目的操作数不能为立即数举例举例对标志位无影响AND指令格式举例举例TEST逻辑与操作,修改标志位,不影响目的操作数举例举例XOR(相同为0,不同为1)清0操作与0异或保持不变,与1异或求反操作 简单加密方法逻辑运算指令双操作数指令源操作数可以是寄存器、存储单元、或者是立即数,目的操作数不能是立即数,两个操作数不能都是存储器CF和和OF清清0,源操作数不变,ZF、SF、PF反映操作结果反映操作结果单操作数指令(NOT)目的操作数不能是立即数如果操作数是存储器,则必须标明

12、字还是字节对标志位无影响对标志位无影响算术逻辑移位指令SHL/SAL指令格式:移动多于1位,计数值放入CL最低有效位补0,最高有效位进CF举例:举例:左移一位相当于乘2算术逻辑移位指令SHR最低位进入CF,最高位补0无符号数:右移1位相当于除2(余数丢掉)举例举例算术逻辑移位指令SAR最低位进入CF,最高位保持不变保持不变有符号数:右移1位相当于除2举例举例循环移位指令 ROL/ROR:不带CF的循环移位,指令格式(CL)RCL/RCR:带CF的循环移位,指令格式(CL)举例举例字符串处理字符串一系列存放在存储器中的字或字节数据(不一定是ASCII码)长度:最大64KB字符串操作指令隐含约定源

13、串:DS SI目的串:ES DISI、DI自动修改DF:控制处理方向DF0 递增 字节操作增1 字操作增2 CLDDF1 递减 字节操作减1 字操作减2 STD与重复指令REP配合使用次数-CXREP:无条件重复(CX0则重复) REPE/REPZ:相等/结果为0则重复(ZF=1和CX0则重复) REPNE/REPNZ:不相等/结果非0则重复(ZF=0和CX0则重复) 字符串操作指令MOVSB/MOVSWDS:SI-ES:DI SI=SI+(-)1(2) DI=DI+(-)1(2) 举例举例CMPSB/CMPSWDS:SI-ES:DI-影响标志位 SI=SI+(-)1(2) DI=DI+(-)

14、1(2) 举例举例LODSB/ LODSWDS:SI-AL,AX SI=SI+(-)1(2) STOSB / STOSWAL,AX -ES:DI DI=DI+(-)1(2)应用:内存某区域的初始化 REP STOSB SCASB/SCASWAL,AX - ES:DI-影响标志位 DI=DI+(-)1(2) 串操作指令使用步骤步骤根据需要选择合适串操作指令源串 DS:SI目的串 ES:DI DF方向CLDSTD执行次数对字节/字进行操作举例把X起始的成绩列表中的50个成绩(字节)每项加上5分用LODSB取出用STOSB存储举例DS中起始地址为BLOCK的数据块数目为COUNT个字节,将正数送ES

15、中PLUS_DATA假设DS,ES中已分别是BLOCK和PLUS_DATA的段基址BLOCKPLUS_DATA正数源(DS:SI)目的(ES:DI)START: MOV SI, OFFSET BLOCK;源字符串 MOV DI, OFFSET PLUS_DATA;目的字符串 MOV CX, COUNT CLDGOON: LODSB BLOCK TEST AL, 80H JNZAGAIN;符号位为1,为负数 STOSB;为正数,则送至PLUS_DATAAGAIN: DEC CX JNZGOON举例DS中起始地址为BLOCK的数据块数目为COUNT个字节,将正数送ES中PLUS_DATA,负数送E

16、S中MINUS_DATA (假设DS,ES已有值)BLOCKPLUS_DATAMINUS_DATA正数负数源(DS:SI)目的(ES:DI)目的(ES:DI) BXSTART: MOVSI, OFFSET BLOCK;源字符串 MOV DI, OFFSET PLUS_DATA;目的字符串 MOV BX, OFFSET MINUS_DATA MOV CX, COUNT CLDGOON: LODS BLOCK TESTAL, 80H JNZMINUS;符号位为1,负数送MINUS_DATA STOSB JMPAGAINMINUS: XCHG BX, DI STOSB;负数送MINUS_DATA X

17、CHG BX,DIAGAIN: DECCX JNZGOON举例设字符串起始地址STRING的段基址为ES,偏移地址为0,长度为COUNT。在字符串中寻找字符A,并搜索次数放在BX中。没有找到A则BX为0。 MOVDI, OFFSET STRING;取偏移地址MOVCX, COUNTMOVAL, ACLDREPNE SCASB;CX!=0且不相等则继续JZFIND;相等则转到FINDMOVDI, 0FIND: MOVBX, DI;DI为已比较过的次数控制转移指令 无条件转移指令JMP 按照转移地址的远近可分为:段内转移,或近(NEAR)转移转移的目的地址和JMP指令在同一代码段内,转移仅仅改变I

18、P内容而不改变CS内容段间转移,或远(FAR)转移转移的目的地址和JMP指令在不同的代码段,转移改变IP和CS内容按照提供地址的方式,又可分:直接转移,在指令代码中直接给出转移的目的地址间接转移,目的地址包含在某个16位寄存器或存储单元中4种组合段内直接转移、段内间接转移、段间直接转移、段间间接转移 无条件转移指令JMP段内直接转移指令指令格式指令格式:加地址标号短转移短转移,程序转向的有效地址等于当前IP内容加上8位位移量(有符号数的补码,-127128),为2字节指令近转移近转移,程序转向的有效地址等于当前IP内容加上16位位移量(有符号数的补码,-3276832767),为3字节指令向低

19、地址转移,为负数的补码;向高地址转移,为正数的补码编程时可省略SHORT以及NEAR PTR说明符举例举例 无条件转移指令JMP段内间接转移指令16位寄存器或字寄存器单元,存放偏移地址举例举例 段间直接转移指令加地址标号标号的偏移地址送到IP,标号所在段的段地址送到CS 举例举例段间间接转移指令加双字存储单元:2个字节偏移地址,2个字节段地址 举例举例无条件转移指令的类型和方式 总结类型 方式 寻址目标 指令举例 立即短转移(8 位) JMP SHORT PROG_S 直接 立即近转移(16 位) JMP NEAR PTR PROG_N 寄存器(16 位) JMP BX 段内 转移 间接 存储

20、器(16 位) JMP WORD PTR 5BX 直接 立即转移(32 位) JMP FAR PTR PROG_F 段间 转移 间接 存储器(32 位) JMP DWORD PTR DI 过程调用和返回指令 过程/子程序经常使用的功能,在编程序时写成独立的模块,供其它程序调用 以语句PROC开头,以语句 RET ENDP结束过程(子程序)的调用使用CALL指令,过程执行结束后使用RET语句返回到调用点 指令格式CALL 过程名(过程调用)RET(返回指令)举例举例过程调用和返回指令近调用和远调用近调用和远调用近调用:调用指令CALL和所调用的过程在同一代码段远调用:在不同代码段中CALL指令的执行过程返回地址入栈:CALL指令之后的指令地址 近调用:IP远调用:CS IP转到子程序地址RET指令的执行过程返回地址出栈近调用:IP远调用:IP CS返回过程调用和返回指令举例段内直接加地址标号:3字节指令字节指令举例举例:CALL PROG_N子程序入口地址?返回地址?子程序入口地址?返回地址?段内间接R或存储单元:偏移地址举例:举例:CALL WORD PTR BX+SI 子程序入口地址?子程序入口地址?段间直接加地址标号:5字节指令(字节指令(给出目的地址的偏移地址和段地址)

温馨提示

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

评论

0/150

提交评论