第4章+伪指令及汇编语言程序结构.ppt_第1页
第4章+伪指令及汇编语言程序结构.ppt_第2页
第4章+伪指令及汇编语言程序结构.ppt_第3页
第4章+伪指令及汇编语言程序结构.ppt_第4页
第4章+伪指令及汇编语言程序结构.ppt_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

第4章伪指令及汇编语言程序结构 重点掌握 汇编语言和汇编程序源程序的格式及程序分段参数的表达 变量的定义伪指令的格式 功能及应用汇编语言源程序的建立 汇编 连接 调试及运行 4 1汇编语言和汇编程序 汇编语言的特点 汇编语言是一种以处理器指令系统为基础的低级程序设计语言 它采用助记符表达指令操作码 采用标识符号表示指令操作数 利用汇编语言编写程序的主要优点是可以直接 有效地控制计算机硬件 因而容易创建代码序列短小 运行快速的可执行程序 在有些应用领域 汇编语言的作用是不容置疑和无可替代的 汇编程序设计的过程是与其他高级语言程序设计大致相同 汇编程序功能 汇编程序的主要功能 检查源程序 给出出错信息 产生目标文件 obj 和列表文件 lst 展开宏指令 汇编语言程序的处理过程 开发步骤 编辑程序 ASM文件 汇编程序 OBJ文件 连接程序 EXE文件 Edit等 MASM LINK 运行与调试 1 编辑 形成 ASM文件 EDIT 2 汇编 编译 将 ASM文件翻译成二进制代码的目标文件 即将助记符语言翻译成机器指令 形成 OBJ文件 MASM 3 连接 OBJ虽是二进制文件 但不能直接上机运行 必须经过连接 把目标文件与库文件等其他连接在一起 形成可执行文件 EXE LINK 4 运行 可在DOS提示符下键入文件名运行 5 调试 在DEBUG下进行动态调试 检查错误等 4 2汇编语言语句格式 汇编语言程序由三种基本语句组成 指令语句 伪指令语句 宏指令语句 指令语句格式 完整的汇编语言程序格式 大于50送数 小于等于则省略my datasegmentagain Moval si array1db05 a2H 00 10H 85HIncsinequ5Cmpal 50array2dbndup Jbenextmy dataendsMov di almy codesegmentIncdiassumecs my codenext deccxassumeds my datajnzagainbegin movax my datamovah 4chmovds axint21hLeasi array1my codeendsLeadi array2endbeginMovcx n 汇编语言源程序格式 完整的汇编语言源程序由段组成 一个汇编语言源程序可以包含若干个代码段 数据段 附加段或堆栈段 段与段之间的顺序可随意排列 需独立运行的程序必须包含一个代码段 并指示程序执行的起始点 一个程序只有一个起始点 所有的可执行性语句必须位于某一个代码段内 说明性语句可根据需要位于任一段内 通常 程序还需要一个堆栈段 源程序由语句序列构成 汇编语言的语句格式 执行性语句 执行性语句用于表达处理器指令 也称为硬指令 汇编后对应一条指令代码 由处理器指令组成的代码序列是程序设计的主体 标号 硬指令助记符操作数 操作数 注释 说明性语句 说明性语句用于表达伪指令 指示源程序如何汇编 变量怎样定义 过程怎么设置等 名字伪指令助记符参数 参数 注释 汇编语言程序格式 标号指令寄存器说明程序或语句变量伪指令标号的功能宏指令变量常数表达式 源程序的每条语句可表示为 名字 操作项操作数 注释 标号 变量 段值 偏移量 类型三种属性表达式 数字表达式地址表达式 一 名字项 每条语句中的名字项可以是标号 或伪指令定义的对象 例 START PUSHDSXORAX AXPUSHAXMESS1DB NO 标号 用来表示一条指令的地址 变量 用来表示数据的地址 不论是标号还是伪指令定义的对象 都可称标识符 标识符的组成 标识符的规定 不能以数字开头 标识符的长度 31 专用字符 不能单独构成标识符 一般情况下 名字项可以是标号或变量 他们用来表示本语句的符号地址 是可有可无的 只有当需要用符号地址来访问该语句时才出现 1 标号标号实际上是用符号表示的地址 标号在代码段中定义 后跟 号 是一条指令目标代码所在存储单元的符号地址 表明该指令代码在存储器中的位置 可作为转移指令或CALL指令的操作数 以确定程序转移的目标地址 标号有三种属性 段属性 SEG 表明该条指令目标代码在哪个逻辑段中 即提供标号所在段的基址 16位 偏移量属性 OFFSET 表明标号所在段的偏移地址 即标号所在单元与首地址之间的字节距离 16位 类型属性 距离属性 表明标号可作为段内或段间转移的特性 NEAR 近距离 段内转移 只修改IP值 不修改CS值 类型值为 1 0FFH FAR 远距离 段间转移 修改CS IP值 类型值为 2 0FEH 2 变量变量是除代码段以外的其他段中的定义 后面不跟 号 一般指存放在存储单元中的数据 在程序运行过程中 可随时修改 常以变量名的形式出现在程序中 可作为是存放数据的存储单元的地址 变量的定义与预置定义变量就是给变量分配存储单元 并且对存储单元赋予一个符号名 变量名 同时对这些单元预置初值 变量的属性 段属性 SEG 表明变量在哪个逻辑段中 即变量单元所在段的基址 16位 偏移量属性 OFFSET 表明变量所在段的偏移地址 16位 类型属性 TYPE 表明变量所占存储单元的字节数 类型 字节 DB 字 DW 双字 DD 属性值 124 二 操作项可以是指令 伪指令或宏指令的助记符 三 操作数项 操作数项由一个或多个表达式组成 中间用逗号隔开 对于指令 一般给出操作数的地址 对于伪指令或宏指令 则给出所要求的参数 操作数项可以是常数 寄存器 标号 变量或由表达式组成 表达式由操作数和运算符组成 表达式操作运算符 1 算术操作符 mod MOVDX BLOCK 6 1 2 ARRAYDW1 2 3 4 5 6 7ARYENDDW MOVCX ARYEND ARRAY 2 ADDAX BLOCK 2 符号地址 常数有意义 时意义不明确MOVAX BX 1 MOVCX 7 OPR1EQU25OPR2EQU7ANDAX OPR1ANDOPR2 2 逻辑和移位操作符 AND OR XOR NOTSHL SHR ANDAX 1 INAL PORT VALOUTPORT VALAND0FEH AL MOVAX 0FFFFHSHL2 MOVAX 0FFFCH 3 关系操作符 EQ NE LT LE GT GE 计算结果为逻辑值 真0FFFFH假0000H X Y 若 128 真 汇编结果 MOVFID 1若 128 假 汇编结果 MOVFID 0 MOVFID OFFSETY OFFSETX LE128 4 数值回送操作符 OFFSET SEG TYPE LENGTH SIZE OFFSET SEG变量 标号功能 回送变量或标号的偏址 段址 TYPE变量 标号 常数DBDWDDDFDQDTNEARFAR常数1246810 1 20 LENGTH变量功能 回送由DUP定义的变量的单元数 其它情况回送1 SIZE变量功能 LENGTH TYPE SIZE TYPE LENGTH ARRAYDW100DUP TABLEDB ABCD ADDSI TYPEARRAY ADDSI 2ADDSI TYPETABLE ADDSI 1MOVCX LENGTHARRAY MOVCX 100MOVCX LENGTHTABLE MOVCX 1MOVCX SIZEARRAY MOVCX 200MOVCX SIZETABLE MOVCX 1 5 属性操作符 PTR 段操作符 SHORT THIS HIGH LOW HIGHWORD LOWWORD 类型PTR表达式例 MOVWORDPTR BX 5段操作符例 MOVES BX ALSHORT标号例 JMPSHORTNEXT THIS类型例 TAEQUTHISBYTENEXTEQUTHISFAR CONSEQU1234HMOVAH HIGHCONSMOVAL LOWCONS 操作符的优先级 1 LENGTHSIZEWIDTHMASK2PTROFFSETSEGTPYETHIS 3HIGELOW4 MODSHLSHR5 6EQNEGTLTGELE7NOT8AND9ORXOR10SHORT 建议采用圆括号 显式表达 它可以极大地提高程序的可阅读性 4 3伪指令语句 何谓伪指令 并非由CPU执行的指令 而是在汇编程序对源程序进行汇编期间 由汇编程序执行的操作 主要是为汇编程序服务的 为其提供一些必要的格式 信息等 可以处理器选择 存储模式定义 数据定义 存储器分配 指示程序开始结束等功能 指令和伪指令采用易于记忆的符合表达 这就是助记符 伪指令语句格式 处理器选择伪操作 段定义伪操作 程序开始和结束伪操作 数据定义及存储器分配伪操作 表达式赋值伪操作 地址计数器与对准伪操作 基数控制伪操作 标号 名字与标识符 标号是反映硬指令位置 逻辑地址 和属性的标识符 后跟一个冒号分隔 名字是反映伪指令位置 逻辑地址 和属性的标识符 后跟空格或制表符分隔 没有冒号 标识符 Identifier 一般最多由31个字母 数字及规定的特殊符号 如 组成 不能以数字开头 默认情况下 汇编程序不区别标识符中的字母大小写 一个源程序中 每个标识符的定义是唯一的 还不能是汇编语言采用的保留字 保留字 保留字 ReservedWord 是汇编程序已经利用的标识符 也称为关键字 主要有 硬指令助记符 例如 MOV ADD伪指令助记符 例如 DB DW操作符 例如 OFFSET PTR寄存器名 例如 AX CS预定义符号 例如 data 汇编语言大小写不敏感 操作数和参数 处理器指令的操作数可以是立即数 寄存器和存储单元 伪指令的参数可以是常数 变量名 表达式等 可以有多个 参数之间用逗号分隔 注释 语句中由分号 开始的部分为注释内容 用以增加源程序的可读性 必要时 一个语句行也可以由分号开始作为阶段性注释 汇编程序在翻译源程序时将跳过该部分 不对它们做任何处理 分隔符 语句的4个组成部分要用分隔符分开 标号后用冒号 注释前用分号 操作数之间和参数之间使用逗号分隔 其他部分通常采用空格或制表符 多个空格和制表符的作用与一个相同 MASM支持续行符 一 数据定义及存储器分配伪操作指令 1 功能 定义变量 变量主要用来定义存储器中的数据 在程序运行中 变量是可以被修改的运算对象 2 格式 变量名 DB DW DD 注释 单元地址 数据定义伪指令 数据表达式 变量定义伪指令最常使用 定义数据的操作符有 字节定义 DB字定义 DW双字定义 DD四字定义 DQ十字节定义 DT重复定义 mDUP n 重复m次个数据n 3 含义在定义变量后 就为变量分配若干个存储单元 并由变量名作为单元起始地址 并把后跟数据存入指定单元即可 字节变量的定义DB DefineByte DB伪指令用于分配一个或多个字节单元 并可以将它们初始化为指定值初值表中每个数据一定是字节量 存放一个8位数据 可以是0 255的无符号数或是 128 127带符号数也可以是字符串常数 实例 字节变量定义实例 数据段Xdb a 5db2dup 100 Ydb ABC 字变量的定义DW DefineWord DW伪指令用于分配一个或多个字单元 并可以将它们初始化为指定值初值表中每个数据是字量 一个字单元可用于存放任何16位数据 一个段地址一个偏移地址两个字符0 65535之间的无符号数 32768 32767之间的带符号数 字变量定义实例 数据段countdw8000h AB maxintequ64hnumberdwmaxintarraydwmaxintdup 0 双字变量的定义DD DefineDoubleword DD伪指令用于分配一个或多个双字单元 并可以将它们初始化为指定值初值表中每个数据是一个32位的双字量 可以是有符号或无符号的32位整数也可以用来表达16位段地址 高位字 和16位的偏移地址 低位字 的远指针varddDD0 12345678hFarpointDD00400078h 变量的应用 变量具有存储单元的逻辑地址 程序代码中通过变量名引用其指向的首个数据 通过变量名加减位移量存取以首个数据为基地址的前后数据 数据定义伪指令的几种数据表达式 数值表达式 由立即数构成 字符串表达式 表示将字符串中的字符的ASCII码存放在存储单元中 号表达式 不带引号的 表示可预置任何内容 DUP表达式 DUP是定义重复数据操作符 格式 变量名DB DW DD表达式1DUP 表达式2 重复次数 重复内容 通过上述定义 在存储器中将产生如图所示的结果 以DATA1到DATA6为例 例 DATA1DB DATA2DW1000HDATA3DD3000A455HDATA4DB4DUP 0 DATA5DW0120H 0240H 0360H 例 DATA6DB THISISAEXAMPLE OPER1DB OPER2DW MOVOPER1 0 字节指令MOVOPER2 0 字指令 MOVAX OPER1 1 MOVAL OPER2 类型不匹配MOVAX WORDPTROPER1 1MOVAL BYTEPTROPER2 二 表达式赋值伪操作 表达式名EQU表达式BEQU BP 8 ALPHAEQU9BETAEQUALPHA 18 1 作用 为了使程序便于阅读和修改 我们有时使用一个符号来代表一个数 而符号代表了一定的意义 在程序中使用一个符号代表一个数进行操作 2 格式 号操作对符号的赋值还可使用 操作 它与EQU的区别是 操作可以重复定义 而EQU则不能重复定义 如 X 3Y 6Y Y Y X MOVAX Y通过上述操作 最后使Y 33 后面的MOV语句中 当生成目标代码时将用33取代Y 即MOVAX 21H 33D 三 段定义伪操作指令 1 格式 段名SEGMENT 定位类型 组合类型 类别名 语句序列段名ENDS 完整的段定义伪操作 从上述程序中 我们可总结出如下结论 SEGMENT和ENDS前面必须有标号 而且在相互配对的段 它们前面要使用相同的标号 对于不同的段定义标号 尽管这些标号可以是任意字串 但为了程序的可读性 应使其有一定的意义 ASSUME语句可使汇编器知道CS DS SS指向哪个段 但它只在汇编时起作用 在运行时CPU并不知道除CS外的其它段地址 所以必须在程序中用指令进行赋值 格式 ASSUME段寄存器 段名1 段寄存器 段名2 首条被执行的语句有一个标号 用以标出这个程序的开始执行处 在程序的结尾处使用END后跟这个标号 除代码段外 其余段可以省略 也可以与代码段共用一个段 例 CODESEGMENTASSUMECS CODE DS CODE ES CODESTART 段定义时的参数 可以省略 定位类型组合类型类别 在程序的开始可以用NAME或TITLE为程序取名字 格式为 NAME程序名TITLE程序名整个程序的结束使用END标出 当汇编器读到END时 它认为程序到此就结束了 通常使用END后跟程序开始处的标号 注 NAME TITLE操作不是必须的 END则必不可少 四 程序开始和结束伪操作 五 对准伪操作 EVEN 使下一地址从偶地址开始 规则字 ADB morning EVENBDW2DUP ORG 用于指定目标程序存放单元的起始偏移地址 通常写在第一条源程序的前面 用于指定这段程序的首地址 ORG100则程序执行时就从CS 100处开始执行其后面的程序 地址计数器与对准伪操作 地址计数器 保存当前正在汇编的指令的地址ORG 8 跳过8个字节的存储区JNE 6 转向地址是JNE的首址 6 用在伪操作的参数字段 表示地址计数器的当前值 ARRAYDW1 2 4 3 4 4 六 基数控制伪操作 RADIX表达式 基数值 规定无标记数的基数 MOVBX 0FFMOVBX 178D MOVBX 0FFHMOVBX 178 RAD

温馨提示

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

评论

0/150

提交评论