汇编第3章(1).ppt_第1页
汇编第3章(1).ppt_第2页
汇编第3章(1).ppt_第3页
汇编第3章(1).ppt_第4页
汇编第3章(1).ppt_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

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

文档简介

3 0预备知识3 180 x86的寻址方式3 2程序占有的空间和时间3 380 x86的指令系统 第3章80 x86的指令系统和寻址方式 3 0预备知识 1 指令 指令系统和程序 2 机器码和机器语言 3 助记符和汇编语言 4 高级语言 5 8086 8088指令格式简介 CPU是一个可以完成一些基本操作的电子器件 用编码表示CPU的一个基本操作 称为一条指令 全部指令集称为指令系统 指令系统反映CPU的基本功能 是硬件设计人员和程序员能见到的机器的主要属性 是硬件构成的计算机系统向外部世界提供的直接界面 1 指令 指令系统和程序 程序是为要解决的问题编写出来的指令集合 一个CPU的指令系统是固定的 不同类型的CPU其指令系统不同 同一系列向上兼容 用户为解决自己的问题所编写的程序称为源程序 2 机器码和机器语言 应用 显示设备简单的单片机家用电器 固化在ROM上的程序等 机器语言是机器码及其使用的一组规则 用机器语言编写的程序称为目标程序 机器语言特点 CPU能直接识别的唯一语言面向机器 可直接被计算机执行执行速度快 占用内存空间小编程效率低 可读性差 可移值性差 用二进制数编码表示的指令 称为机器指令或机器码 例将地址为2000H和2001H的两内存单元内容相加 结果存在地址2002H单元中 程序如下 A0002002060120A20220 数据暂存器 PSW标志寄存器 控制电路 指令译码器 AXBXCXDXSIDIBPSP 指令队列 总线接口控制电路 运算器 地址总线AB 数据总线DB 控制总线CB 地址译码器 IP 地址加法器 DSES SSCS 10100000000000000010000000000010000001100000000100100000101000100000001000100000 A0002002060120A20220 MOVAL 2000H ADDAL 2001H MOV 2002H AL 3 助记符和汇编语言 用助记符等表示的指令称为汇编格式指令例MOVAL 0汇编语言是汇编格式指令 伪指令及其使用的一组规则 用汇编语言编写的程序称汇编语言程序 助记符是有助记忆 并能描述指令功能的符号 通常是指令功能的英文单词的缩写 例数的传送指令用助记符MOV加法用ADD 转移用JMP等 上例将地址为2000H和2001H的两内存单元内容相加 结果存在地址2002H单元中 汇编格式指令与机器指令一一对应用汇编语言编好的程序 必须翻译成机器码表示的程序 计算机才能运行 汇编程序是将汇编语言程序翻译成机器语言的一种系统程序 用机器码编程 A0002002060120A20220 用汇编语言编写的确程序段为 MOVAL var1ADDAL var2MOVvar3 AL 汇编语言和机器语言编写的程序 面向机器 反映机器运行的实际过程 与计算机的硬件结构和指令系统密切相关算法是用计算机的指令 寄存器等描述 要了解CPU的编程结构 寻址方式 指令系统才能设计程序占内存少 执行速度快编写繁琐 调试困难 汇编语言相对于机器语言编写的程序 汇编语言程序 易读易懂 便于修改 4 高级语言高级语言是独立于机器 面向过程或对象的语言 算法是按照人的思维方式给出 比较接近人的自然语言 上例高级语言程序段为 var3 var1 var2由翻译程序将高级语言源程序翻译目标程序 即用机器码表示的程序 机器才能执行 不同类型机器由于指令系统不同 它们的编译程序不同 Fortran Basic C等均是高级语言 使用高级语言编程 效率高 可读性 可移植性强 1 操作码指明CPU要执行什么样的操作 是一条指令必不可少的部分 用助记符表示 5 8086 8088指令格式简介 操作数来源指明操作数所在的地方 有三种来源 操作数在指令中 称立即数操作数如MOVAL 9 操作数在寄存器中 称寄存器操作数指令中给出用符号表示的寄存器名 如MOVAL 9 操作数在内存单元中 称存储器操作数或内存操作数指令中给出该内存单元的地址 用 表示存储器操作数如MOVAL 2000H 操作数个数按指令格式中 操作数个数的多少分为四类 无操作数 指令只有一个操作码 没有操作数单操作数 指令中给出一个操作数双操作数 指令中给出两个操作数 三操作数 指令中给出两个操作数 无操作数 指令只有一个操作码 没有操作数 有两种可能 有些操作不需要操作数 如HLT NOP等处理机控制指令 操作数隐含在指令中 如AAA DAA等调整指令 单操作数 指令中给出一个操作数 有两种可能 有些操作只需要一个操作数如INCAL AL AL 1 有些操作将另一个操作数隐含在指令中如MULBL AX AL BL 三操作数 指令中给出三个操作数 如IMULBX DX 6 BX DX 6目的操作数源操作数立即数操作后的结果通常存放在目的操作数中 一地址指令 INCAXDECCX二地址指令 MOVAX 2000H ADDAH BL三地址指令 IMULBX DX 7 指令 通常 指令的第一个字节或头两个字节为指令的操作码和寻址方式 统称为操作码域 操作码域之后的字节统称为操作数域 5 指令的格式 指令格式操作码操作数例ADDAL 10H 3 180 x86的寻址方式 与数据有关的寻址方式与转移地址有关的寻址方式 3 1 1与数据有关的寻址方式以MOV指令为例 1 立即寻址方式 操作数在指令中给出MOVAL 5MOVAX 3064H 只能用于SRC字段 SRC和DST的字长一致 MOVAH 3064H 适用于给寄存器赋初值 2 寄存器寻址方式 操作数在指定的寄存器中MOVAX BXMOVAL BH 字节寄存器只有AHALBHBLCHCLDHDL SRC和DST的字长一致 MOVAH BX CS不能用MOV指令改变 MOVCS AX 运算速度快 存储器寻址 除代码段 四种成分的组合 EA 基址 变址 比例因子 位移量 位移量 存放在指令中的一个8位 16位或32位的数 通常是个地址基址 基址寄存器中的内容 通常用来指向数组或字符串的首地址变址 变址寄存器中的内容 通常用来指向数组中的某个元素或字符串中的某个字符比例因子 386 值可为1 2 4 8 与变址相乘用于访问元素长度为2 4 8字节的数组 16位 32位寻址时有效地址的四种成分的组成 默认段选择规则 段跨越前缀用于改变系统所指定的默认段选择规则 有三种情况不允许使用段跨越前缀 1 串处理指令的目的串必须用ES2 PUSH指令的目的和POP指令的源必须用SS段3 指令必须存放在CS段中 3 直接寻址方式 有效地址EA由指令直接给出有效地址EA 操作数的偏移地址物理地址PA 16d DS EA例 MOVAX 2000H EA 2000H 假设 DS 3000H 那么 PA 32000H例 操作数地址可由变量 符号地址 表示MOVAH VALUE VALUEDB10 50 30 32000 AHAL 30 50 AX 3050H 3 直接寻址方式 隐含的段为数据段DS 可使用段跨越前缀MOVAX ES 2000H 使用变量时 要注意变量的属性VALUEDB10 MOVAX VALUE MOVAX WORDPTRVALUE 适于处理单个变量 80 x86规定 双操作数指令中 只能有一个操作数使用存储器方式 因此 经常有一个变量要送到寄存器 4 寄存器间接寻址方式 EA在基址寄存器 BX BP 或变址寄存器 SI DI 中BX SI DI DS 物理地址 16d DS BP SS 物理地址 16d SS BP MOVAX BX PA 16d DS BX MOVAX ES BX PA 16d ES BX MOVAX BP PA 16d SS BP BX SI DI 4 寄存器间接寻址方式 不允许使用AX CX DX存放EA MOVAX CX SRC和DST的字长一致MOVDL BX BX 指示一个字节单元MOVDX BX BX 指示一个字单元 适于数组 字符串 表格的处理 5 寄存器相对寻址方式 直接变址寻址 例 MOVAX COUNT SI 或MOVAX COUNT SI 假设 DS 3000H SI 2000H COUNT 3000H那么PA 35000H假设 35000H 1234H 那么 AX 1234H 适于数组 字符串 表格的处理 有效地址 BX BP SI DI 8位16位 位移量 6 基址变址寻址方式 MOVAX BX DI 或MOVAX BX DI MOVAX ES BX SI 适于数组 字符串 表格的处理 必须是一个基址寄存器和一个变址寄存器的组合 MOVAX BX BP MOVAX SI DI 有效地址 BX BP SI DI 7 相对基址变址寻址方式 MOVAX MASK BX SI 或MOVAX MASK BX SI 或MOVAX MASK BX SI 适于堆栈处理和二维数组处理 有效地址 BX BP SI DI 8位16位 位移量 例 编写一段显示字符串STRING的程序DATASEGMENTSTRINGDB HAPPYNEWYEAR 0DH 0AH COUNTDW17DATAENDS 1 直接寻址movdl string movdl H movah 2int21h 显示字符 H movdl string 1 movdl A movah 2int21h 显示字符 A 2 寄存器间接寻址movcx count movcx 17movbx offsetstring string的偏址 bxnext movdl bx movah 2int21h 显示一个字符incbxloopnext 循环指令 3 寄存器相对寻址movcx count movcx 17movsi 0next movdl string si movdl string si movah 2int21h 显示一个字符incsiloopnext 循环指令 4 基址变址寻址movcx count movcx 17movbx offsetstring string的偏址 bxmovsi 0next movdl bx si movdl bx si movah 2int21h 显示一个字符incsiloopnext 循环指令 5 DOS显示字符串功能movdx offsetstring string的偏址 dx leadx stringmovah 9int21h 显示一串字符 比例变址寻址方式EA 比例因子 SI DI 8位16位 位移量 例MOVEAX COUNT ESI 4 适于处理元素大小为2 4 8字节的数组 9 基址比例变址寻址方式EA 基址 比例因子 SI DI 例MOVEECX EAX EDX 8 适于处理元素大小为2 4 8字节的数组 10 相对基址比例变址寻址方式EA 基址 比例因子 SI DI 8位16位 位移量 例MOVEECX TABLE EAX EDX 8 适于处理元素大小为2 4 8字节的二维数组 3 1 2与转移地址有关的寻址方式 用来确定转移指令及CALL指令的转向地址 段内寻址段间寻址 段内直接寻址段内间接寻址 段间直接寻址段间间接寻址 以转移 条件转移 无条件转移 指令为例 段内 转移指令与转向的目标指令在同一代码段中 CS 不变 段间 转移指令与转向的目标指令在两个代码段中 CS 变化 1 段内直接寻址转向的有效地址EA 用指令中提供的转向偏移地址取代IP物理地址 16d CS IP 新例 JMPAGAIN IP 当前MOVBX AX AGAIN 例 JMPNEARPTRNEXT近转移 32768 32767JMPSHORTNEXT短转移 128 127 IP 新 IP 新 2 段内间接寻址转向的有效地址EA是一个寄存器或存储单元的内容 可用除立即数以外的任何一种数据寻址方式得到 物理地址 16d CS EA例 BX 1256H SI 528EHTABLE 20A2H DS 2000H 232F8H 3280H 264E4H 2450HJMPBX IP 1256HJMPTABLE BX JMPWORDPTRTABLE BX IP 3280HJMP BX SI JMPWORDPTR BX SI IP 2450H 3 段间直接寻址用指令中提供的转向段地址和偏移地址取代CS和IP 物理地址 16d CS IP 例 code1segment jmpfarptrnext code1ends code2segment next code2ends 4

温馨提示

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

最新文档

评论

0/150

提交评论