




已阅读5页,还剩79页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机原理与接口技术第四章 林新Lx 北京航空航天大学自动化学院 1 主要内容 汇编语言程序的组成 指令和伪指令的基本书写格式 常用伪指令 数据定义 符号定义 指定存贮单元类型 段定义 定位类型及连接类型 段寄存器说明 过程 子程序 定义 多模块间相互调用 源程序结束 汇编语言程序的执行过程 汇编语言源程序的编写 汇编 MASM EXE的使用 与连接 LINK EXE的使用 运行及调试工具软件DEBUG COM常用命令的使用常用DOS子程序 INT21H的1 2 9 A号功能 调用 入口参数 出口参数 不同结构程序设计举例 简单程序 分支程序 循环程序 子程序设计 主程序 子程序 主程序 子程序 宏 多模块程序设计 2 汇编程序编写 编译和运行 编辑程序 汇编程序MASM 链接程序LINK 源程序 目标文件 可执行文件 3 4 1汇编语言程序格式和伪指令4 1 1汇编语言程序格式 汇编语句一行只能写一条汇编语句 一条汇编语句也只能写在一行内 分为指令性语句和伪指令语句 指令语句编译器转换为二进制代码后由CPU执行伪指令语句告诉编译器如何进行编译 没有对应的机器码 因此也就不会由CPU执行 4 1 指令性语句 指令性语句 标号 指令助记符 操作数 操作数 注释 5 1 标号标号的取名规则 可由字母 数字 下划线等特殊字符组成首字符必须为字母或某些特殊字符 不能为数字 数值常量必须以数字开头 名字最长31个字符保留字不能作为名字标号具有3种属性 段基址 偏移地址 类型 标号 指令助记符 操作数 操作数 注释 6 2 指令助记符指令语句中必须的部分 标号 指令助记符 操作数 操作数 注释 7 操作数项操作数可以是常数 寄存器 存储区 变量 标号 表达式 其中常数 变量和标号是三种基本数据项 常数变量标号 标号 指令助记符 操作数 操作数 注释 8 9 10 变量用符号表示的存放在存储单元中的可变数值 由DB DW DD等伪指令定义 具有三种属性 段基址 偏移地址 类型 注释用于说明指令或程序的功能增强程序可读性 标号 指令助记符 操作数 操作数 注释 11 2 伪指令语句 名字 伪指令指示符 操作数 注释 名字伪指令指示符操作数注释 12 3 表达式和运算符 常数 符号 寄存器通过运算符连接起来的式子称为表达式 表达式的计算不是由CPU完成 二是在汇编时由编译程序完成 表达式所使用的运算符 表4 1 算术运算符 MOD SHL SHR逻辑运算符 AND OR XOR NOT关系运算符 EQ NE LT LE GT GE数值返回 OFFSET SEG TYPE SIZE 修改属性 PTR THIS HIGH LOW SHORT 其它 13 1 算术运算符 包括 MOD SHL SHR运算的结果和对象都是整数 14 例ARRAYDB1 2 3 4 5 6 7 8TRYDB20MOVAX 30 5MOVCX TRY ARRAY 数组长度存入CX 上述语句等效于 MOVAX 150MOVCX 8 15 例DAEQU300MOVAX DA 80MOVBX DAMOD100MOVCX DA 100MOVDH 01100100BSHR2 上述语句等效于 DAEQU300MOVAX 200MOVBX 0MOVCX 3MOVDH 19H 16 补充 现行地址符 程序计数器 表示当前指令 数据或者位置的偏移地址例4 1DATASEGMENTDT1DB33LISTDB12 38 5 29 74CONTEQU LIST COUNT 当前 所在位置的DT2DB E 地址 LIST的偏移地址DATAENDS MOVCX COUNT 数组长度 CX 17 2 逻辑运算符和关系运算符 AND OR XOR NOT只能对常数进行运算 得到的结果也是常数与指令的区别 EQ NE LT LE GT GE关系运算符的两个操作数必须是数据 或是同一段内的两个存储单元的地址 运算结果是一个数值 若为真 输出全是1 即0FFH或0FFFFH 若为假 则输出全是0 18 例MOVAL NOT0FFHMOVBL 8CHAND73HMOVAH 8CHOR73HMOVCH 8CHXOR73H 上述语句等效于 MOVAL 0MOVBL 0MOVAH 0FFHMOVCH 0FFH 19 例MOVAX 10HGT16MOVBL 6EQ0110BMOVCX PORTLT5 AND100 OR PORTGE5 AND200 上述语句等效于 MOVAX 0MOVBL 0FFHMOVCX 100 PORT 5时 20 3 数值返回 加在变量或标号前 返回运算对象的某个参数值 OFFSET 返回偏移地址SEG 返回段基址TYPE 返回变量类型属性LENGTH 返回DUP的单元数 如果是变量则返回1SIZE 等于TYPE LENGTH 21 TYPE返回类型 22 TYPE例 000620A1DB20H0007 A2DW 0009 A3DD 000D A4DQ 0015 A5DT 001EB401MOVAH TYPEA10020B402MOVAH TYPEA20022B404MOVAH TYPEA30024B408MOVAH TYPEA40026B40AMOVAH TYPEA50028B4FFMOVAH TYPETMP NEAR002AB4FEMOVAH TYPETMP FAR 23 LENGTH例M1DW100DUP M2DW1 2 3M3DB ABCD MOVCX LENGTHM1MOVBL LENGTHM2MOVAL LENGTHM3 上述语句等效于 MOVCX 100MOVBL 1MOVAL 1 24 SIZE SIZE TYPE LENGTH 例M1DW100DUP M2DW1 2 3M3DB ABCD MOVCX SIZEM1MOVBL SIZEM2MOVAL SIZEM3 上述语句等效于 MOVCX 200MOVBL 2MOVAL 1 25 4 修改属性 包括段操作符 PTR THIS HIGH LOW SHORT NEAR FAR 用来修改变量或标号的属性 如段属性 偏移地址属性 类型属性等等 26 段操作符PTR例N1DB15H 36HN2DW1122H 3344HLO MOVAX WORDPTRN1 AX 3615HMOVBL BYTEPTRN2 BL 22H 27 优先级 28 4 1 2伪指令语句 变量定义语句表达式赋值语句段定义语句过程定义语句程序开始和结束语句 29 1 段定义语句 格式 段名SEGMENT定位类型组合类型 分类名 逻辑段内容段名ENDS 30 段定义由伪操作SEGMENT开始 ENDS结束 SEGMENT和ENDS必须成对出现语句前必须有段名 段名必须相同SEGMENT和ENDS语句之间可以包含有指令和其他伪操作程序中可以定义多个段 段定义语句允许嵌套 即逻辑内允许设置其它逻辑段 但不允许逻辑段交叉设置 31 定位类型 PARA BYTE WORD PAGE组合类型 NONE PUBLIC COMMON AT STACK MEMORY分类名 作用是在汇编的Link时将所有分类名相同的逻辑段组成一个段组 32 2 段分配 格式 ASSUMECS 段名 DS 段名ASSUMESS 段名 ES 段名用户可以设置多个逻辑段 但只允许4个逻辑段同时有效4种逻辑段不一定全部定义 只有代码段是必须的可以使用NOTHING来取消前面逻辑段的定义 如ASSUMEES NOTHING 33 段定义和段分配举例 DATASEGMENTD1DW1234HD2DW5678HP1DD P2DD DATAENDSSTK1SEGMENTSTACK STACK DW100DUP STK1ENDSCODESEGMENTASSUMECS CODE DS DATAASSUMESS STK1MAINPROCFARSTART MOVAX STACK 初始化SSMOVSS AXPUSHDS 返回DOS用 34 SUBAX AXPUSHAXMOVAX DATA 初始化DSMOVDS AXL1 MOVAX D1MULD2 DX AX D1 D2MOVBX OFFSETP1 MOV BX AXMOV BX 2 DXRETMAINENDPCODEENDSENDSTART 35 3 过程定义语句 格式 过程名PROC属性 过程内容RETN过程名ENDP过程名的三种属性 段属性 偏移地址属性 距离属性 36 例DATASEGMENTONEDB22 33 44 55TWODB55 66 77 88SUMDB20DUP DATAENDSSTKSEGMENTSTACK STACK STTDW100DUP TOPEQULENGTHSTTSTKENDSCODESEGMENTASSUMECS CODE DS DATA SS STK ES DATAMAINPROCFARSTART MOVAX STACK 初始化SSMOVSS AXMOVSP TOPPUSHDS 返回DOS用SUBAX AXPUSHAXMOVAX DATA 初始化DS ESMOVDS AXMOVES AX 37 CODESEGMENTMAINPROCFAR MOVCX 4LL CALLABCLOOPLLRETMAINENDPABCPROCNEARLODSBL1 ADCAL BX DAASTOSBINCBXRETABCENDPCODEENDSENDSTART 38 例远过程定义及调用MCODESEGMENTMPAPROCFAR RETMPAENDPMPBPROC CALLNEARPTRMPA 同一段内调用 近调用 MPBENPDMCODEENDSNCODESEGMENT 另一代码段NPAPROC CALLMPA 远过程调用 NPAENDPNCODEENDS 39 4 变量定义语句 包括DB DW DD DQ DT 分别定义1 2 4 8 10个字节的存储单元 用DW定义字符串时 只能包括2个字符 多于2个字符只能用DB操作数用 定义不确定值的变量操作数DUP用来定义重复变量用DW可以将变量或标号的偏移地址存入存储器 DD可以将变量或标号的偏移地址存入低字位 段基址存入高字位 40 5 表达式赋值语句 包括EQU PURGE用来给变量 标号 常数 指令 表达式定义一个符号名PURGE用来取消EQU的定义 41 例COUNTEQU100DATE1EQUCOUNT 2MOVSI COUNTMOVBX DATE1A1EQU BX SI B1EQUOFFSETA1C1EQUADDMOVAX A1MOVCX B1C1CX AXPURGECOUNT COUNT不再替代100 42 6 程序开始和结束语句 包括NAME ORG END 格式 NAME程序名 可以省略格式 ORG表达式 表达式计算结果必须是正整数 格式 END标号名 END放在源程序的最后一行 标号为主程序模块的第一条可执行语句的标号 43 例4 15DATASEGMENTORG1200A1DB12H 34HORG2000HA2DW3040H 2830HDATAENDS 44 例 CODESEGMENTORG100HASSUMECS CODESTART MOVAX DATA SUB1PROCNEAR SUB1ENDPCODEENDSENDSTART 45 4 1 3汇编语言程序框架 一个完整的汇编程序包括 段定义 段分配 设置段地址 返回DOS语句以及程序结束 必要时还有过程调用和宏汇编 46 DATASEGMENTDA1DB sample DATAENDSSTACKSEGMENTSTACKST1DB100DUP STACKENDSCODESEGMENTMAINPROCFARASSUMECS CODEASSUMEDS DATAASSUMESS STACKSTART MOVAX DATAMOVDS AXMOVAH 9MOVDX OFFSETDA1INT21HMOVAH 4CH 返回DOSINT21HRETMAINENDPCODEENDSENDMAIN 1 程序结构 分段结构 程序可由多个段构成 至少有一个代码段段定义 段分配 设置段地址每段由伪指令SEGMENT开始 由ENDS结束 由ASSUME伪指令分配逻辑段段寄存器赋值 DS ES SS CS不能在程序中赋值 程序由数条语句构成 每条语句占一行 指令语句 伪指令语句程序中设有返回DOS的功能 程序最后为END结束语句 后跟启动地址 47 例在屏幕上显示字符串 Thisisasampleprogram DATASEGMENTDA1DB Thisisasampleprogram DB0DH 0AH DATAENDSSTACKSEGMENTST1DB100DUP STACKENDSCODESEGMENTMAINPROCFARASSUMECS CODE DS DATAASSUMESS STACKSTART MOVAX STACKMOVSS AXMOVSP SIZEST1 PUSHDS 返回DOSMOVAX 0PUSHAXMOVAX DATAMOVDS AXMOVAH 9MOVDX OFFSETDA1INT21HRETMAINENDPCODEENDSENDSTART 48 2 堆栈设置 堆栈用于存放程序运行过程中需要保护的地址或数据 执行CALL指令时 用于保存返回地址响应中断时 用于保护断点和现场信息可在程序中定义堆栈 在代码段中给SS和SP赋初值 也可以由操作系统自动设置 49 3 返回DOS操作系统 三种方法 执行4CH号DOS功能调用返回DOSMOVAX 4C00HINT21H对于 COM文件 可用INT20H返回DOSINT20H主程序开始将DS和00入栈 在程序结束时执行RET指令 即可返回DOSPUSHDSSUBAX AXPUSHAX RET 50 程序段前缀PSP 程序段前缀PSP ProgramSegmentPrefix 是一个具有256个字节的信息区 是可执行文件 EXE和COM 所特有的 其内容在操作系统装入该文件运行时存入 51 PSP 内存 INT20H DATA1 0000 DATA1 00FF DATA1 0100H 数据段 自动 方法 的原理 程序运行时 操作系统自动设置PSP 段基址DATA1设置默认数据区 并将段基址赋值给DS 段基址与PSP的段基址相同 DS DATA1运行用户编写的程序 先执行PUSHDSSUBAX AXPUSHAX程序结束 返回时执行RET指令堆栈段中的0000 IP DATA1 CS则 程序转移到CS IP DATA1 0000 处执行 执行DATA1 0000处的指令INT20H 返回DOS 代码段 DATA1 00 00 堆栈段 自动 52 4 2DOS系统功能调用 DOS功能调用INT21键盘输入 显示字符 53 DOS具有对I O设备和磁盘文件进行管理的功能 它们一部分被固化在系统的ROM中 作为ROMBIOS模块 另一部分存放在磁盘上 当系统启动时装入内存 用户的应用程序和MS DOS的大部分命令都通过软件中断来调用它们 54 1 键盘输入 从控制台输入一个字符到AL中 1 8 6 7号功能调用都可以实现 差别是1和6号在输入字符的同时在屏幕上显示 8和7号功能不回显 55 1 1号功能 从键盘输入字符并显示 入口参数无功能号AH 01H类型号21H出口参数AL 键入字符的ASCII码实现功能等待从键盘输入一个字符 并在屏幕上回显 光标移动 检测Ctrl Break键 56 例利用键盘输入的字符产生分支 KEY MOVAH 1 等待从键盘输入INT21HCMPAL 1 是 1 JEONECMPAL 2 是 2 JETWOCMPAL 3 是 3 JETHREEJMPKEYONE TWO 57 2 6号功能 直接控制台输入 输出 入口参数DL 0FFH功能号AH 06H类型号21H出口参数若ZF 0 则AL 键入字符的ASCII码 ZF 1表示无键按下实现功能等待从键盘输入一个字符 并在屏幕上回显 光标移动 不检测Ctrl Break键DL 0FFH表示从键盘输入 否则是向显示器输出 58 3 0A号功能 从键盘接收字符串存入缓存区 入口参数DS DX 缓冲区的首地址 DS DX 限制最多输入的字符数功能号AH 0AH类型号21H出口参数 DS DX 1 实际键入的字符 不含回车符 从 DS DX 2 开始顺序存放键入的字符串回车符0DH为串尾最后一字符 实现功能等待从键盘输入字符串 并存入设定的缓冲区内 同时回显字符串 光标随着移动 回车符使光标回到行首 注意事项 应按要求先定义缓冲区 再调用 59 缓存区要求 第一个字节 指明最大能容纳的字符数第二个字节 实际输入的字符数剩余字节 存放从键盘输入的字符 直到Enter结束DS DX指向缓存区的第一个字节 60 例 DATASEGMENTBUFFDB100DB DB100DUP DATAENDSCODESEGMENTMAINPROCFARASSUMECS CODE DS DATASTART MOVAX DATAMOVDS AXMOVDX OFFSETBUFFMOVAH 0AH 0AH INT21H 61 假设从键盘输入 ABCD 回车 内存的存放结果 62 0AH功能执行过程 若 DS DX 字节单元的值为0 则不等待从键盘输入 结束调用 若 DS DX 字节单元的内容大于0 则等待从键盘输入 并把输入键的ASCII码顺序存放在DS DX 2开始的单元 按回车键表示结束输入 当按下键的个数超过 DS DX 中值 发出警告声 嘟嘟 不再接收输入的数据 直到输入回车键 将实际输入的字符个数 不包括回车键 填入 DS DX 1 结束调用 63 0AH功能注意事项 输入的字符均带回显 且光标随字符移动 当输入回车符结束时 也回显回车符 表现为功能调用结束后 光标回到了行首 回车符0DH作为一个输入的字符存放在字符串尾 但计数输入个数时 不包括回车键 实际最多能输入的字符数 限制的最多数 1 回车符占一个 执行完0AH功能后 DS和DX的值不变 DS DX仍指向缓冲区的首地址 整个缓冲区的大小应为 限制的最多数 2 64 2 字符显示 65 1 2号功能 将字符送到屏幕显示 入口参数DL 要显示字符的ASCII码功能号AH 02H类型号INT21H出口参数无实现功能显示指定字符 光标随动 66 2 6号功能 直接控制台输入输出 入口参数DL 要显示字符的ASCII码 不能是FFH 功能号AH 06H类型号INT21H出口参数无 67 3 9号功能 显示字符串 入口参数在内存中定义要显示的字符串字符串尾必须为 DS DX 字符串的首地址功能号AH 09H类型号21H出口参数无实现功能显示字符串 遇 停止显示 光标随动 68 例 DATASEGMENTCREQU0DHLFEQU0AHMESDB HOWDOYOUDO CR LF DATAENDSCODESEGMENTMAINPROCFARASSUMECS CODE DS DATASTART MOVAX DATAMOVDS AXMOVDX OFFSETMESMOVAH 9INT21HRETMAINENDPCODEENDSENDSTART 69 4 3程序设计方法 程序设计步骤一般为 分析问题 得到数学模型或者算法绘制程序流程图分配存储空间按流程图编写程序程序编译 调试运行程序 分析结果 70 汇编语言程序设计通常用到4种程序结构 顺序结构分支结构循环结构子程序结构 71 4 6宏汇编 宏定义格式宏在程序中的调用宏展开 汇编对宏的处理宏调用中的参数传递宏定义嵌套 72 1 宏定义 在使用宏之前必须先定义宏 定义宏一般格式如下 宏名MACRO 形参1 形参2 宏的定义体ENDM 73 在书写宏定义时 必须遵照下列规定 MACRO和ENDM是二个必须成对出现的关键字 它们分别表示宏定义的开始和结束 MACRO和ENDM之间的部分是宏的定义体 它是由指令 伪指令或引用其它宏所组成的程序片段 是宏所包含的具体内容 宏名 是由程序员指定的一个合法的标识符 它代表该宏 74 宏名可以与指令助忆符 伪指令名相同 在这种情况下 宏指令优先 而同名的指令或伪指令都失效 在ENDM的前面不要再写一次宏名 这与段或子程序定义的结束方式有所不同 在宏定义的首部可以列举若干个形式参数 每个参数之间要用逗号分隔 75 例p4 1 定义一个把16位数据寄存器压栈的宏 PUSHRMACROPUSHAXPUSHBXPUSHCXPUSHDXENDM 76 例p4 2 定义二
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 核酸分子杂交技术解析
- 健康真相馆养生知识培训课件
- 供销社企业知识培训课件
- 重点人入库管理办法
- 铁屑撕碎机管理办法
- 银联卡收单管理办法
- 2025年退役军人职业适应测试题及答案
- 中学科研奖励管理办法
- 企业用电安全培训心得课件
- 企业暑期安全培训课件
- 2025年度中国工商银行河南省分行社会招聘120人备考练习试题及答案解析
- (2025年标准)酒店政府采购协议书
- 2025河北保定市唐县招聘社区工作者64人考试备考试题及答案解析
- 2025年菏泽市中考英语试卷真题(含答案及解析)
- 2025至2030年中国物业管理行业市场发展现状及投资前景展望报告
- 苏教版三年级上册数学全册教学设计(配2025年秋新版教材)
- 《2025基本医疗卫生与健康促进法》知识测试题附答案
- 2025云南昆明巫家坝建设发展有限责任公司招聘23人笔试参考题库附答案解析
- 逐梦飞翔·奋进高二-高二上学期开学第一课主题班会课件
- 《心系国防 强国有我》 课件-2024-2025学年高一上学期开学第一课国防教育主题班会
- 科技文献检索与利用
评论
0/150
提交评论