




已阅读5页,还剩47页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2 3常用指令 GLUT C2013 08 2 2 3 0汇编语言指令书写格式 1 基本书写格式为标号 操作码助记符操作数 操作数 注释标号不是必需的注释也不是必需的 GLUT C2013 08 3 2 标号 在指令操作码助记符前 由下划线 字母 数字构成 由下划线或者字符开始 标号不是必需的标号由 结束 是英文状态下的符号 GLUT C2013 08 4 3 指令助记符 包括操作码助记符和操作数指令操作码助记符与操作数之间需用至少一个空格隔开如果有多个操作数 操作数之间要用 隔开 必须使用纯英文标点符号 GLUT C2013 08 5 4 注释 注释 用于对指令或者程序段的功能进行附加说明 注释由 开始注释不是必需的注释的文字段可以使用任何可显示字符 注释仅用于对程序进行必要的说明 汇编时汇编器不对注释进行处理 必须使用纯英文标点符号 GLUT C2013 08 6 2 3 1数据传送指令 数据传送指令是最简单 最常用的一类指令 它是负责把数据 地址 或立即数传送到寄存器或存储单元中 几个符号约定 dst 目的操作数 src 源操作数DATA 立即数 seg 段寄存器 GLUT C2013 08 7 包括基本数据传输指令 MOV堆栈指令 PUSH和POP数据交换指令 XCHG三种 1通用数据传送指令 GLUT C2013 08 8 1 基本传送指令MOV 指令格式MOVdst src指令功能将源操作数src复制到目的操作数dst中 结果目的操作数的内容等于源操作数的内容 源操作数src的内容不变 dst src对标志位的影响该指令不影响标志位 该指令的源操作数src可以使用各种寻址方式 目的操作数dst可以使用除立即数外的各种寻址方式 依据源操作数 目的操作数的不同 MOV指令有6种具体格式 GLUT C2013 08 9 在通用寄存器之间进行数据传送例如MOVAL BLMOVAX CXMOVSI AXMOVECX EBXMOVESP EBX它将源寄存器的内容传送到目的寄存器 源寄存器内容不变 通用寄存器之间的数据传送 GLUT C2013 08 10 例如MOVDS AXMOVAX ES注意 向段寄存器送数据 源操作数不能用立即数 只能通用数据寄存器或存储器 段寄存器段寄存器是16位的不能向CS传送 通用寄存器与段寄存器之间的数据传送 GLUT C2013 08 11 通用寄存器和存储单元之间的数据传送 例如MOVAL BX MOV 1234H BX存储单元可以使用各种寻址方式存储单元前可以用PTR描述数据的属性 字节 字 双字也可以使用隐含属性 数据属性由寄存器字长决定 例如 MOV 1234H BX 存储的是16位数据MOV BX AL 存储的是字节型数据MOVBL ES 1000H 读取的是字节型数据 GLUT C2013 08 12 MOVWordPTR 1234H BX 存储的是16位数据MOVAL BYTEPTR BX 存储的是字节型数据对于这类有一个数据是寄存器的情况 由于寄存器字长是确定的 存储器属性一定与寄存器一致 故可以不加PTR描述 而使用隐含属性 GLUT C2013 08 13 段寄存器和存储单元之间的数据传送 例如MOVDS 3000H MOV BX SI CS数据传送都是2字节 段寄存是2字节的存储器可以使用各种寻址方式 GLUT C2013 08 14 立即数送通用寄存器 MOVAX 1234H 将立即数1234H AX可以送到所有的通用寄存器注意 段寄存器不是通用寄存器 立即数不能送段寄存器 GLUT C2013 08 15 MOVWORDPTR DI 0800H 表示是一个字型数据 立即数送存储单元 立即数送存储单元指令 应该明确描述数据属性 BYTEPTR 字节型WORDPTR 字数据 2字节 DWORDPTR 双字 4字节 GLUT C2013 08 16 使用MOV指令需要注意是双操作数指令 源操作数和目的操作数的类型必须一致 若立即数没有明确的类型 汇编程序MASM负责将立即数扩展为与目的操作数位数相同 有时MASM不能确定内存操作数的类型 需要用byteptr wordptr dwordptr明确指出是字节 字类型 双字类型 两个操作数不能同时都是存储器操作数 既不能将存储器中的内容直接传送到另一个存储器 而必须经过一次向寄存器传送的过渡 例如MOV BX DI 是错误的 而应该如下处理MOVAL DI MOV BX AL GLUT C2013 08 17 不能用CS寄存器作目的操作数 一般CS IP在执行转移指令时改变 立即数不能传送到段寄存器中 MOVseg DATA 错误段寄存器之间不能直接传送数据立即数不能作为目的操作数 GLUT C2013 08 18 例 错误的MOV指令如下所示 MOVAX BL 类型不匹配MOVDS 1000H 不允许立即数送段寄存器MOV BX SI 不允许内存操作数之间传送MOVES CS 不允许段寄存器之间传送MOVCS AX CS不能作为目的操作数例 判断以下指令使用是否正确 MOV123 BL 错误 目的操作数不能是立即数MOVAL 0 正确 MASM可以判断出 要送字节0MOVBYTEPTR 1234 35H 正确 GLUT C2013 08 19 2 扩展传送指令 1 符号扩展指令格式 MOVSXreg source功能 带符号的源操作数进行符号扩展后 存入目的寄存器 该指令将一个8位数据扩展为16位数据或者将一个16位数据扩展为32位数据 将一个数据的二进制位数进行扩展 需要保持数据的绝对值和符号不变 在使用补码时 只要简单的将符号位填充到扩展的高位二进制位 就可满足该要求 例如 01100100B 0000000001100100B11011110B 1111111111011110B GLUT C2013 08 20 2 零扩展指令 格式 MOVZXreg source功能 将8位无符号数数据扩展为16位无符号数 或者将16位无符号数扩展为32位无符号数 无符号数扩展 直接在高位补0 例如 BL 10010110B执行MOVZXAX BL AX 0000000010010110B如果是执行符号扩展指令MOVSXAX BL AX 1111111110010110B GLUT C2013 08 21 1 格式 XCHGdst src 交换dst与src的内容 2 功能 两个操作数交换位置 指令执行后 源操作数变成目的操作数 目的操作数变成源操作数 不影响标志位 例如 AX 1234H BX 5678H执行XCHGAX BX后 AX 5678H BX 1234H 3 数据交换指令 GLUT C2013 08 22 其中一个操作数可以是存储器型操作数 存储器可以使用各种寻址方式 例如 XCHGBX BP SI 基址变址寻址方式XCHGAX 12345H 直接寻址方式XCHGAX BX 寄存器间接寻址方式XCHGAX 100H SI 变址寻址 GLUT C2013 08 23 3 使用注意事项可以在两个寄存器 或寄存器与存储器之间交换不能与段寄存器进行交换 也不能与立即数进行交换存储器两单元之间不能进行交换 GLUT C2013 08 24 4 堆栈操作指令 1 堆栈概念 堆栈是在存储器中开辟的一片特殊数据存储区 这片存储区的一端固定 叫做栈底 另一端活动 叫做栈顶 且只允许数据从活动端进出 按 先进后出 的原则进行存取操作 8086 8088系统堆栈位于堆栈段 其段基地址由SS指示 SP作为指针指向活动端 SP内容始终指向栈顶所在存储单元 作用 在调用一个过程时 保存返回地址 保存现场 中断服务程序 或子程序中用到某些寄存器或存储单元 但这些寄存器或存储单元在主程序中也用到 并且它的内容不能被子程序或中断服务程序破坏 暂时存放寄存器或存储器单元操作数的内容 GLUT C2013 08 25 注意 80X86的SP总是指向最后一个压入堆栈的字的存放地址 80X86的堆栈是向下增长的 每次压入前 先使SP 2 然后将要压入的数据存放到SS SP指定的存储单元 弹出 先将SS SP指定的存储单元的内容取出到目的操作数 然后SP 2 要使用堆栈 需要先设置SP 每次压入或弹出都以字为单位 GLUT C2013 08 26 格式 PUSHsrc 功能 将src压入堆栈 Src可以是16位的寄存器 段寄存器 字存储单元 操作过程 先修改SP的内容 SP SP 2 使SP指向新的栈顶 然后将scr的低8位存入SP指向的单元 高8位存入 SP 1指向的单元 2 入栈指令 GLUT C2013 08 27 例如 原 SP 104H AX 1234H 执行PUSHAX后 SP 102H 原 SP 104H 修改后 SP 102HAX的高字节12存放在103H 低字节存放在102H GLUT C2013 08 28 如果PUSHREG中的寄存器是EAX EBX 等32位寄存器 则进行32位数据压栈 需要4个字节这时 先修改SP的内容 SP SP 4 使SP指向新的栈顶 然后将scr的最低8位存入SP指向的单元 次低8位存入 SP 1指向的单元 次高字节存入 SP 2指向的单元 最高字节存入 SP 3单元 GLUT C2013 08 29 格式 POPdst 功能 将 SP 指向的存储单元的内容送入dst指向的寄存器或存储单元 dst可以是16位的寄存器 段寄存器 字存储单元 注意 CS不能作为dst dst可以是十六位寄存器 8086 Pentium 或者三十二位寄存器 80386 Pentium 3 出栈指令 GLUT C2013 08 30 对16位出栈操作过程 先将 SP 指向的存储单元的内容送到dst SP 为低字节 SP 1为高字节 然后修改 SP SP 2该过程与入栈相反 32位出栈过程类似 GLUT C2013 08 31 4 全部通用寄存器压栈 十六位通用寄存器全部进栈格式 PUSHA功能 将AX BX CX DX 执行该指令前的SP BP SI DI按顺序压栈 一次压入8个通用寄存器 指令执行后 SP 16 执行前 执行后 GLUT C2013 08 32 32位通用寄存器全部进栈 格式PUSHAD功能 将32位通用寄存器EAX EBX ECX EDX RSP 指令指向前的ESP EBP ESI EDI按序压入堆栈 GLUT C2013 08 33 5 全部通用寄存器出栈 十六位寄存器格式 POPA功能 从堆栈中弹出8个16位数据到DI SI BP SP DX CX BX AX 三十二位寄存器格式 POPAD功能 从堆栈中弹出8个32位数据到EDI ESI EBP ESP EDX ECX EBX EAX GLUT C2013 08 34 6 标志寄存器进栈出栈 PUSHF功能 十六位标志寄存器入栈 POPF功能 十六位标志寄存器出栈 PUSHFD功能 32位标志寄存器入栈 POPFD功能 32位标志寄存器出栈 GLUT C2013 08 35 对于8086 源操作数和目的操作数为16位 可以是通用寄存器 段寄存器 内存操作数 但CS不能作为目的操作数 对于80386 Pentium 可以是16位 也可以是32位遵循先进后出的原则SP总是指向栈顶 压栈时 高字节压入到高地址 低字节压入到低地址 出栈刚好相反 X86的堆栈是向下增长的 7 使用堆栈指令的注意事项 GLUT C2013 08 36 1 格式 XLAT 2 功能 将AL中的内容作为从表首地址的偏移地址 从表中取出一个数据 再送回AL 表首地址存放在BX中 BX AL 为地址的内容取出 AL该指令规定 BX和AL的内容之和作为偏移地址 该指令对于进行代码转换非常有用 只要利用该指令查表 5 换码指令XLAT GLUT C2013 08 37 例如 计算机内部计算的数据 在转换成十进制数据后 要送到七段LED数字显示器显示 七段显示器如下 它有a g七段LED组成 有共阴极和共阳极两种方式 GLUT C2013 08 38 每一段需要有一个控制信号 当有电流流过时发光 假设使用共阴极方式的数码管 则com应该接低电位 a g如果为高电位 对应的段 笔画 亮 通常的接法如图 用一个字节的D0 D6控制a g 假设com接地 则DK 1 对应的笔画亮 GLUT C2013 08 39 这样 要现实的数据与控制LED的控制信号之间就有一种对应关系 GLUT C2013 08 40 这种转换利用XALT指令就比较容易实现 方法是 将控制码做成一个表格存放在内存中 表格中的控制码按0 9的顺序存放 表的开始地址用符号TABLE表示 在需要转换时 将要转换 显示 的十进制数送到寄存器AL中 表头地址送到BX中 则执行XLAT指令就可实现所需要的转换 假设将6转换成对应的显示控制码 GLUT C2013 08 41 TABLEDB3FH 06H 5BH 4FH 66HDB6DH 7DH 07H 7FH 6FHMOVAL 6MOVBX OFFSETTABLE 表首地址XLAT 取TABLE的地址到BX 这样就取出了6的显示控制码 只要送到显示控制电路 就可实现对6的显示 在实际应用中 待显示的信息是检测 或运算结果 GLUT C2013 08 42 还可以将一些特定函数造成表 存放在存储器中 例如正弦函数等 GLUT C2013 08 43 5 地址传送指令将操作数所在存储器的地址送入目标寄存器 1 取有效地址指令 指令格式 LEAdst scrscr 存储单元地址dst 16位的通用寄存器 功能 将源操作数的有效地址EA送目的操作数所指向的寄存器 注意 对于该指令 原操作数一定是存储单元的操作数地址 目的操作数一定是16位的通用寄存器 GLUT C2013 08 44 例如 假设 DS 1000H SI 3000H 14000H 7788H执行指令 LEABX SI 1000H BX 4000H 取地址而执行下一指令 MOVBX SI 1000H BX 7788H 取数据前面还使用了一种取地址的方法MOVBX OFFSETTABLE它与取地址指令LEABX TABLE效果是相同的 GLUT C2013 08 45 LEA指令与MOV指令的区别 LEASI BUFF指令是将标号BUFF的偏移地址送入寄存器中 MOVSI BUFF指令是将标号BUFF所指存储单元的内容送入SI LEASI BUFF 执行后 SI 0002HMOVSI BUFF 执行后 SI 0048H GLUT C2013 08 46 2 LDS指令 格式 LDSdst src 功能 把源操作数src指定的连续4个存储单元中存放的32位地址指针 一个16位的段基址 一个16位的偏移量 传送到两个16位的寄存器中 其中低16位是偏移量 送dst 高二字节是段基址 送DS 例如 DS 3200H 33550h 1234H 33552 5678H执行LDSSI 1550H 后 从32000 1550 33550H开始取4个字节 SI 1234H DS 5678H GLUT C2013 08 47 3 LES指令 格式LESdst src 功能 与LDS指令相似 只是
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年调酒师职业技能大赛酒吧人力资源管理与培训试题试卷
- 2025年统计学期末考试题库:统计学期末考试题库:2025年统计推断与检验在地震统计中的应用试题
- 2025年西式面点师职业资格考试经案例分析模拟试题
- 2025年中学教师资格考试《综合素质》核心考点综合素质题库试卷(含答案)
- 2025年期货从业资格考试法律法规测试卷:期货从业资格考试法律法规模拟试题
- 2025年消防安全知识培训考试题库:消防设施操作及安全检查试题
- 2025年消防安全知识培训考试题库:消防设施操作与防烟排烟系统试题
- 2025年注册会计师考试《会计》金融工具会计处理习题解析
- 2025年安全生产风险分级管控考试题库(隐患排查)试题
- 2025年花艺师职业资格考试花卉艺术与生活方式设计试题
- 电子技术基础说课
- 2024年四川泸州医疗卫生辅助岗位招募笔试真题
- 旅行团队管理办法
- 2025年秋期部编版四年级上册小学语文教学计划+教学进度表
- 2025安宁疗护实践指南(试行)知识测试试题及答案
- 铁路动态设计管理办法
- 2025年甘肃省高考历史试卷真题(含答案解析)
- 泌尿外科围手术期护理
- 2025至2030全球及中国企业领导培训行业产业运行态势及投资规划深度研究报告
- 大学班助培训
- 子公司设立管理制度
评论
0/150
提交评论