第五章汇编语言程序设计.ppt
《第五章汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《第五章汇编语言程序设计.ppt(97页珍藏版)》请在三一文库上搜索。
1、第五章 汇编语言程序设计,程序是计算机命令(语句)的有序集合。 机器语言、汇编语言、高级语言 机器语言是一种用二进制数表示指令和数据,能被机器直接识别的语言。 汇编语言弥补了机器语言的不足,采用助记符编程。但也是面对机器的,要求程序员对机器指令系统、内存空间分配了如指掌,地址是汇编语言关键所在,执行速度快,但可移植性差。 高级语言是面向过程的,程序员没必要了解内存分配,更符合人的思维方式,执行速度相对慢一些,可移植性好。,5.1汇编语言的基本语法,汇编语言源程序中的语句可以分为三种类型:指令语句,伪指令语句和宏指令语句。 (1) 指令语句:它是能产生目标代码,CPU 可以执行的能完成特定功能的
2、语句。 (2) 伪指令语句:它是一种不产生目标代码的语句,它仅仅在汇编过程中告诉汇编程序应如何汇编。伪指令语句是汇编程序在汇编时使用的。 (3) 宏指令语句: 它是一种编程者利用伪指令语句自己定义的语句 。,1.伪指令的语句格式,1)标号 标号名字段,它是任选字段。目标名后面不能用冒号“:”,标号名可以是常量名、变量名、过程名、结构名、记录名等。可以作为指令语句和伪指令语句的操作数,这时,标号名表示一个常量或存储器地址。,2)伪指令 助记符或伪操作字段,不可省略。伪指令种类很多,如定义数据伪指令DB,DW,DD;段定义伪指令SEGMENT;定义过程伪指令PROC;。它们是伪指令语句要求汇编程序
3、完成的具体操作命令,3)操作数 本字段是否需要,需要几个,需要什么样的操作数等都由伪指令字段中伪指令来确定。操作数可以是一个常数(二进制、十进制、十六进制等)、字符串、常量名、变量名、标号、一些专用的符号(如BYTE,FAR,PARA等)。,4)注释 任选字段,它必须以分号为开始,它的作用与指令语句的注释字段相同。,2.常数、变量和标号,常数、变量和标号是汇编语言能识别的数据项,它是指令和伪指令语句中操作数的基本组成部分。一个数据项包含有它的数值和属性两部分,这两部分对一条语句汇编成机器目标代码都有直接关系。,1) 常数 常数是没有任何属性的纯数值。在汇编期间,它的值已能完全确定,且在程序运行
4、中,它也不会发生变化。,2) 变量 变量是代表存放在某些存储单元的数据,这些数据在程序运行期间随时可以修改。为了便于对变量的访问,它常常以变量名的形式出现在程序中,它可以认为是存放数据存储单元的符号地址。,(1)变量的定义与预置:定义变量就是给变量分配存储单元,且对这个存储单元赋予一个符号名变量名,同时将这些存储单元预置初值。 定义变量是用数据定义伪指令DB,DW,DD等。例如: VAR_DATA SEGMENT DATA1 DB 12H DATA2 DB 34H DATA3 DW 5678H VAR_DATA ENDS,(2)数据定义伪指令:为数据项分配存储单元并预置初值。, 数值表达式。
5、DA_BYTE DB 50H, 50 DA_WORD DW 0A3F1H, 4981H, ?表达式:不带引号的?表示可预置任何内容。,DA_B DB ?,? DA_W DW ?,?, 字符串表达式:对于DB伪指令,为字符串中每一个字符分配一个字节单元。字符串必须是用引号括起来且不超过255个字符。字符串自左至右以字符的ASCII码按地址递增的排列顺序依次存放。,STRING1 DB ABCDEF,STRING2 DW AB, CD, EF,STRING3 DD AB, CD, 带DUP表达式:DUP是定义重复数据操作符。,D_B1 DB 20H DUP(?) D_B2 DB 10H DUP(A
6、BCD) D_W1 DW 10H DUP(4),3) 标号 标号是一条指令目标代码的符号地址,它常作为转移指令(含子程序调用指令)的操作数。,LOP1: LOOP LOP1 JNE NEXT NEXT: ,(1)段属性 (2)偏移量属性: (3)距离属性: NEAR(近); FAR(远),(1)SEG 格式:SEG 功能是求符号名所在段的段基址。 (2)OFFSET 格式:OFFSET 功能是求符号名所在段的偏移地址。 (3)TYPE 格式:TYPE 功能是获得符号名类型值。,3.运算符,(4)SIZE 格式:SIZE 功能是获得为符号名分配的字节数。为符号名定义的数据项必须是用重复格式DUP
7、( )定义的。 (5)PTR 格式: PTR 功能是定义符号名为新类型。如,设内存变量D1是字节属性,把它的两个字节内容送到AX中,MOV AX,WORD PTR D1, 5.2 伪指令,伪指令没有对应的机器指令,它不是由86系列CPU来执行,而是由MASM-86识别,并完成相应的功能。它在很大程度上规定了MASM-86的性能,因此也可称之为汇编命令。,1.符号定义伪指令(赋值语句),1) EQU 格式: EQU 2) 格式: = ,2 .内存数据定义伪指令,1) 字节定义伪指令DB 格式: 名字 DB ,3) 4字节定义伪指令DD 格式: 名字 DD ,2)字定义伪指令DW 格式: 名字 D
8、W ,3. 段定义伪指令,1). SEGMENT/ENDS 格式: SEGMENT 定位方式连接方式类 型名 ENDS,段定义伪指令为程序的汇编和连接说明了段名、段的各种属性以及段的开始和结束。段名是自定义符,开始的段名与结束的段名必须相同。段的长度不超过64KB。,(1)定位方式(定位类型Align):定位方式指定段的起始地址边界,方式有4种。 PAGE指定起始地址的低8位是0,即其值能被256整除(称为页对齐)。 PARA指定起始地址的低4位是0,即其值能被16整除(称为段对齐)。这是系统隐含定位方式。 WORD指定起始地址的最低位是0,即其值能被2整除(称为字对齐)。 BYTE指定起始地
9、址是任意值(称为字节对齐)。,(2)连接方式(组合类型):连接方式告诉连接程序,本段与其他段可按某种方式连接,它有6种选择。 PUBLIC告诉连接程序本段与其他同名同类别的段连接起来,公用一个段的起始地址,形成一个物理段。 STACK表示本段是堆栈段,连接方式同PUBLIC,连接后的段起始地址在SS寄存器中。连接程序要求源程序至少要有一个堆栈段,否则提示错误,此时,系统取约定堆栈段值。,空缺(NONE)表示本段不与任何段连接,这是系统隐含连接方式。 COMMON表示本段与同名同类型的段共用同一段起始地址,即同名同类段相重叠,段的长度是最长段的长度。 MEMORY表示本段在连接时定位在所有段之上
10、,即高地址处。 AT表达式表示本段定位在表达式值指定的段地址处。,2). ASSUME 格式:ASSUME 段寄存器:段定义名1 ,段寄存器:段定义名2, ASSUME伪指令告诉汇编程序,将某一个段寄存器设置为存放某一个逻辑段的段地址,即明确指出源程序中的逻辑段与物理段之间的关系。当汇编程序汇编一个逻辑段时,即可利用相应的段寄存器寻址该逻辑段中的指令或数据。在一个源程序中,ASSUME伪指令定义符应该放在可执行程序开始位置的前面。 ASSUME伪指令只是通知汇编程序有关段寄存器与逻辑段的关系,并没有给段寄存器赋予实际的初值。用户需要通过指令给有关段寄存器赋值。,.STACK 64 .DATA
11、DATA1 DB 15H DATA2 DB 29H SUM DB ? .CODE,3. 简化段定义 “.CODE”、“.DATA”和“.STACK”来分别对应寄存器CS、DS和SS。,例如以下代码片段:,MAIN PROC FAR MOV AX, DATA MOV DS, AX ,STSEG SEGMENT DB 64 DUP (?) STSEG ENDS,4 过程(子程序)定义伪指令,格式: PROC NEAR(或 FAR) ENDP 定义过程是为实现子程序调用而设的。调用格式为: CALL ,过程起始名和终止名必须相同。,5 模块定义与连接伪指令,1)NAME 格式: NAME 模块名 该
12、伪指令说明程序模块的开始,并指出模块名。模块名是自定义符,它不能是系统保留字,每次汇编只能出现一次。若该伪指令默认,则取TITLE语句中的页标题前6个字符;若没有TITLE语句,则取源程序文件名为模块名。,2)END 格式: END 启动标号或过程名,该伪指令告诉汇编程序源文件结束,对于END后的语句可以不予理会,并给出执行程序的入口位置。END伪指令将标号的段值和偏移地址分别提供给CS和IP寄存器。方括号中的标号是任选项。如果有多个模块连接在一起,则只有主模块的END语句使用标号。,6 .列表伪操作,1)LIST 汇编程序遇到伪操作.LIST时,禁止其后的源程序和目标代码在列表文件中输出,直
13、到下一个.LIST为止。.LIST伪操作规定将后面的源程序和目标代码列表输出。这个伪操作相当于列表文件的默认状态。,2)TITLE 格式: TITLE 标题名 功能是指定列表文件每一页的标题名,标题名可以是不超过80个字符的字符串。 当源程序中未用NAME伪操作时,由TITLE伪操作指定的标题名的前六个字符,同时作为汇编以后得到的目标程序的模块名。 如:TITLE Main Program,3)PAGE 伪操作命令用来在汇编程序中设置列表文件每页的长度(行数)和每行的宽度(列数)。页长可以是10255行,默认值为50行;行宽为60132字符,默认值为80字符。,7.其他伪操作,1)RADIX
14、通常,汇编语言源程序中常数的默认基数为十进制数,伪操作命令.RADIX可以改变这个默认的基数,格式为: .RADIX 表达式,2)定位伪指令 ORG 格式: ORG 该伪指令把以下语句定义的内存数据或程序,从表达式指定的起点(偏移地址)开始连续存放,直至遇到新的ORG指令。表达式的值是一个无符号数。它一般用于数据段或代码段中。,5.3 系统功能调用,DOS(Disk Operation System)和BIOS(Basic Input and Output System)为用户提供了两组系统服务程序。用户程序可以调用这些系统服务程序。 但在调用时应注意:,第一,不用CALL命令; 第二,不用这
15、些系统服务程序的名称,而采用软中断 指令INT n; 第三,用户程序也不必与这些服务程序的代码连接。,BIOS是微机的基本I/O系统。包括系统测试程序、初始化引导程序、一部分中断矢量装入程序及外部设备的服务程序。由于这些程序固化在ROM中,只要机器通电,用户便可以调用它们。,DOS是微机的操作系统,负责管理系统的所有资源,协调微机的操作,其中包括大量的可供用户调用的服务程序,完成设备的管理及磁盘文件的管理。,第一个途径是普通用户从键盘输入命令,DOS的COMMAND.COM模块接收、识别、处理键入的命令。 第二个途径是高级用户通过用户程序去调用DOS和BIOS中的服务程序,高级用户需要对操作系
16、统有较深入的了解。,1) 用户与DOS的关系,2)用户程序控制微机硬件的方式,2.DOS系统功能调用,8086/8088指令系统中,每执行一条软中断指令INT n,就调用一个相应的中断服务程序。 当n=51FH时,调用BIOS中的服务程序, 当n=203FH时,调用DOS中的服务程序。其中, INT 21H是一个具有多种功能的服务程序,一般称之为DOS系统功能调用。,DOS中断的规定,输入入口参数,然后执行INT指令,最后分析出口参数。,INT 21H 具有80个子功能中断服务程序,子功能的编号称为功能号。INT 21H功能大致可以分为四个方面,即设备管理、目录管理、文件管理和其他。,设备管理
17、:键盘输入、显示器输出、打印机输出、串行设备输入/输出、初始化磁盘、选择当前磁盘、取剩余磁盘空间等。 目录管理:查找目录项、查找文件、置/取文件属性、文件改名等。 文件管理:打开、关闭、读/写、删除文件等,这是DOS提供给用户的最重要的系统功能调用。 其他功能:终止程序、置/取中断矢量、分配内存、置/取日期及时间等。,功能调用的格式: 传送入口参数到指定寄存器中; 功能号送入AH寄存器; INT 21H 有的程序没有入口参数,则只需安排后两个语句,调用结束后,系统将出口参数送到指定寄存器中或从 屏幕上显示出来。,1号DOS系统功能调用,使用格式如下所示: MOV AH,1 INT 21H,1)
18、键盘输入单字符,没有入口参数,执行时,系统等待键盘输入,待程序员按下任何一键,系统先检查是否Ctrl-Break键,如果是则退出,否则将该键字符的ASCII码置入AL寄存器中,并在屏幕上显示该字符。,0AH号系统功能调用,将键盘输入的字符串写入到内存缓冲区中,缓冲区第一字节能存放的字节数,第二字节留给系统填写实际键入的字符个数,第三个字节开始存放键入的字符串,最后键入回车()键表示字符串结束。实际键入的字符数不足填满缓冲区时,则其余字节填“0”;实际键入的字符数超过缓冲区的容量,则超出的字符将被丢失,而且响铃,表示向程序员发出警告。,2)键盘输入字符串, BUF DB 20 DB ? DB 2
19、0,DUP(?) MOV DX,OFFSET BUF MOV AH,0AH INT 21H,;定义缓冲区,;0AH号系统 功能调用,2号系统功能调用,使用格式如下所示: MOV DL,A MOV AH,2 INT 21H 执行2号系统功能调用时,将置入DL寄存器中的字符从屏幕上显示输出(或打印机打印输出)。,3)输出单字符,4)输出字符串,9号系统功能调用,其功能是将指定的内存缓冲区中的字符串从屏幕上显示输出来(或打印输出)。缓冲区中的字符串必须以“$”字符作为结束标志。,BUF DB good bye $ MOV DX,OFFSET BUF MOV AH,9 INT 21H,执行9号系统功能
20、调用时,将内存缓冲区BUF中存放的字符串(以“$”字符为结束)送屏幕显示输出(或送打印机打印输出)。,3.BIOS中断调用 BIOS是固化在ROM中的一组I/O驱动程序,它为系统各主要部件提供设备级控制,还为汇编语言程序设计者提供了字符I/O操作。与DOS功能调用相比,BIOS有如下特点: (1)调用BIOS程序虽然比调用DOS程序要复杂一些,但运行速度快,功能更强; (2)DOS的中断功能只是在DOS的环境下适用,而BIOS功能调用不受任何操作系统的约束; (3)某些功能只有BIOS具有。, 5.4 汇编器的功能及汇编过程,汇编器的主要功能是将由汇编语言(助记符)编写的源程序翻译成用机器语言
21、(二进制代码)编写的目标程序。,DATA SEGMENT 存放数据项的数据段 DATA ENDS EXTRA SEGMENT 存放数据项的附加段 EXTRA ENDS STACK1 SEGMENT PARA STACK 作堆栈用的堆栈段 STACK1 ENDS COSEG SEGMENT,ASSUME CS: COSEG, DS: DATA ASSUME SS: STACK1, ES: EXTRA START PROC FAR MOV AX, DATA MOV DS, AX 存放指令序列 COSEG ENDS END START,计算机执行程序“从头到尾”,逐条顺序执行,直到程序结束。,1.简
22、单程序(顺序程序),【例1】用数据运算指令,对两个16位数做加法运算。这两个数从地址10050H开始连续存放,低位在小地址 一端,结果存放在这两个数之后。,DATA SEGMENT ORG 50H Data1 DW ? Data2 DW ? Data3 DW ? DATA ENDS,STACK SEGMENT STA1 DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACK,START PROC FAR PUSH DS XOR AX, AX PUSH AX,;返回DOS,MOV AX,DATA MOV DS
23、,AX ;DS1000H,MOV SI,50H ;被加数指针SI50H MOV DI,52H ;加数指针DI52H MOV BX,54H ;和的指针BX54H CLC ;清CF XOR AX,AX ;清AX MOV AX,SI ;取一个字到AX ADC AX,DI ;AXAXDI+CF MOV BX,AX ;存一个字到BX,COSEG ENDS END START,【例2】将内存10050H单元的内容拆成两段,每段4位,并将它们分别存入内存10051H和10052H单元。即10050H单元中的低4位放入10051H的低4位,10050H单元中的高4位放入10052H的低4位,而10051H和1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五 汇编 语言程序设计
链接地址:https://www.31doc.com/p-2916224.html