汇编语言程序设计第四章.ppt

上传人:sh****n 文档编号:7473107 上传时间:2020-03-21 格式:PPT 页数:40 大小:334.34KB
返回 下载 相关 举报
汇编语言程序设计第四章.ppt_第1页
第1页 / 共40页
汇编语言程序设计第四章.ppt_第2页
第2页 / 共40页
汇编语言程序设计第四章.ppt_第3页
第3页 / 共40页
点击查看更多>>
资源描述
第四章高级汇编语言的语法 4 1 1汇编语言语句格式1 机器指令的形式 标号 指令前缀 助记符 操作数 注释 例如 EXEC REPMOVSDEST SOURCE OPS OPD 构成汇编语言程序的语句主要包括两类 指令与伪指令 它们之间的区别 指令是程序运行期间由CPU执行的 汇编后由对应的机器代码所取代 伪指令是不可执行的 它只是源程序汇编期间由汇编器处理的命令 用来指示汇编器为数据分配内存空间 或者为汇编器提供源程序结束或段定义等 2 伪指令语句的形式 名字 伪操作命令 参数 参数 注释 伪操作命令包括 符号定义 EQU LABEL 数据定义 DB DW DQ DT RECORD ORG SEGMENT ASSUME ORG模块定义 EXTERN PUBLIC NAME END过程定义 PROC ENDP 4 1 2数值表达式 数值表达式是常量或运算符与常量的组合 表达式的值是在汇编阶段已经确定或得到的值 1 整常量MOVEAX 0FA5CH 2 字符串常量MOVAX Aa AX 4161H 3 符号常量COUNT 60 60MOVECX COUNT COUNT 3600 ECX 算法运算符共7种 MOD SHR SHL对于语句 MOVAL 2可用下列语句替换 VALEQU5MOVAL VALSHL1 VAL 5 00000101B逻辑右移 位为 00000010B 2注意 移位运算符只对常量移位 而移位指令SHR SHL只出现在指令码中 对寄存器或内存操作数进行移位操作 实例 VAL 5SHRAL VALSHL1 若VAL 5 等价于语句SHRAL 10 逻辑运算符4种 AND OR XOR NOT 分别对常量按位进行逻辑与 或 异或和非的运算 运算的结果也是一个已知的常量 注意与指令AND OR XOR NOT的区别 上述指令放在操作码中 而操作符放在操作数中 例 PORTEQU29H ANDDX PORTAND0F0H DX 表达式的值 20H DX 关系运算符共6种 EQ 相等 NE 不等 LT 小于 GT 大于 LE 小于等于 GE 大于等于 对两个常量进行运算 结果是两特殊的常量值 如果关系成立 为真 结果为 1 即0FFFFH 如果关系不成立 为假 结果为0 例 PORTEQU3MOVBX PORTLT5 AND18 OR PORTGE5 AND69 语句被汇编成 MOVBX 18 4 1 3标号变量与地址表达式 标号 在代码段定义的指令的地址 三个属性值 段地址 EA 类型 FAR NEAR 变量 是内存中一个数据区的名字 作为指令的存储器操作数引用 三个属性值 段地址 EA 类型 类型由 DB DW DD DQ DT定义 如 countdw5 地址表达式地址表达式形成的结果是存储器的地址 用来表标指令中的标号或变量操作数 有 个属性 段地址 和类型 而数值表达式的结果只有大小没有属性 地址表达式可由变量 标号 常量 寄存器及一些运算符组成 例1 ARRAYDDD2 0 0 2 6 1 8 9 4 40MOVEAX ARRAYD 36MOVESI 36SUBESI 4ADDEAX ARRAYD ESI 例 ARRAYWDW1 2 3 4DW5 6 7 8DW9 10 11 12 MOVAX ARRAYW BX SI 等价于 MOVAX ARRAYW BX SI 或者MOVAX ARRAYW BX SI 4 1 4特殊运算符 1 属性替换运算符用来取代一个操作数的属性 1 强制类型运算符PTR如 MOVbyteptr BX 5JMPFARPTRNEXTLAB BX 2 段取代运算符 如 MOVDX ES BX DI 2 属性分离运算符功能 只是分离变量或标号的属性值 而不取代有关的属性 SEG 取段地址 OFFSET 取偏移地址 如 ARRAYWDW20DUP 0 start movax segARRAYWmovds axmovbx offsetARRAYW OFFSET与LEA指令的使用区别OFFSET是伪指令 在汇编阶段进行计算 所以OFFSET后面的地址表达式不能带寄存器 因为汇编阶段还不能计算出寄存器的值 如 MOVDX OFFSETARRAYW BX SI 错误LEADX ARRAYW BX SI TYPE运算符功能 取TYPE后面变量或标号的类型值 类型是字节 字 双字 则返回 1 2 4例如 MOVCL TYPEARRAYW ARRAYW为字类型 则返回 3 返回数值运算符 1 LENGTH取变量数据项个数 如果变量采用DUP定义 则LENGTH取DUP前面的重复系数 如果有多个DUP嵌套 仍取每一个DUP前面的系数 否则LENGTH取值为 例如 ARRAYDW100dup MOVCX LENGTHARRAY CX 100ARRAYDB10dup 1 20dup 20H MOVCX LENGTHARRAY CX 10 2 SIZE取变量数据的字节数 用来取变量定义中 有dup项时的字节数 设变量Y 则SIZEY LENGTHY TYPEY例如 DW100DUP 0 TYPEY 2 LENGTHY 100则SIZEY 2 100 200 3 动态求数据项个数的方法对于 STRINGDB macroassemble movcx sizestring cx 1 1 1所以size在一些场合并不适用 可以考虑动态求取 例如 stringdb advancedassembly countsequ string counts 16varwdw9 8 7 6 5 4 3 2 1 0countwequ varw countw 10 2 2 10bufferdb10dup 2dup 8 A countLequ buffer countL 10 2 1 30 符号表示 该条包含有 语句之后下一个可用的偏移值 4 字节分离运算符HIGH LOW功能 从一个字数值或符号常量中得到高字节或低字节 如 WVAREQU0CA19Hmovah HIGHWVARmoval LOWWVAR 表达式运算符的优先级 从高到低排列 LENGTH SIZE WIDTH MASK 以及 中的项目 结构引用操作符 段取代运算符 PTR OFFSET SEG TYPE THIS HIGH LOW MOD SHL SHR EQ NE LT LE GT GENOT AND OR XOR SHORT 4 2汇编伪指令语句 方式伪指令包括 8086 386 386P等 用来指定CPU的类型 例如 386codesegment codeends 8086codesegment 注意 默认是8086方式 数据与符号定义伪指令 1 定义符号伪指令包括EQU LABEL 它们只用来定义名字 不分配存储空间 格式 名字EQU表达式名字 表达式注意 1 EQU的表达式可以是常量 变量名 标号 指令助记符 寄存器名 而 的表达式只能是数字表达式 主要用来定义符号常量 2 同一个源程序 EQU符号名不能重复定义 则可以 3 同一个源程序中同一符号名 不能同时用EQU和 语句定义 例如 NUMBEREQU60 NUMBER 60TIMESEQUNUMBER 24 TIMES 60 24 1440BYTESDB10dup WORDFEQUWORDPTRBYTES 定义新名字 新类型COUNTEQUCX COUNT为CX寄存器的同义名字DECCOUNT 相当于CX CX 1VALUE 88VALUE VALUE 1 VALUE 89MOVCL VALUE CL 89COUNT VALUE 1 COUNT的值 90 2 定义名字语句的LABEL格式格式 名字LABEL类型类型包括 byte word dword near far等功能 它可以把同一数据区的内容既看作字节 也可以作为字或双字等类型参与运算 以适应按不同类型的存取操作 如 BARRAYLABELBYTEWARRAYDW50dup 0 MOVAX WARRAY 48 取数组的第25个元素到AX MOVAL BARRAY 49 取数组的第50个字节值到AL 最后一条语句也可以用 MOVAL BYTEPTRWARRAY 49 代替 LABEL还可以定义指向同一条指令NEAR和FAR类型的标号 由其它程序段来调用FAR标号 在同一段内调用NEAR标号 如 FARSUBLABELFARNEARSUB MOVEBX ECX JZNEARSUB在另一个程序段可用 JMPFARSUB来执行MOVEBX ECX 2 程序模块名与结束语句 1 模块命名语句格式 NAME 模块名 模块语句可以在程序中不写出 2 源程序模块结束语句END格式 END 表达式 源程序模块的最后一条语句 如果有表达式的值 则为程序开始执行目标代码的地址 程序汇编后 指令指针IP或EIP指向这个入口地址 如 NAMEPentium MASM61xcodessegmentstart codesendsendstart注意 模块是独立的汇编单元 汇编程序只处理到END为止 后面的语句被忽略 3 数据定义及存储分配语句指令 DB 字节 DW 字 DD 双字 DF 长字 DQ 4字 DT 10字 格式 变量名 DB初值表达式1 初值表达式2 表达式可以是下列的形式 1 数值表达式 2 定义的数据项无法确定初值 即只分配存储存储单元 3 ASCII字符串多于两个字符的字符串可用DB定义 4 nDUP 重复运算符dup用来重复定义n个数据项 内容是未确定的 5 nDUP 表达式 表达式 6 nDUP mDUP 表达式1 表达式2 多层嵌套DUP项 共有n m 1 项 初值由表达式确定 例4 1定义单项变量 1 定义单项变量VARNDB88VARMDB60 60STRCDW AB MAXNDD 2147483468STRSDD AB STRS的逻辑值00004142H 物理存储为42410000HQVARDQ TVARDT1024D 为变量TVAR分配10个字节 初值为整数 即 00000000000000000400H 1024 例4 2定义字符串变量STR1DB A B C D STR2DB ABCDE ERRORDB syndaxerror 13 10例4 4定义数组或缓冲区变量BUFDB98dup TABBDB2DUP 3DUP 8 A ARRADW26DUP 41H 4 2 3段定义与段管理伪指令 指令包括 SEGMENT ENDS ASSUME GROUP ORG等 段完整定义格式 段名SEGMENT 使用类型 边界类型 连接类型 类别 段名ENDS其中 两处段名是相同的 SEGMENT表示段的开始 ENDS表示段的结束 表示可选项 1 使用类型只有使用了 386 这个选项才作用 选项值 use16表示该段按16位寻址 与8086方式一样 use32表示该段按32位寻址 地址指针48位 段地址16位 偏移地址32位 注意 在定义段时 如果用了 386等伪指令后 默认使用use32 2 边界类型作用 指令段起始地址的类型 参数值 无即省略边界 指系统默认值 节类型PARAPARA段地址是16的倍数 最后4位是0000BYTE段地址从任意地址开始 字节地址 WORD段地址是2的倍数 即偶地址 最低位为0DWORD段地址是4的倍数 最低两位为0PAGE段地址是256的倍数 最低8位都为0 3 连接类型作用 告诉LINK程序 本段与其它段的相互关系 参数值 无省略连接符 表示本段有自己的段地址 与其它同名段无联系 独立段 PUBLIC同名同类型连接 LINK程序将本段与其它具有该类型且段名相同 可包括不同模块 的段连接在一起 组成一个物理段 具有一个段地址 STACK指定堆栈段 LINK程序连接后的段为堆栈段 与PUBLIC处理相同 如果定义堆栈段没有说明STACK类型 LINK程序将发出警告 nostack 此外 还有COMMON MEMORY AT表达式的形式 例4 7同名段的连接 程序段1DATASSEGMENTPUBLICVAR1DB5DATASENDSCODESSEGMENT CODESENDS 程序段2DATASSEGMENTPUBLICVAR2DB8DATASENDSCODESSEGMENT CODESENDS 汇编后 将生成一个段码段和数据段 数据依序存放 4 类别类别是任何合法的名字 连接时 LINK程序将类别相同的段依次放在内存中 2 置汇编单元计数器语句ORG 格式 ORG表达式ORG 表达式表达式的值必须为常量 表示当前地址 ORG的功能指定该语句后面的程序或数据存放的起始地址 例 ORG400HDATADB20H 30H DATA的地址为400H 例4 10 386DATAS SEGSEGMENTuse32dwordpublic data ORGAREAdb ORG 100HVARdb128dup 99 DATAS SEGENDSCODE SEGSEGMENTuse32dwordpublic code CODE SEGENDS 3 指示段寄存器语句ASSUME格式1 ASSUME段寄存器 段名 组名 段寄存器 段名 组名 格式2 ASSUME段寄存器 NOTHING格式3 ASSUMENOTHING后两种方式取消段寄存器与段或组的联系 例4 1codesegmentuse16parapublic code assumecs codes ds datas es datas ss stackstart movax datasmovds axmoves ax ASSUMEES NOTHING 取消ES段寄存器寻址 再用ES就出错了 codeends 4 段组语句GROUP功能 GROUP语句可以把模块中几个不同段合成一个组 并赋于一个组名 使它们都装在同一个物理段 64K 中 格式为 组名GROUP段名 连接时 如果超出64KB 则出错 例 CGROUPGROUPDATA1 DATA2ASSUMEDS CGROUP CS CODESDATA1SEGMENTWORDPUBLIC DATA1 VAR1DW10DUP START MOVAX CGROUPMOVDS AXMOVBX OFFSETCGROUP VAR1
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!