版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、关于汇编语言,.,2,汇编语言(Assemble Language),一种面向机器的程序设计语言,是一种用符号表示的低级程序设计语言(机器语言的符号化描述),通常是为特定计算机或计算机系列专门设计的。,.,3,汇编语言(Assemble Language),用汇编语言编写的程序不能由机器直接执行,而必须经汇编程序翻译成机器语言程序。,.,4,采用汇编语言进行程序设计的优点:,可以充分利用机器的硬件功能和结构特点,加快程序的执行速度,减少目标程序所占用的存储空间。 常用来编写实时控制程序、实时通信程序,有时也用来编制某些系统软件程序。,.,5,缺点:,编程效率低(与人们描述计算过程的需要差距大)
2、 与机器硬件的具体结构联系过于紧密在一种结构的机器上开发的程序极难移植到另一种不同结构的机器上去。,.,6,汇编源程序的汇编过程,.,7,一、汇编源程序文件的编辑,利用编辑软件Edit.exe或8086实验系统、SCM进行汇编语言源程序文件(.ASM)的编制。 注意: 1、静态检查(认真细致,养成习惯); 2、修改后存盘。,.,8,二、源程序文件的汇编,汇编程序分两种: 基本汇编(ASM.EXE) 宏汇编(MASM.EXE),宏汇编功能比较强。,.,9,主要功能: 检查源程序(.ASM) ; 测出源程序中的语法错误,并给出出错信息;(不能检查其算法错误) 产生目标文件(.OBJ),并可给出列表
3、文件(同时列出汇编语言源程序和机器语言目标程序的文件,称之为.LST文件)和交叉索引文件(列出程序中使用的符号、变量和标号以及引用情况,称之为.CRF文件)。 展开宏指令。,.,10,汇编示意图,.,11,三、程序的连接,汇编之后生成的OBJ文件必须经过链接过程,才能成为扩展名.EXE的可执行文件。 链接的过程: 调用连接程序(LINK.EXE),对OBJ文件进行定位、链接,最后生成扩展名为EXE的可执行文件。如果需要,也可生成内存映象文件(MAP)和库文件(LIB)。,.,12,连接示意图:,.,13,四、程序的调试 (DEBUG.COM),DEBUG PROG.EXE - U 起始地址 结
4、束地址 (反汇编) - G =起始地址 断点地址(执行) - T = 地址 (单步中断跟踪调试) - D (显示存储单元的内容) - E (修改存储单元的内容) - Q (退出 DEBUG),.,14,2.4 汇编源程序的编辑,.,15,2.4.1 汇编源程序的格式 一个基本的汇编语言程序框架如下: stack SEGMENT STACK STACK DW 32 DUP(?) stack ENDS data SEGMENT data ENDS code SEGMENT ASSUME SS:stack,CS:code, DS:data, ES:data start: MOV AX, data M
5、OV DS, AX MOV ES, AX MOV AL, 4CH INT 21H code ENDS END start,堆栈段,数据段,代码段,.,16,2.4.2 段的定义,段的定义通过SEGMENT和ENDS伪指令进行。 定义一个段的格式是: 段名 SEGMENT 定位方式 组合方式 类别名 段名 ENDS SEGMENT和ENDS必须成对出现,它们的 前面需有相同的名字,该名字为段名。 伪指令SEGMENT有3个可选择的操作数:定位 方式,组合方式和类别名。,.,17,例: STACK SEGMENT STACK DW 20DUP(?) STACK ENDS,.,18,1.段名 可以用
6、来表示段地址,如取段名为DATA的段地址送AX的指令: MOV AX,DATA 2. 组合方式 有NONE、STACK等6种。 (1) NONE即无组合方式,表示本段与其他段逻辑 上不发生关连,这是隐含的组合方式。,.,19,(2) STACK 表示本段与其他模块中的STACK组合方式的同名段组合成一个段。模块中至少有一个STACK段,否则在连接时会有一个错误。定义堆栈段时,必须有组合方式STACK。 例: 定义一个长度为32个字的堆栈 stack segment stack dw 32 dup(?) stack ends,.,20,3.定位方式有PARA、BYTE、WORD、和PAGE 4种
7、。 PARA表示本段要从16的整数倍地址开始,即段 首址的最低四位必须为0,这是隐含的定位方式。 BYTE表示本段可从任何地址开始。 WORD表示本段要从偶地址开始。 PAGE表示本段要从256的整数倍地址开始。 4. 类别名是用单引号括起来的字符串,它是任意的 一个名字。 连接时LINK将把类别名相同的所有段存放在连续的存储区域中。,.,21,2.4.3 汇编地址计数器($),$用于记录正在被汇编程序翻译的指令的地址,即它的内容标出了汇编程序当前的工作位置。如: DATA SEGMENT BUF DB 0123456789ABCDEF CONT EQU $ - BUF ;$=16 DATA
8、ENDS $的值可以用ORG来设置,其格式: ORG 数值表达式 也叫地址定位伪指令,告诉汇编程序把以下的程序或数据从表达式指定的偏移地址开始存放. 例: ORG 100H,.,22,2.4.4 段寄存器的假定,存储单元的段地址来自某个段寄存器。源程序在 代码段的开始就要对段寄存器与段之间的关系作假定, 以便宏汇编程序MASM汇编时根据指令给定的偏移地 址和段寄存器中的段地址计算出正确的物理地址。 段寄存器与段的关系,由伪指令ASSUME设定, 设定格式是: ASSUME 段寄存器: 段名, 其中段寄存器可以是CS、SS、DS、ES中的任一个,段名是用户自定义的名字。,.,23,需要说明的是,
9、伪指令ASSUME只是将段寄存器 与段间的对应关系告诉汇编程序,它并没有将段首址 置入对应的段寄存器中,这一工作要到程序最后投入 运行时才能完成。 那时系统自动将代码段和堆栈段的段首址分别置 入CS和SS,将程序段前缀PSP (program segment prefix)的段首址同时置入DS和ES。因此CS和SS不用程序处理;但对DS和ES,则必须由程序将其段首址分别置入。,.,24,例如: CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK MOV AX,DATA MOV DS,AX CODE ENDS,.,25,2.4.5 源程序的结束,源程序的结束
10、要用伪指令END,其格式是: END表达式 该伪指令用在源程序的最后,用以表示整个源程 序的结束,即告诉汇编程序,汇编工作到此结束。 其中可选项表达式的值必须是该程序的启动地址,亦就是程序的第一条可执行指令的地址。,.,26,2.5 常用系统功能调用,IBM PC微机系统为汇编用户提供了两个程序接 口。一个是DOS系统功能调用,另一个是ROM中的 BIOS(basic input/output system)。系统功能调用和 BIOS由一系列的服务子程序构成,但调用与返回不 是使用子程序调用指令CALL和返回指令RET,而是 通过软中断指令INT N和中断返回指令IRET调用和返 回。 我们仅
11、介绍DOS系统功能调用。,.,27,2.5.1 系统功能调用,系统功能调用是IBM PC微机系统为汇编用户提 供的一个程序接口。系统功能调用共有4类。我们仅 介绍设备管理系统功能调用中基本的I/O管理功能。 使用系统功能调用的一般过程为:把调用号放入 AH中,设置入口参数,然后执行INT 21H指令,最后 分析处理出口参数。 键盘和显示器的DOS功能调用如表2-3所列。 本节仅介绍常用的1、2、9、10等4个系统功能调 用。,.,28,调用方法,.,29,1. 1号功能调用(单个字符的输入并回显) MOV AH,1 INT 21H 执行该调用时将等待键入,一旦有键按下就将该按键字符的ASCII
12、码读入AL,并同时显示该字符。 2 . 2号功能调用(单个字符的显示) MOV DL,待显示字符的ASCII码 MOV AH,2 INT 21H 本调用执行后,显示器显示待显示的字符。,.,30,3. 9号功能调用(字符串的显示) MOV DX,待显示字符串的首偏移地址 MOV AH,9 INT 21H 本调用执行后,显示器显示待显示的字符串。执 行前要在DS数据段定义一以$结尾的字符串。 当需要输出数据区中某一字符串时,若该字符串 的尾部无 $,一定要在其尾部置入一个 $。,.,31,4. 10号功能调用 MOV DX,数据区的首偏移地址 MOV AH,10 INT 21H 这一功能调用从键
13、盘输入字符串到指定的内存区域,该内存区域称为缓冲区,因此调用此功能必须在数据段中定义一个缓冲区,其中第一个字节用于定义缓冲区可存放的字符个数,第二个字节是保留给系统填入实际输入的字符个数,第三个字节开始用来存放键盘输入的字符。例如从键盘输入3F个以内的字符到内存单元中,缓冲区定义和系统功能调用如下: BUFF1 DB 3FH ;缓冲区容量为3F个字节 DB ? ;实际输入的字符个数 DB 3FH DUP (?) ;输入字符的存储区域 ,.,32,LEA DX, BUFF1 ;入口参数,把缓冲区首地址送DX MOV AH, 0AH ;功能号送AH INT 21H ;调用系统功能子程序 以上程序中
14、,由变量定义语句定义了一个可以存放3F个字符的缓冲区,当程序执行到最后一条指令时,系统等待用户键入一个字符,其相应的ASCII码值被写入缓冲区中,直至键入回车键。由于回车键的ASCII码也被写入缓冲区,所以缓冲区实际可以写入的字符长度为3E个字节,当输入第3E个字符后,系统不再接受其他字符,键入回车后,系统把实际键入的字符数写入缓冲区的第二个字节,此时,系统调用功能结束。,.,33,最后,要特别强调的是:2号功能调用、9号功能 调用和10号功能调用虽然未使用AL,但调用后也会破 坏AL中原来的内容。为防止AL中原来的内容被破坏, 在调用前应先保护AL,调用后再恢复。,.,34,2.5.2 功能
15、调用应用举例,例2 .5 编写汇编语言源程序,在显示器上显示 wish you success!。 只需将欲显示字符串的ASCII码存放到字节变量 数据区中(字节变量数据区一定要以 $ 结束),用9 号功能调用即可显示该字符串。程序如下: OBF DB wish you success!$ MOV DX, OFFSET OBF MOV AH, 9 INT 21H,.,35,例2 .6 将键入的4位十进制数(如5,则键入0005)以压缩BCD数形式存入字变量SW中。 程序如下:,.,36,IBUF DB 5, 0, 5 DUP (?) SW DW 0 MOV DX, OFFSET IBUF ;1
16、0号功能调用 MOV AH, 10 INT 21H MOV AX, WORD PTR IBUF+4 ;键入的个位和十位送AX AND AX, 0F0FH ; ASCII码变非压缩BCD数 MOV CL, 4 SHL AL ,CL ;将10位移至AL的高4位 OR AL, AH ;将10位和个位拼合在AL中 MOV BYTE PTR SW,AL ;存BCD数字的十位和个位,.,37,MOV AX, WORD PTR IBUF+2 ;键入数的百位和千位送AX AND AX, 0F0FH ; ASCII码变非压缩BCD数 SHL AL ,CL ;将千位移至AL的高4位 OR AL, AH ;千位和百
17、位拼合在AL中 MOV BYTE PTR SW+1,AL;存千位和百位,.,38,例2 .7 镜子程序。 “镜子”程序的功能是接收并回显键盘输入的一 串字符,然后在下一行再将该串字符显示出来。可见 该功能主要由10号功能调用和9号功能调用来完成。 根据10号功能调用的入口参数,在数据段定义了字节 变量IBUF。第1个单元是允许键入字符数FFH,即最 多可接收除回车外的254个任意字符和一个回车;第2 单元是预留装载实际键入字符个数的;从第3单元开 始是预留装载键入字符的。,.,39,10号功能调用结束后,只要把字符 $放入存放回 车的单元 ,即可使用9号功能调用把自IBUF+2单元开始的字符送显示器显示。 镜子程序如下: OBUF DB , 0DH, 0AH, $ IBUF DB 0FFH, 0,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 厨师试题及答案大全
- 护理专业角色定位
- 抑郁障碍患者的护理专业标准
- 护理安全法律法规解读
- 护理查对的增强现实技术
- 护理研究护理评估
- 护理泌尿系统疾病护理
- 护理查房:伤口护理与换药技巧
- 护理基础护理学案例分析
- 护理基础技能学习资料
- 口腔护理入编试题及答案
- 2026《超龄劳动者基本权益保障暂行规定》解读
- 湖南农发环保科技有限责任公司招聘笔试题库2026
- 2026年交通辅警测试题及答案
- 2026天津华北地质勘查局及所属事业单位第二批招聘7人笔试备考试题及答案详解
- 2026海南陵水黎族自治县县属国有企业第一批招聘60人笔试模拟试题及答案详解
- 中国医院护理管理指南2025版
- 2026年无损检涡流检二级考核模拟题库附参考答案详解【考试直接用】
- 悬索桥工程监理实施细则
- (高清版)DZT 0426-2023 固体矿产地质调查规范(1:50000)
- 全国矿产资源潜力评价总体实施方案
评论
0/150
提交评论