




已阅读5页,还剩69页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章汇编语言语法和DOS功能调用教学内容4 1数据类型及其存储规则4 2汇编语言程序的格式4 3伪指令语句4 4汇编语言中的表达式4 5指令语句4 7DOS系统功能调用教学目标1理解汇编语言中的基本数据 2掌握汇编语言中的常用伪指令 3理解DOS系统功能调用 重点内容1汇编语言中的基本数据 标识符 常数 变量 标号 2汇编语言中的常用伪指令 3汇编语言中的表达式 算术运算符 逻辑运算符 关系运算符 分析运算符 修改属性运算符 其他运算符 4DOS系统功能调用 难点内容1汇编语言中的常用伪指令 2DOS系统功能调用 学时数4学时 计算机程序设计语言一般可分为三种 机器语言 汇编语言和高级语言 机器语言 也称机器码 是CPU唯一能够识别的语言 用不同数值的二进制数来表示要求CPU执行的命令 不同的CPU语言也不同 难以记忆和阅读 汇编语言 为了解决机器语言难以记忆和阅读的问题 用英文缩写来表示各种指令而生成的一种语言 它与机器语言基本是一一对应的 因此 汇编语言具有很高的执行效率 但也正因为这样 汇编语言也仍然与CPU相关联 不同的CPU要使用不同的汇编语言 在执行前要将其转换成CPU能够识别的机器码 这种转换称为汇编 由于汇编语言与机器语言基本是一一对应的 所以这种转换是唯一的 高级语言 独立于CPU之外 语句直观简练 编程效率高 在执行前要将其转换成CPU能够识别的机器码 这种转换称为编译 不同的编译软件 编译后获得的机器码是不同的 好的编译软件 得到的机器码占用内存小 执行效率高 但是与汇编语言相比都有较大的差距 4 1汇编语言程序的格式例4 1试求小于100的所有非零偶数 并把结果存入以BUFF开始的内存区 1MY DATASEGMENT2BUFFDB50DUP 3MY DATAENDS4MY CODESEGMENT5ASSUMECS MY CODE DS MY DATA6START MOVAX MY DATA7MOVDS AX8MOVAL 29LEABX BUFF10LLP MOV BX AL11INCAL12INCAL13CMPAL 10014JNZLLP15INC20H16MY CODEENDS17ENDSTRAT 汇编语言程序的格式可以归结为以下几点 1 段的结构段名1SEGMENT语句1 语句i段名1ENDS段名2SEGMENT语句1 语句j段名2ENDS 段名nSEGMENT语句1 语句k段名nENDSEND标号 2 语句的结构3种基本语句类型 指令语句伪指令语句宏指令语句语句一般有4个部分组成 即 标号或名字操作码操作数 注释标号或名字 这是一个任选部分 在语句之首 当语句为指令性语句时 它是标号 必须以 结束 当语句为伪指令时 它是名字 没有结束 注释 对程序的说明 任选 对程序不产生影响 必须以 开始 语句各组成部分之间至少有一个空格作为间隔 4 2汇编语言中的基本数据1 标识符标识符 由程序员自由建立起来的 有特定意义的字符序列 标识符的组成规则如下 必须由字母 数字 0 9 及特殊符号 组成 且必须以字母打头 字符总数限制在31个以内 不能使用属于系统专用保留字 保留的字 2 常数常数 语句中出现的那些固定值 除了自身的值以外 没有其它任何属性 常数分为两类 1 数值常数 2 字符串常数 3 变量变量 存放在存储器单元中的操作数 它的值是可以改变的 在程序中出现的是存储器单元地址的符号 即与某一数据项第一字节相对应的标识符 变量的3个属性 段地址 SEG 变量所在段的段地址 偏移地址 OFFSET 变量所在段内的偏移地址 类型 TYPE 所定义的每个变量所占据的字节数 4 标号标号 可执行指令语句地址的符号表示 即用标识符来表示地址 标号的3个属性 段地址 SEG 与标号对应的指令首字节所在的段地址 偏移地址 OFFSET 与标号对应的指令首字节所在的偏移地址 类型 TYPE 标号的类型属性有两种 NEAR和FAR类型 4 3伪指令语句伪指令语句可分为以下几种类型 数据定义伪指令语句 标识符赋值与解除伪指令语句 段定义伪指令语句 过程定义伪指令语句 程序开始与结束伪指令语句 方式定义伪指令语句 结构定义伪指令语句 分组伪指令语句 其它伪指令语句 1 数据定义伪指令语句共有五条 DB DW DD DQ和DT 分别用来定义字节 字 双字 8字节和10字节 指令格式 变量名助记符操作数1 操作数2 操作数n 注释变量名助记符nDUP 操作数1 操作数2 操作数n 注释功能 将操作数存入以变量名所指定的存储单元为首地址的存储区中 或者分配存储单元 nDUP 表示将括号内的操作数重复n次 n必须为正数 例4 2操作数是常数 表达式 字符串数据的定义DATA1DB10H 25HDATA2DW9988H 56HDATA3DD2 40H 0AABBHDATA4DB HELLO 例4 3操作数用 定义不确定值的变量 用DUP来定义重复变量 不确定值的变量一般用作保留存储空间 以便存放运算结果 DATA1DB DATA2DW0D55H DATA3DB5DUP 0 DATA4DW10DUP DATA5DB4DUP 1 2DUP 20 2 标识符赋值与解除伪指令语句共有4条 等值伪指令语句EQU等号伪指令语句 解除伪指令语句PURGE别名定义伪指令语句LABEL 1 等值伪指令EQU语句指令格式 标识符EQU操作数功能 为操作数定义一个标识符 以后就可以以标识符替代该操作数 一经定义后就不能重新定义 例4 5DATAEQU100DATA1EQUDATA 2CIEQUADD 2 等号伪指令语句 指令格式 标识符 操作数功能 与EQU具有相同的功能 但允许重新定义 例4 6DATA 100DATA1 DATA 10SOURCE BX SIMOVAX SOURCE SOURCE BXMOVCX SOURCE 3 解除伪指令语句PURGE指令格式 PURGE标识符1 标识符2 标识符n功能 将EQU定义过的标识符解除定义 以便可以再次用EQU定义 4 别名定义伪指令语句格式 别名LABEL类型属性LABEL 伪指令助记符 不可缺省 功能 为一个已经定义过的标识符另取一个名称 以获得一个新的类型属性 例4 7定义变量的别名DATABLABELBYTEDATAWDW1234H 5678HDISFLABELFARDISNMOVAX SI 3 段定义伪指令语句 1 段结构定义伪指令语句SEGMENT ENDS指令格式 段名SEGMENT定位类型组合类型 分类名 逻辑段内容段名ENDS功能 定义一个逻辑段 1 段名 不可缺少 是逻辑段的地址 放在SEGMENT和ENDS的前面 2 助记符 不可缺少 即SEGMENT和ENDS 分别表示段的开始和结束 3 参数 可选 有定位类型 组合类型和分类名三个参数 定位类型 表示本段起始地址 共有以下4种 PARA 缺省值 段的起始地址在节 16字节 的边界上 BYTE 段的起始地址在任意字节边界上 WORD 段的起始地址在任意字边界上 PAGE 段的起始地址在页 256字节 边界上 组合类型 表示同类别名的段的连接方式 共有以下6种 NONE 缺省值 不与其他段连接 PUBLIC 与其他段连接时按LINK中的顺序 由低地址到高地址 COMMON 与其他段以覆盖方式连接 段长度为最大段的长度 AT表达式 该段起始地址在表达式所指定的节的边界上 STACK 指定该段为堆栈段 在堆栈段中必须有该参数 多个模块只用设一个堆栈段 使用顺序连接方式组合 MEMORY 多个逻辑段连接时 本逻辑段定位在地址最高的存储区 有多个MEMORY段时 除第一个MEMORY段外 其他段按照COMMON方式处理 类别名 用来为该段取一个类别名 以便可以将同类别名的段进行组合 可选 不超过40个字符 2 段分配伪指令语句指令格式 ASSUMECS 段名 DS 段名 SS 段名 ES 段名功能 定义当前有效的4个逻辑段 指明段和段寄存器的关系注意点 1 助记符ASSUME不可省略 一般放在代码段的开始处 2 ASSUME后面的指令参数 由段寄存器名 CS DS ES SS 冒号及段名组成 各参数之间用逗号隔开 段名应是SEGMENT ENDS中定义过的名字 3 4个逻辑段不一定要全部定义 不使用的可以不定义 通常代码段和数据段是必须的 若使用了串指令 还应定义附加段ES 4 可以用ASSUME段寄存器名 NOTHING取消定义 5 ASSUME只将某个段分配给相应的段寄存器 只有代码段的段基址自动装入CS 其他段还须用指令装入相应的段基址 4 过程定义伪指令语句指令格式 过程名PROC属性过程内容RET过程名ENDP功能 定义一个由主程序可以用CALL指令调用的过程 说明 1 过程名是过程的名字 也是子程序的入口地址 不可缺少 如同标号一样 也有三种属性 段地址 过程的段基址 偏移地址 过程的第一个字节与段首址之间相距的字节数 距离类型 NEAR和FAR类型 NEAR允许在段内调用 FAR允许在段间调用 若缺省则为NEAR 5 程序开始与结束伪指令语句共有4条伪指令语句 NAME TITLE ORG和END 1 目标模块命名伪指令语句格式 NAME程序名在输出列表文件时 每页开头打印这个程序名 若未用此指令则打印文件名 TITLE文本名 将文本名赋给目标模块作名字 2 定位伪指令语句格式 ORG表达式功能 给出下一条语句的段内偏移量 例4 8用ORG指定数据段和代码段地址 DATASEGMENTX1DW20H 60H ORG100HX2DB10H 20H 30HORG200HX3DW1234H 4321HDATAENDSCODESEGMENTORG100HASSUMECS CODE DS DATASTART MOVAX DATA CODEENDS 3 程序结束伪指令语句格式 END标号名功能 在程序中不可缺省 标记汇编语言的源程序的结束 汇编程序在汇编时遇到END就停止汇编 程序执行时从END后的标号名处开始 例4 9程序结束伪指令语句的应用CODESEGMENTSTART MOVAX BXMOVCX 12H CODEENDSENDSTART 6 方式定义伪指令语句格式 8086 3867 结构定义伪指令语句有三条语句 结构定义伪指令 结构存储分配和预置伪指令及结构使用伪指令 1 结构定义伪指令语句格式 结构名STRUC数据变量序列结构名ENDS 2 结构存储分配和预置伪指令语句格式 结构变量名结构名 元素值 元素值 结构变量名结构名NDUP 元素值 元素值 例4 11对例4 10中的TAB结构进行存储空间分配和预置 形成4个结构变量 DATA1TAB DATA2TAB 1234 DATA3TAB 34H SEGPLT DATA4TAB5DUP WXYZ 22H 3 结构使用伪指令语句格式 结构变量名 字段变量设当前数据段基址为1000H 结构变量DATA1的偏移地址为100H 则例4 1中的4个结构变量在存储器中的地址分配如图4 3所示 8 分组伪指令语句格式 组名GROUP段1 段2 例4 12 GROUP1GROUPSEG1 SEG2 SEG3ASSUMEDS GROUP1MOVAX GROUP1MOVDS AXMOVBX GRPUP1 VAR1 9 其它伪指令语句 l 外部伪指令语句格式 PUBLIC名称1 名称2 将名称1 名称2 为定义为全局使用 EXTRN名称1 类型 名称2 类型 说明名称1 名称2 是在其他模块中定义过的标识符 并说明其类型 例4 12用EXTRN和PUBLIC语句实现模块间标识符的交叉访问模块1EXTRNDATA2 BYTE SUBTR1 NEARPUBLICTABLE DATA1DSEGSEGMENTTABLEDB100DUP DATA1DW CODESEGMENTDSEGENDS CODESEGMENTASSUMECS CODE DS DSEG MOVAX DSEGMOVDS AX MOVAL DATA1CALLSUBTR1 MOVAX SEGDATA2MOVES AXMOVBX ES DATA2 CODEENDSEND 模块2EXTRNTABLE BYTEPUBLICSUBTR1 DATA2DSEGSEGMENTDATA2DB DSEGENDSCODESEGMENT SUBTR1 CODEENDSEND 2 对准伪指令语句格式 EVEN功能 EVEN使下一语句的地址调整为偶地址 例4 14EVEN直接放在某一语句前 汇编程序汇编时就会完成将地址调整在偶地址上 DATASEGMENTORG100HA1DB0DHEVENA2DW100DUP DATAENDS 3 条件汇编伪指令语句一般格式是 IF 如果条件成立 ELSE 否则 ENDIF 结束条件汇编语句IF有多种形式 它们是 IF操作数IFE操作数IFDEF标号或变量IFNDEF标号或变量IFBIFNBIFIDN IFDIF IF1IF2 4 4汇编语言中的表达式表达式 运算对象和运算符组成 汇编语言中有 类运算符 即 算术运算符 逻辑运算符 关系运算符 分析运算符 修改属性运算符 其它运算符 算术运算符算术运算符有 加 减 乘 除 取模运算 MOD 左移 SHL 和右移 SHR 取模运算是取两数相除的余数 对象必须为正整数 例如92MOD16结果为12 相当于取低4位的值 97HMOD20H结果为23 相当于取低5位的值 33HMOD7结果为2 例4 14包含乘法和减法算术运算符的表达式DATASEGMENTARRAYDB1 2 3 4 5 6TRYDB20DATAENDSCODESEGMENTMOVBX 30 5MOVCX TRY ARRAY CODEENDS 例4 15源程序包含除法 减法 模运算和移位运算的表达式DATASEGMENTKAEQU800DATAENDSCODESEGMENTMOVBX KA 80MOVAX KAMOD100MOVCX KA 100MOVDH 01100100BSHR2 CODEENDS 2 逻辑运算符逻辑运算符有 与 AND 或 OR 非 NOT 和异或 XOR 例4 16AND OR NOT XOR逻辑运算的表达式DATASEGMENTPORTEQU81HDATAENDSCODESEGMENTMOVAL NOT0FFHMOVBL 8CHAND73HMOVAH 8CHOR73HMOVCH 8CHXOR73H INAL PORTANDDX PORTAND0FEHOUTDX AX CODEENDS 3 关系运算符关系运算符有 相等EQ 不等NE 小于LT 大于GT 小于或等于LE 大于或等于GE 4 分析运算符分析运算符有 OFFSET SEG TYPE LENGTH SIZE 1 OFFSET格式 OFFSET变量或标号功能 返回变量或标号的偏移地址 例4 17用OFFSET返回标号或变量偏移地址值的表达式DATASEGMENT DAT1DB81HDATAENDSCODESEGMENTMOVSI OFFSETLAB1 LAB1 MOVBX OFFSETDAT1 CODEENDS 2 SEG格式 SEG变量或标号功能 返回变量或标号的段基址 3 TYPE格式 TYPE变量或标号功能 返回变量的类型属性 在变量前 返回标号的距离属性 在标号前 表4 1TYPE运算符返回值 例4 18TYPE加在变量和标号前的表达式DATASEGMENTAA1DB20H 30HAA2DW0438HAA3DD DATAENDSCODESEGMENTLL1 MOVAH TYPEAA1MOVBH TYPEAA2ADDAL TYPEAA3MOVBL TYPELL1CODEENDS 4 LENGTH格式 LENGTH变量功能 返回其后第一个变量的项目数 例4 19LENGTH加变量的表达式DATASEGMENTBB1DW100DUP BB2DW1 2 3BB3DB ABCD DATAENDSCODESEGMENTMOVCX LENGTHBB1 CX 100MOVBL LENGTHBB2 CX 1MOVAL LENGTHBB3 CX 1CODEENDS 5 SIZE格式 SIZE变量功能 返回变量的字节数 把例4 19中含有LENGTH表达式改为SIZE表达式 即 MOVCX SIZEBB1 CX 200MOVBL SIZEBB2 CX 2MOVAL SIZEBB3 CX 1 5 修改属性运算符 综合运算符 修改属性运算符有 段操作符 PTR THIS HIGH LOW SHORT 1 段操作符格式 段前缀 CS DS ES SS 变量或地址表达式功能 使用段前缀作为变量或地址表达式的使用段 2 PTR格式 类型PTR变量距离PTR标号功能 将类型 BYTE WORD等 赋给变量 或将距离 NEAR FAR 赋给标号 例4 20带PTR表达式的变量DATASEGMENTCC1DB16H 36HCC2DW1122H 3344HDATAENDSCODESEGMENTLL1 MOVAX WORDPTRCC1MOVBL BYTEPTRCC2MOVBYTEPTR BX 10HMOVWORDPTR BX 10H JMPFARPTRLL1 CODEENDS 3 THIS格式 变量EQUTHIS类型标号EQUTHIS距离功能 将类型 BYTE WORD等 赋给变量 或将距离 NEAR FAR 赋给标号 例如 DATA1EQUTHISBYTETABLEDW200DUP DATA1与TABLE地址相同 但DATA1是字节类型 而TABLE是字类型 又如 LL1EQUTHISFARMOVAX 100 4 SHORT格式 SHORT标号功能 指明标号的距离为 128 127 5 HIGH和LOW它们称为字节分离运算符格式 HIGH变量或标号LOW变量或标号功能 从变量或标号中分离出高位字节或低位字节 例4 21带HIGH和LOW表达式的变量DATASEGMENTBB1EQU1234HBB2EQU0A0B0HDATAENDSCODESEGMENTMOVAH HIGHBB1MOVBL LOWBB2CODEENDS 6 其它运算符7 注意点 1 注意表达式中各运算符和操作符的优先级 2 注意数制统一 4 5指令语句指令语句的格式 标号 前缀指令助记符操作数 注释 1 立即寻址和直接寻址的表示形式例4 22立即寻址和直接寻址在表示形式上的区别DATASEGMENTBB1EQU1234HBB2DW0A0B0HDATAENDSCODESEGMENTMOVAX BB1 立即寻址MOVBX BB2 直接寻址MOVCX BB1 CODEENDS 2 基址寄存器加变址寄存器寻址的表示形式有两种表示形式 MOVAX BX SI MOVAX BX SI 3 相对寄存器寻址的表示形式例4 23相对寄存器寻址的两种表示形式DATASEGMENTMYDATDB100DUP DATAENDSCODESEGMENT MOVAX MYDAT BX MOVAX MYDAT BX MOVCX MYDAT BX SI MOVCX MYDAT BX SI CODEENDS 4 6宏指令语句及其使用1 宏定义宏定义格式 宏指令名MACRO形式参数1 形式参数2 宏体ENDM2 宏调用宏调用格式 宏指令名实际参数1 实际参数2 3 宏展开 例4 24无形式参数的宏定义 宏调用及宏展开宏定义 PUSHABMACROPUSHAXPUSHBXENDM宏调用 PUSHAB宏展开 PUSHAX PUSHBX 例4 25带形式参数的宏定义 宏调用及宏展开宏定义 LDSFMACROPR VAR N REG CCMOVPR VARMOVAX PR MOVCL NS CCREG CLENDM宏调用1 LDSFSI WVAR1 4 AX AR宏调用2 LDSFDI WVAR2 3 BX AL宏展开1 MOVSI WVAR1 MOVAX SI MOVCL 4 SARAX CL宏展开2 MOVDI WVAR2 MOVAX DI MOVCL 3 SALBX CL 4 宏嵌套 1 宏定义中使用宏调用例2 26设在程序的数据段已经定义了变量X Y Z 试计算X Y Z 并要求保护所有使用的寄存器 宏定义 DBFMACROP QMOVBX PMOVAX QADDAX BXENDMDBFSMACROX1 X2 X3PUSHAXPUSHBXDBFX1 X2MOVX3 AXPOPBXPOPAXENDM 宏调用 DBFSX Y Z宏展开 PUSHAX PUSHBX MOVBX X MOVAX Y ADDAX BX MOVZ AX POPBX POPAX 2 宏定义中包含宏定义例2 27设在程序的数据段已经定义了变量X Y Z 试共用一个宏定义 计算X Y Z X Y Z XANDY Z 并要求保护所有使用的寄存器 宏定义 DEFMMACROMACN OPENMACNMACROA B CPUSHAXMOVAX AOPENAX BMOVC AXPOPAXENDMENDM 宏调用定义加法 DEFMADDIT ADD宏展开 ADDITMACROA B CPUSHAXMOVAX AADDAX BMOVC AXPOPAXENDM宏调用定义减法 DEFMSUBT SUB宏展开 SUBTMACROA B CPUSHAXMOVAX ASUBAX BMOVC AXPOPAXENDM 宏调用定义逻辑 与 DEFMANDT AND宏展开 ANDTMACROA B CPUSHAXMOVAX AANDAX BMOVC AXPOPAXENDM宏调用实现X Y Z ADDITX Y Z宏展开 PUSHAX MOVAX X ADDAX Y MOVZ AX POPAX 宏调用实现X Y Z SUBTX Y Z宏展开 PUSHAX MOVAX X SUBAX Y MOVZ AX POPAX宏调用实现XANDY Z ANDTX Y Z宏展开 PUSHAX MOVAX X ANDAX Y MOVZ AX POPAX 5 宏定义中的标号与变量定义局部标号的格式 LOCAL参数1 参数2 参数n例4 29延时宏指令语句宏定义 DELAYMACROVALUE1 VALUE2LOCALAGAIN1 AGAIN2PUSHAXPUSHCXMOVCX VALUE1AGAIN1 MOVAX VALUE2AGAIN2 DECAXJNZAGAIN2LOOPAGAIN1POPCXPOPAXENDM 宏调用1 DELAY1234H 5678H宏调用2 DELAY9ABCH 0DEF0H宏展开1 DELAY1234H 5678H PUSHAX PUSHCX MOVCX 1234H 0000 MOVAX 5678H 0001 DECAX JNZ 0001 LOOP 0000 POPCX POPAX 宏展开2 DELAY9ABCH 0DEF0H PUSHAX PUSHCX MOVCX 09ABCH 0002 MOVAX 0DEF0H 0003 DECAX JNZ 0003 LOOP 0002 POPCX POPAX 6 其它宏指令语句 1 取消宏指令语句格式 PURGE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年耳鼻喉科咽喉炎的护理管理模拟测试答案及解析
- 2025年全科医学知识技能综合考试答案及解析
- 《-伴我前行》(2015年四川南充中考满分作文6篇)
- 2025年社区医学家庭医生服务技巧考核答案及解析
- 没有签培训协议书
- 用地建房协议书
- 离婚协议书的诉讼时效
- 许可协议书离婚
- 不履行人民调解协议书
- 泉州洲际酒店协议书价
- 家乡文化渠县
- 2024年安徽九华山旅游发展股份有限公司招聘笔试参考题库附带答案详解
- B级英语词汇表修改版
- 2024年山西省成考(专升本)大学政治考试真题含解析
- 最高法院第一巡回法庭关于行政审判法律适用若干问题的会议纪要
- 足球场的运营可行性方案
- GB/T 2881-2023工业硅
- 经济统计学课件
- 有限合伙份额质押合同完整版(包含质押登记公证手续)
- GB/T 43299-2023机动车玻璃电加热性能试验方法
- 马工程经济法学教学
评论
0/150
提交评论