第十讲 汇编语言1第8章_第1页
第十讲 汇编语言1第8章_第2页
第十讲 汇编语言1第8章_第3页
第十讲 汇编语言1第8章_第4页
第十讲 汇编语言1第8章_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

第八章汇编语言 1 重点掌握 熟练掌握DB DW OFFSET PTR SEGMENT ENDS END的使用 掌握汇编语言的源程序结构及上机过程 第一讲汇编语言基础知识 2 3 汇编语言源程序 1 机器语言 二进制数形式的指令和数据 B064是什么意思 这就是机器语言 既不直观 又不易理解和记忆 MOVAL 64H 很容易记忆理解 这就是助记符 2 助记符 用便于记忆的英语单词表示的指令操作码 它反映了指令的功能和主要特征 便于人们理解和记忆 4 操作数可能放在存储器中 这就涉及操作数的地址 程序中遇到转移指令或调用指令 也需要知道转移地址 若采用具体地址就很不方便 一旦有错 改动也很麻烦 于是人们采用标号或符号来代替地址 例 LP1 MOVAX VAR LOOPLP1 3 汇编语言 指令助记符 符号地址 标号 伪指令等语言元素的集合以及这些元素使用的规则 用汇编语言编写的程序叫汇编语言源程序 指令除了操作码以外 还有一个操作数问题 5 高级语言与汇编语言比较 高级语言 语句变量说明 定义inty a 25 b 43 c 76 给变量赋值y 2 a b c 汇编语言 指令分配寄存器分配存储单元数据传递 汇编程序结构数据段堆栈段代码段 6 设置数据段DATASEGMENTADB25 数据ABDB43 数据BCDB76 数据CYDB 存放结果DATAENDS 设置堆栈段STACK1SEGMENTPARASTACKDW20HDUP 0 STACK1ENDS 示例 y 2 a b c 例题 7 设置代码段COSEGSEGMENTASSUMECS COSEG DS DATA SS STACK1START MOVAX DATA 装填段寄存器DSMOVDS AXMOVAL A 取数据AADDAL B 计算 A B SALAL 1 计算2 A B SUBAL C 计算2 A B CMOVY AL 存结果MOVAH 4CH 结束用户程序 返回操作系统INT21HCOSEGENDSENDSTART 示例 y 2 a b c 8 汇编语言 是汇编格式指令 伪指令的集合及其表示 使用这些指令的一组规则 机器语言 用二进制编码的机器指令的集合及一组使用规则 它是CPU能直接识别的唯一语言 MOVDS AX 汇编语言8ED8 机器语言 目标代码 9 汇编语言与目标代码的对应 10 与机器语言相关效率高编写源程序繁琐调试困难 汇编语言特点 11 对软件的执行时间或存储容量有较高要求的场合 如操作系统的内核 工业控制领域 实时系统等 在大型软件中某些影响系统性能的瓶颈程序或者频繁使用的子程序可以采用汇编语言编程 与硬件资源密切相关的软件程序 如设备驱动程序 没有合适的高级语言去开发的程序 汇编语言的用途 12 汇编程序 翻译程序 源程序的编译程序 汇编程序 汇编语言源程序 机器语言目标程序 汇编源程序需翻译成机器语言 变成可执行文件 机器才能执行 这个翻译过程叫汇编 高级语言中称该过程为 解释 或 编译 执行翻译的程序称为 汇编程序 13 汇编语言的上机过程 1 8086汇编语言的工作环境 1 硬件环境 IntelCPU或与其兼容CPU 2 软件环境 操作系统 DOS2 0以上 编辑程序 EDIT COM 汇编程序 MASM EXE 连接程序 LINK EXE 调试程序 DEBUG COM 14 汇编语言程序设计与执行过程 输入汇编语言源程序EDIT NOTEPAD等源文件 ASM汇编 编译 MASM ASM等目标文件 OBJ链接LINK等可执行文件 EXE调试DEBUG TD等最终正确的程序 EXE Windows7 64位 采用DOSBox模拟DOS的软件运行MASM和LINK工具 15 汇编语言语句种类 指令语句 又叫可执行语句 在汇编时产生一个目标代码 对应机器的一种操作 伪指令语句 又叫命令语句 用于指示汇编程序如何汇编源程序 除了数据定义语句之外 没有目标代码与之对应 宏指令语句 由用户自定义的指令 指令的扩展 16 格式 名字操作符操作数 注释指令语句 标号 助记符 操作数 操作数 注释 伪指令语句 名字 定义符 参数 参数 注释 汇编语言语句格式 17 名字 命名规则 可以用 数字和英文字符 名字的第一个字符不能是数字 名字的长度不受限制 但只有前31个字符有效 不允许用保留字作名字 指令 伪指令 寄存器名 汇编语言语句格式 18 MASM宏汇编保留字 19 MASM宏汇编保留字 20 指令或伪指令中的操作数可以是 常量 数值 字符 符号常量 数值常量可以是二 八 十 十六进制 但需注意书写规则 表达式表达式有算术表达式 关系表达式 逻辑表达式 21 伪指令 伪指令是向汇编程序提供诸如 哪个段是数据段 哪个段是代码段 程序何时结束 数据据段中的内存变量等相关信息 1 数据定义伪指令 2 段定义伪指令 3 假定伪指令ASSUME 4 程序结束伪指令 5 其它 22 数据定义伪指令 常用的数据定义伪指令有DB DW DD 格式 变量名 数据定义伪指令表达式 功能 在存储区定义内存变量 变量类型由数据定义伪指令确定 变量初值由表达式给定 DB 表示为字节型变量DW 表示为字型变量 16位 DD 表示为双字型变量 32位 23 例 SUMDB12 8A1DW1234HSTRDB AB 该定义在内存的结果示意如下 例题 24 说明 1 这里的SUM A1 STR其实质为符号地址 不同于高级语言的内存变量 也就是说不能按内存变量一样去访问对应的数据 2 定义的16位数在内存存放时 其形式为低8位在低地址 高8位在高地址 3 定义的字符数据按其ASCII码存放 25 4 若操作数是 表示此时只分配单元 不定义初值 例 A2DB0 0其存储单元分配如下图 例题 26 5 操作数用复制操作符DUP 表示操作数重复若干次 例 BUF1DB2DUP 2 3 4 等价于BUF1DB2 3 4 2 3 4BUF2DB8DUP 等价于BUF2DB 例题 27 段定义伪指令SEGMENT ENDS 格式如下 segmentnameSEGMENTsegmentnameENDS段名段名是为该段起的名字 用来指出汇编程序为该段分配的存储区起始位置 28 SEGMENT语句后可以带有可选参数 用以规定逻辑段的其他一些属性 它的格式为 1 定位类型说明如何确定逻辑段的边界 有4种 PARA Paragraph 逻辑段从一个节 16个字节 的边界开始 即段的起始地址应能被16整除 或这说段起始物理地址应为 0H 默认类型BYTE 逻辑段从字节边界开始 即段可以从任何地址开始 WORD 逻辑段从字边界开始 即段的起始地址必须是偶数 PAGE 逻辑段从页边界开始 256字节称为一页 故段的起始物理地址应为 00H 也即 PAGE 页边界 能被256除 PARA 段边界 能被16除 WORD 字边界 能被2除 BYTE 字节边界 段名SEGMENT 定位类型 组合类型 类别 29 2 组合类型说明不同模块中同名段的组合方式 共6种 PUBLIC 所有此类型的同名段组合成一个逻辑段 公用一个段地址 运行时装入同一个物理段中 COMMON 所有此类型的同名段具有相同的起始地址 覆盖 共享相同的存储区域 AT 按绝对地址定位 段地址就是表达式的值 STACK 专用于说明堆栈段 组合方式同PUBLICNONE 不组合MEMORY 置于地址最高处 多个时取第一个 其余作为COMMON 30 假定伪指令ASSUME 格式 ASSUME段寄存器 段名 段寄存器 段名 功能 建立段寄存器与段之间的对应关系 该伪指令一般出现在代码段中 31 例 DATASEGMENTADB1 2 3DATAENDSCODESEGMENTASSUMEDS DATA CS CODESTART CODEENDSENDSTART 例题 32 ASSUME伪指令说明 在代码段中 还必须明确段和段寄存器的关系 这由ASSUME语句来指定 如ASSUMECS CODE DS DATA ES DATA SS STACK语句中的CODE和DATA为段名 这个语句说明 1 CS将指向名字为CODE的代码段 2 DS和ES将指向名字为DATA的数据段 3 SS将指向名字为STACK的堆栈段 33 注意 ASSUME伪指令只是告知汇编程序有关段寄存器与段的关系 并没有给段寄存器赋予实际的初值 故下面的语句MOVAX DATAMOVDS AXMOVES AXMOVAX STACKMOVSS AX将段基址装入段寄存器 如果程序中用到堆栈段 则SS也需装入实际的初值 代码段基地址不需要程序员装入CS寄存器 而由操作系统 OS 负责装入 34 源程序结束伪指令 格式 END 表达式 功能 该语句标志整个程序的结束 是源程序的最后一条语句 35 其它伪指令 等值伪指令 EQU格式 符号名EQU表达式功能 给符号名定义一个值 例 D1EQU25OFFSET 标号 计算出标号的段内偏移地址例 MOVSI OFFSETSTR 36 PTR格式 类型PTR表达式功能 给表达式指定一个类型 例 WORDPTR5将5指定为字类型 问 MOV BX 5指令能通过汇编吗 不能 改成MOV BX BYTEPTR5便可 例题 37 汇编语言源程序的结构 汇编语言源程序通常由一个或几个程序模块组成 每个模块一般由3个 或4个 逻辑段组成 数据段 存放数据 变量 附加数据段 存放数据 变量 堆栈段 堆栈区域代码段 存放程序指令 38 堆栈段 数据段 代码段 真指令 一个基本的汇编语言程序框架如下 stackSEGMENTPARA stack DB100DUP stack stackENDSdataSEGMENTdataENDScodeSEGMENTASSUMECS code DS data ES data SS stackstart MOVAX dataMOVDS AXMOVES AXMOVAL 4CHINT21HcodeENDSENDstart 39 0000 0 3FF 环境与代码运行 FFFF 0 堆栈段 数据段 代码段 CS IP DS SS SP 系统起始运行程序 中断向量区 系统专用 栈底 最多4个活动段 分段结构 ES 40 说明 并不是所有的程序都需要定义4个段 代码段 数据段 堆栈段 附加段 一般来说 代码段的定义是必须的 其他段是否定义根据具体问题而定 41 1 常数数值常数 二 八 十 十六进制B O D H字符串常数 1 在指令语句的原操作数中作立即数 MOVAL 0A9HMOVBX AB 2 存储器操作数的寻址方式中作位移量 MOVAL DS 340H 3 在数据定义语句中 对存储单元预置初值 DB12H 34H 汇编语言数据与运算符 42 2 变量 1 用数据定义语句定义并预置初值后 变量代表存储单元的数据 并作为该单元的符号地址 例如在某数据段已定义一变量 DATA VARDB40HDUP 几种含有变量名的地址表达式为 直接寻址 DATA VAR 08H基址变址寻址 DATA VAR BX DI 地址表达式的值 存放操作数的存储单元偏移量 地址表达式的类型 同变量名的类型 汇编语言数据与运算符 2 在用DW或DD的数据定义语句中 若操作数字段引用了变量名 则在分配的存储单元中 预置被引用的变量名的地址部分 偏移量 段基值NUM1DB10HDUP NUM2DW10HDUP ARRAYDB10HDUP ABCD ADR1DWARRAYADR2DDARRAY 汇编语言数据与运算符 3 标号 一条指令的符号地址 段属性定义指令所在段偏移属性定义指令偏移量类型属性定义段内引用还是段间NEAR 段内转移 作为标号所在段的转移 调用指令的目标地址 FAR 段间转移 作为其他段的转移 调用指令的目标地址 类型属性设置 1 隐含方式 NEXT MOVAX 3000 汇编语言数据与运算符 2 用LABEL伪指令设置类型属性 标号伪指令LABEL格式 名字LABEL类型与指令语句配合使用 名字 新标号 LABEL类型 NEAR FAR SUB1 FARLABELFARSUB1 MOVAX 1234H与数据定义语句配合使用 名字 新变量名 LABEL类型 DB DW DD DATA BYTELABELBYTEDATA WORDDW20HDUP 563H 汇编语言数据与运算符 指向同一内存空间 别名 1 算术运算符 4 运算符 只有减法运算可以用同一段内的两个变量相减 汇编语言数据与运算符 NUM 15 5 NUM 75NUM NUM 8 NUM 9NUM NUMMOD5 NUM 4NUM NUM 6 NUM 10NUM NUM NUM 10ORG30H 下面定义数据的起始偏移是30HDA1DB ABCDEFGH DA2DB IBMPCCOMPUTER COUNTEQUDA2 DA1 38H 30H 8DA3EQUDA2 4 例题 NUM 11011011BDATA1DWNUMSHL3 NUMSHR2 MOVAX NUMSHL3MOVBX NUMSHR2MOVCX NUMSHL8MOVCX NUMSHL16MOVDX NUMSHR8MOVDX NUMSHR16 DATA1DW6D8H 36H MOVAX 011011011000BMOVBX 00110110BMOVCX 1101101100000000BMOVCX 0MOVDX 0MOVDX 0 例题 移位运算符和移位指令区别移位运算

温馨提示

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

评论

0/150

提交评论