




已阅读5页,还剩80页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 5 4汇编语言源程序 掌握 汇编语言与汇编程序的概念 汇编语言程序设计过程 汇编语言源程序的结构框架 常用伪指令及基本DOS功能模块的应用 2 一 80X86新增指令特点 增加对32位字长操作的指令 加强各类指令功能 增加了高级语言 控制保护 Cache管理等指令 3 二 汇编语言及汇编程序 计算机语言 机器语言汇编语言高级语言 面向机器的语言 机器语言 汇编语言 高级语言 4 汇编语言及汇编程序 汇编语言源程序用助记符编写的程序 源程序的编译程序 汇编程序 汇编语言源程序 机器语言目标程序 5 汇编语言程序设计与执行过程 输入汇编语言源程序源文件 ASM汇编 编译 目标文件 OBJ链接可执行文件 EXE调试最终程序 6 汇编语言的程序结构 一个源程序必须用其编译器能够理解的语法进行编写 这些语法是指语句和程序结构必须遵循的规则 汇编语言也是如此 首先 通过以下可在PCDOS环境下运行的汇编语言源程序实例 初步认识标准的汇编语言源程序的框架结构 并通过它来了解汇编语言的有关规定和格式 7 例 打印输出字符串 THISISASAMPLEPROGRAM SAMPLEPROGRAMDISPLAYMESSAGE 注释行STACKSEGMENTPARASTACK STACK 定义堆栈段DB1024DUP 0 在存储器建立一个堆栈区STACKENDS 段结束DATASEGMENT 定义数据段MESSAGEDB THISISASAMPLEPROGRAM 存放数据DB0DH 0AH DATAENDS 段结束CODESEGMENT 代码段开始ASSUMECS CODE DS DATA SS STACK 将段名与段寄器联系起来 8 STARTPROCFAR 将过程定义为远过程PUSHDSMOVAX 0PUSHAXMOVAX DATA 建立数据段的可寻址性MOVDS AX 初始化DSLEABX MESSAGELOOP1 CMPBYTEPTR BX JELOOP2MOVAH 5 标准序 以便返回DOS操作系统 9 MOVDL BX INT21HINCBXJMPLOOP1LOOP2 RETSTARTENDP 过程结束CODEENDS 代码段结束ENDSTART 整个程序汇编结束 10 汇编源程序的特点 一 由若干逻辑段组成 各逻辑段都有一个段名 由段定义语句 伪指令 来定义和说明 通常只有代码段是必不可少的 数据段或附加段用来在内存中建立一个适当容量的工作区用以存放常量和变量 堆栈段则在内存中建立一个堆栈区 以便中断和子程序调用及各模块间传递参数时使用 某些简单的程序并不一定需要数据段和堆栈段 但对一些复杂的程序 堆栈段 数据段和代码段都可以不止一个 通常把数据段放在代码段前面 11 汇编源程序的特点 续 二 在代码段的起始处 用ASSUME命令说明各个段寄存器与逻辑段的关系 并由用户自己设置各段寄存器 除代码段外 初值 以建立这些逻辑段的可寻址性 三 每个逻辑段由若干行汇编语句组成 每行只有一条语句且不能超过128个字符 但一条语句允许有后续行 最后均以加车作结束 整个源程序必须以END语句来结束 它通知汇编程序停止汇编 END后面的标号START表示该程序执行时的起始地址 12 汇编源程序的特点 续 四 每一条汇编语句最多由4个字段组成 它们均按照一定的规则分别写在一条语句的4个区域 各区域之间用空格或TAB键隔开 五 每个源程序在代码段中都必须含有返回到DOS操作系统的指令语句 以保证程序执行完毕后能自动回到DOS状态 以便继续向计算机键入命令 13 源程序与PCDOS的接口 为保证用户程序执行完后自动返回DOS 应采取两项措施 一是将用程序中的主程序定义为FAR过程 其最后一条指令为RET 二是在主程序的开始处将PSP所在段的段地址DS 或ES 保存进栈 然后再将一个全0的字 PSP的段内偏移地址 压入堆栈 PUSHDSMOVAX 0PUSHAX 14 源程序与PCDOS的接口 续 还有一种返回DOS的非标准方法 不定义主程序为FAR过程并去掉标准序部分 只在代码段结束之前 即CODEENDS之前 增加两句 MOVAH 4CHINT21H 15 汇编语言的语句格式 语句是汇编语言源程序的基本组成单位 源程序是一个语句序列 语句序列中的每个语句规定了一个基本操作要求 而语句序列则完成某个特定的操作任务 16 语句的种类 在80X86 Pentium汇编语言中 有三种基本语句 指令语句 伪指令语句和宏指令语句 指令语句 对应于CPU指令系统中的一条指令 为可执行语句 汇编程序将为之产生一对应的机器目标代码 如 指令语句MOVDS AX 机器代码为8EH和D8H 17 语句的种类 续 伪指令语句CPU不执行的语句 只是汇编时给汇编程序提供汇编信息 如定义符号 分配存储单元 将程序分段等 它本身不产生目标代码 所以是指示性语句 如伪指令语句SEGMENT ENDS 18 语句的种类 续 宏指令语句是以某个宏名字定义的一段指令序列 汇编时 凡有宏指令语句的地方都将用相应的指令序列的目标代码插入 19 汇编语言的语句格式 指令性语句 由CPU执行的指令语句格式 标号 前缀 助记符 操作数 操作数 注释 指令的符号地址 标号后要有冒号 操作码 注释前加分号 20 汇编语言的语句格式 指示性语句 CPU不执行的指令 不生成目标代码 由汇编程序执行 用于分配内存空间 定义变量 指示程序开始和结束等 指令格式 名字 伪指令助记符操作数 操作数 注释 变量的符号地址其后不加冒号 指示性语句中至少有一个操作数 21 汇编语言的语句格式 续 其中 方括号中的内容为可选部分 操作数部分或是0 1操作数 或是由逗号隔开的多个操作数 1 标号和名字 标号和名字分别是给指令单元和伪指令起的符号名称 用符号汇编语言规定的标识符来表示 标号后面必须有冒号 名字后面没有 标号和名字的选择有一些限制 首先 它们必须符号汇编语言的标识符定义 即以字母开头 由字母 A Z或a z 汇编程序不区分大小写 数字及部分特殊字符 和下划线 等 组成的字符串表示 字符串长度不能超过31个 此外 标识符不能是汇编言中有特定意义的保留字 22 汇编语言的语句格式 续 2 助记符和定义符助记符和定义符分别用于规定指令语句的操作性质和伪指令语句的伪操作功能 这部分是语句中唯一不可缺省的 3 操作数指令语句中的操作数提供该指令的操作对象 并说明要处理的数据存放在什么位置以及如何访问它 4 注释注释由分号 开始 用来对语句的功能加以说明 它们构成了源程序的编程文档 使程序更容易被理解和阅读 23 操作数 常量 数值或字符 字符串寄存器存储器单元变量或标号表达式 可包括各种运算符 24 常量 在汇编时已经确定其值且程序运行期间不变化的量为常量 如语句中的立即数或端口地址等 这些常量的形式各不相同 常用的有二 十 八或十六进制的整型数值常量 字符串常量和已赋值的常标识符 在汇编语言源程序中 常用十六进制来表示数据和地址 25 变量 代表内存中的数据区 程序中视为存储器操作数变量的三种属性 段值 变量所在段的段地址偏移量 变量单元地址与段首地址之间的位移量 类型 字节型 BYTE 字型 WORD 双字型 DWORD 四字和十字节5种 26 表达式操作数 表达式操作数由各种操作数 运算符和操作符组成 汇编语言中的两类表达式 数值表达式 由数值常量 字符串常量或符号常量等与算术 逻辑或关系运算符连接而成 地址表达式 由常量 变量 标号 寄存器的内容以及一些运算符组成 其值表示存储器地址 一般都是段内的偏移地址 地址表达式主要用来表示指令语句中的操作数 27 三 基本伪指令 数据定义伪指令符号定义伪指令段定义伪指令设定段寄存器伪指令结束伪指令 过程定义伪指令 宏命令伪指令 28 数据定义伪指令 数据定义语句用于定义变量 它指定变量的类型和名称 并为变量分配存储单元 格式 变量名 伪指令助记符操作数 注释 其中 变量名是可选的 操作数是赋给变量的初值 多个相同类型的变量可在一条语句中定义 经过定义的变量名有三个属性 数据类型 偏移量 可用OFFSET获得 和段基址 可用SEG获得 若某个变量所表示的是一个数组 则其类型属性为变量的单个元素所占用的字节数 29 数据定义伪指令 伪指令助记符DB定义的变量为字节型DW定义的变量为字类型 双字节 DD定义的变量为双字型 4字节 DQ定义的变量为4字型 8字节 DT定义的变量为10字节型 30 数据定义伪指令 DATA1DB11H 22H 33H 44HDATA2DW11H 22H 3344HDATA3DD11H 2 22H 33445566H 考虑以上变量在内存中的存放形式 31 数据定义伪指令 伪指令的性质决定所定义变量的属性 定义字符串必须用DB伪指令例 DATA1DB ABCD 66H A B C D 41H 42H 43H 44H 66H 32 数据定义语句的具体形式和功能 1 为数据项分配存储单元 用变量名作为该存储单元的名称 例 XDB25H 定义变量X为字节YDW4124H 定义变量Y为字汇编时汇编程序会把25H 4142H这些初值分别放入名为X Y的存储单元中 33 数据定义语句的具体形式和功能 2 预留若干字节 字 双字 存储单元但并不赋以具体的初值 以存放程序的运行结果 这时操作数部分可使用问号 例 ADB 为变量A分配一个字节单元BDB 为变量B分配一个字单元 34 数据定义语句的具体形式和功能 3 引入若干个用逗号分隔的操作数来定义一个表 数组 例 W TABLEDW1122H 3344H 定义一个字表B TABLEDB1 2 4 8 16 定义一个字节表其中字变量W TABLE的内容为1122H 下一个字单元的内容为3344H 35 数据定义语句的具体形式和功能 4 用DB伪指令在内存中定义一个字符串 字符串中的每一个字符用它的ASCII码值来表示 为一个字节 所以字符串的定义必须用DB命令 例如 MESSAGEDB HELLO 注意 当字符串的长度不超过两个字符时 也可用DW伪指令来定义 例 STRING1DB AB STRING1DW AB STRING1DW AB CD 36 重复操作符 为一个数据区的各单元设置相同的初值格式 变量名 伪指令助记符nDUP 初值 例 BW20DUP 0 DB3DUP 22H 11H 随机数 37 分析操作符与合成操作符 作为存储器操作数的标号或变量都有段 偏移量和类型三种属性 在程序设计中 有时需要随时查询 调用或修改这些属性 以满足不同的访问要求 这些操作由分析和合成操作符来完成 38 分析操作符 分析操作符作用于存储器操作数时返回它们的属性值 这些操作符是 SEG OFFSET TYPE SIZE LENGTH等 分析操作符的使用格式 操作符标号或变量SEG和OFFSET操作符SEG和OFFSET分别用以返回标号或变量的段地址和偏移地址 39 分析操作符 TYPE LENGTH SIZE操作符TYPE操作符返回一个数字值 表示存储器操作数的类型 LENGTH操作符返回变量用DUP重复定义的数据项总数 SIZE操作符则返回TYPE和LENGTH的乘积 表示为变量所分配的字节存储单元总数 注意 要用LENGTH操作符返回的存储区必须用DUP 来定义 否则返回1 40 合成操作符 PTR操作符PTR用来临时指定或修改存储器操作数的类型属性 保持原有的段属性和偏移地址属性 如果这些变量或标号已有定义 则原定义的类型属性不变 使用格式 类型PTR标号或变量其中 类型可以是BYTE WORD DWORD NEAR或FAR 它们仅在当前所在的指令中有效 41 合成操作符 续 LABEL操作符LABEL操作符为当前存储单元定义个指定类型的标号或变量 它常用于定义一个数据块或标号 使它们具有多重名字或属性 使用格式 标号或变量名LABLE类型例 WBYTELABELWORD 42 合成操作符 续 THIS操作符THIS操作符与EQU配合使用 具有LABEL操作符的同样作用 使用格式 标号或变量名EQUTHIS类型例 BWORDEQUTHISBYTE 43 符号定义伪指令 格式 符号名EQU表达式操作 用符号名取代后边的表达式 不可重新定义 即在同一源程序中 用EQU定义过的符号名不能再赋予不同的值 例 CONSTANTEQU100 常量赋予符号名VAREQU30H 99H EQU说明的表达式不占用内存空间 44 符号定义伪指令 等号语句 格式 符号 表达式此语句的功能与EQU类似 唯一区别是能对符号进行再定义 例 EMP 60EMP EMP 1EMP 123 4 45 段定义伪指令 说明逻辑段的起始和结束 说明不同程序模块中同类逻辑段之间的联系形态 46 段定义伪指令 段名SEGMENT 定位类型 组合类型 类别 段名ENDS 说明逻辑段的起点 说明不同模块中同名段的组和连接方式 47 段定义伪指令SEGMENT ENDS 格式 段名SEGMENT 定义类型 组合类型 类别名 段体 段名ENDS功能 指出段名及段的各种属性 并表示段的开始和结束位置 段名是用户定义的标识符 是识别段的标志 用来指示汇编程序为该段分配的存储器起始位置 包含段地址和段内偏移量两个属性 48 定义类型 汇编程序对源程序汇编后生成的目标代码文件 OBJ 其中的段地址和偏移量都未最后确定 还需要用链接程序 LINK 把各个模块连接起来 定位类型参数用于告诉LINK程序 链接时本段首地址的边界定位方式 定位有四种类型 PARA 节 表示段的起始地址必须为16的倍数 XXXX0H 若语句中没有给出定位类型 则默认为PARA 49 定义类型 PAGE 页 表示段的起始地址必须为256的倍数 XXX00H 也就是页的起点上 WORD 字 表示段的起始地址必须为偶数 它最适合于安排类型为字的数据段 BYTE 字节 表示该段可以从任意地址开始 50 组合类型 一个汇编语言源程序往往有许多模块组成 而每一个模块常常又有自己的数据段 代码段和堆栈段 组合类型用于告诉LINK程序 多个模块链接时本段与其他模块中同名段的组合链接关系 组合类型共有六种 NONE 本段与其他同名段无组合关系 并有自己的段起始地址 若语句中没有指明组合类型 则默认为NONE 51 组合类型 PUBLIC 在满足定位类型的前提下 LINK程序将其与其他模块中说明为PUBLIC的同名段邻接在一起 共用一个段地址 STACK 与PUBLIC同样处理 只是链接后的段作为堆栈段 COMMON 各模块中由COMMON方式说明的同名段得叠履盖 有着相同的起始地址 段的长度邓决于最长的COMMON段的长度 段的内容为所链接的最后一个模块中COMMON段的内容以及没有覆盖到的前面的COMMON段的内容 52 段寄存器说明伪指令ASSUME 格式 ASSUME段寄存器 段名 段寄存器 段名 ASSUME伪指令一般出现在代码段中SEGMENT伪指令的后面 它设定特定的段寄存器指向特定的段 说明源程序中定义的段应由哪个段寄存器去寻址 但是 ASSUME并未真正将段地址装入相应的段寄存器 段寄存器 CS除外 的初值设定还要由程序中的MOV指令来完成 53 指定地址伪指令ORG 格式1 ORG表达式格式2 ORG 表达式功能 ORG伪指令用来强行指定地址计数器的当前值 以改变段内在它以后的代码或数据块存放的偏移地址 格式1直接将表达式的值送入地址计数器 格式2将汇编ORG语句前地址计数器的现值 加上表达式后送入地址计数器 54 例 DATASEGMENTORG10H 在数据段10H偏移地址处开始存放20H 30HXDB20H 30HORG 5YDB40H 50H 55 段定义伪指令例 DATASEGMENTMEM1DB11H 22HMEM2DW1234HDATAENDS 56 结束伪指令 表示源程序结束格式 END 标号 57 一个完整源程序结构例 DSEGSEGMENTDATA1DB1 2 DATA2DW1234HDSEGENDSESEGSEGMENTDB20DUP ESEGENDSSSEGSEGMENTDB200DUP SSEGENDS 58 一个完整源程序结构例 CSEGSEGMENTASSUMECS CSEG DS DSEG ES ESEG SS SSEGSTART MOVAX DSEGMOVDS AXMOVAX ESEGMOVES AXMOVAX SSEGMOVSS AX CSEGENDSENDSTART 源程序代码 59 过程定义伪指令 用于定义一个过程体格式 过程名PROC NEAR FAR RET过程名ENDP 过程入口的符号地址 60 宏命令伪指令 宏命令 源程序中由汇编程序识别的具有独立功能的一段程序代码格式 宏命令名MACRO ENDM 宏体 61 四 DOS功能模块 用INT21H软中断指令 可调用包含多个子功能的功能包 各子功能采用功能号来区分 功能包括 设备管理 目录管理 文件管理等 62 DOS功能子程序的基本方法 BIOS DOS的每个功能子程序都对应着一个子程序文件 使用这些子程序时 用户不必过问其内部结构和细节 也不必关心硬件I O接口的特性 只要直接用一条软件中断指令INTn即可 n为中断向量号 这称为中断调用 一般 对功能子程序的调用需要经过三个步骤 子程序入口参数关规定寄存器子程序编号送AH寄存器发软件中断命令 INTn 63 其中软中断命令INTn中的n值因子程序不同而可能不同 比如ROMBIOS的软中断类型号有n 5 1FH DOS的软中断类型号有n 20H 21H 23 2AH 2EH 2FH 33H和67H等几种情况 有的软中断命令只对应一个子程序 这时的功能调用无需上列步骤2 有的软中断则对应很多子程序 这时的功能调用就必须指明子程序号 64 DOS功能模块调用格式 调用格式 MOVAH 功能号INT21H 65 常用子功能 从键盘输入单字符并显示 从键盘输入字符串并显示 在屏幕上显示单字符 在屏幕上显示字符串 66 从键盘输入单字符并显示 01号功能调用等待从键盘输入一个字符 调用返回时该字符的ASCII码值送入AL寄存器 同时将该字符显示在屏幕上 入口参数 无调用方法 MOVAH 01INT21H输入的字符在AL中 67 单字符输入例 GET KEY MOVAH 1INT21HCMPAL Y JZYESCMPAL N JZNOJNZGET KEYYES NO 交互式应答程序 68 从键盘输入字符串 AH功能号OAHDS DX字符串在内存中的存放地址INT21H从键盘接收字后串后存入以DS DX为首地址的内存缓冲区 同时显示该字符串 输入过程以回车键结束 使用时 要求事先在数据段定义一个输入缓冲区 其中第一个字节指出缓冲区能容纳的字符个数 不能为0 第二个字节保留用以存放实际输入的字符个数 从第三个字节开始存放从键盘上接收的字符 69 定义字符缓冲区 用户自定义缓冲区格式 0DH N1 N2 整个缓冲区 最大键入字符数 实际键入字符数 70 输入字符串程序段 DAT1DB20 20DUP LEADX DAT1MOVAH 0AHINT21H 71 输入缓冲区 14H 20个字节 定义后的输入缓冲区初始状态 72 单字符显示输出 AH功能号O2H或05HDL待输出字符INT21H功能 将寄存器DL中的单个字符输出到显示器或打印机 02H为显示器 05H为打印机 73 单字符显示输出例 MOVAH 02MOVDL 41H A的ASCII值INT21H执行结果 屏幕显示字符 A 74 字符串输出显示 入口参数 DS DX指向内存中一个以 结尾的字符串 不包括 输出到显示器 AH功能号O9HDS DX待输出字符串的偏移地址INT21H 75 字符串输出显示例 DATASEGMENTMESS1DB InputString 0DH 0AH DATAENDSCODESEGMENT MOVAH 09MOVDX OFFSETMESS1INT21H 被显示的字符串必须以 结束 76 练习一 写一个把压缩存放的BCD码 转换成对应的ASCII码的程序 8421BCD码与ASCII码的转换关系很简单
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教版四年级数学上册第五单元平行四边形和梯形学业质量测评卷(含答案)
- 第六单元提优测试卷(含答案) 五年级数学上册(人教版)
- 农业市场风险预测-洞察及研究
- 2025年高校教师资格证之高等教育心理学考试题库附答案ab卷
- 社区党务笔试题及答案
- 中心厨房安全管理办法
- 警械培训机构管理办法
- 产品品牌评估管理办法
- 专项小组工作管理办法
- 中央外事接待管理办法
- (2025秋新修订)人教版三年级数学上册全册教案(教学设计)
- 一例股骨颈骨折个案护理
- 【经典】高一英语完形填空专题练习及答案共20篇
- MySQL数据库PPT完整全套教学课件
- 时空大数据课件
- 中医院医院感染知识考试题
- 顶管施工方案(泥水平衡法)
- 机器视觉课件
- 客舱广播词的基本知识
- 砌筑砂浆试块强度统计、评定记录表
- 重症监护室环境清洁消毒PPT
评论
0/150
提交评论