第四章-伪指令及程序设计

上传人:龙*** 文档编号:60833233 上传时间:2018-11-19 格式:PPT 页数:104 大小:1.39MB
返回 下载 相关 举报
第四章-伪指令及程序设计_第1页
第1页 / 共104页
第四章-伪指令及程序设计_第2页
第2页 / 共104页
第四章-伪指令及程序设计_第3页
第3页 / 共104页
第四章-伪指令及程序设计_第4页
第4页 / 共104页
第四章-伪指令及程序设计_第5页
第5页 / 共104页
点击查看更多>>
资源描述

《第四章-伪指令及程序设计》由会员分享,可在线阅读,更多相关《第四章-伪指令及程序设计(104页珍藏版)》请在金锄头文库上搜索。

1、第四章 宏汇编语言程序设计,4.1 汇编语言程序格式 4.2 MASM中的表达式 4.3 伪指令语句 4.4 DOS系统功能调用和BIOS中断调用 4.5 程序设计方法 4.6 宏汇编和条件汇编,2018/11/19,2,4.1 汇编语言程序设计特点,汇编语言是一种用符号表示的、面向CPU指令系统的程序设计语言。是机器语言的符号表示。 基本特点: 程序设计人员能更充分地利用机器硬件的全部功能,发挥机器的长处; 程序目标代码占用内存少,执行速度快,效率高,具有实时性; 由于汇编的特点,汇编语言常用于编写计算机系统程序、实时通信程序和实时控制程序。但汇编语言程序依赖于机器硬件,其通用性和移植性都较

2、差。,2018/11/19,3,从源程序获得目标程序的过程,汇编语言源程序 经过汇编翻译成二进制代码的浮动目标文件,然后由连接程序将目标文件和库文件相连接 生成机器上可执行的目标程序 进行汇编语言开发需要的文件: 1)汇编程序 MASM.exe 2)连接程序 LINK.EXE 3)库管理程序LIB.EXE(如果不创建子程序库,不需要该文件) 4)文本编辑器。如DOS下的EDIT 或其它开发工具中的编辑环境如Turbo C等。目的:生成.ASM文件。 5)调试程序 DEBUG,2018/11/19,4,开发的步骤(补充),1、源程序的汇编 命令格式:MASM 源程序文件名 如果没有语法错误,则生

3、成目标模块文件.obj,否则给出错误信息 2、目标文件的连接 命令格式:LINK obj文件名 如果没有严重错误,将生成可执行文件 .exe,否则将提示相应的错误信息 3、可执行文件的执行调试 命令格式:可执行文件名 操作系统加载该文件进入主存开始运行,如果出现运行错误,可用debug.exe调试程序。 命令格式:debug 可执行程序文件名,注意:如果程序里没有的堆栈段,系统会给出warning,但不会影响程序运行。,2018/11/19,5,4-1汇编语言程序格式,汇编语言源程序用语句书写,MASM中可以使用的语句有两类:指令性语句和伪指令语句。,指令性语句:即执行性语句(指令),与机器码

4、一一对应,表示某种确定操作,包括四部分: 标号: 指令操作码 操作数 ;注释 例: AGAN:ADC BX,AX ;累加 指示性语句:即说明性语句(伪指令),不对应机器码,只为汇编提供所需信息,由四部分组成: 名字 伪指令 操作数 ;注释 例: SUM DW 0 ;为结果保留一个字,2018/11/19,6,DATA SEGMENT SRC_LESS DB HELLO!,0DH,0AH,$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV DX,OFFSET SRC_LESS MOV AH

5、,9 INT 21H MOV AH,1 INT 21H MOV AH,4CH INT 21H CODE ENDS END START,2018/11/19,7,汇编程序的基本结构要求,完整的汇编程序要包括:段定义、段分配、设置段地址、返回DOS语句、程序结束 和程序体。必要时加上过程调用。 完整汇编语言程序的典型格式 段定义格式: 段名 SEGMENT 段名 ENDS 至少有一个代码段,堆栈段如果不定义,由计算机自动分配。段名是由字母数字组成的,可以任意定义。 计算机识别不同的段靠 段分配ASSUME 语句完成 ASSUME CS:段名,DS:段名,SS:段名,ES:段名,2018/11/19

6、,8,assume指定段与段寄存器之间的关系,但并不为段寄存器设定初值,程序中如果使用数据段或者附加段,需要明确对DS、ES赋值。只要正确书写源程序,CS、IP和SS、SP的值将会由连接程序正确设置 设置方法: MOV AX,STACK MOV SS,AX MOV AX,DATA MOV DS,AX 程序执行完毕后要返回DOS,最常用的实现方法: 全部程序以END结尾,END后面可以加上程序执行起始的名称,汇编程序遇到END就结束汇编。,MOV AX,4C00H INT 21H,2018/11/19,9,三、数据项(汇编语言中使用的操作数),1、常数 二进制数:以“B”结尾,如00001101

7、B; 八进制数:以“O”结尾,如725O; 十六进制数:以“H”结尾,并且必须以数字打头,即若最高位为字母AF,前面应加0,如0A12H; 十进制数:以“D”结尾或省略结尾,如10D、10。 字符串常量 字符串常量表示为包含在两个单引号之间的一连串ASCII字符。每个串元素的值定义为该元素所对应的1字节ASCII码值。,2018/11/19,10,三、数据项(汇编语言中使用的操作数),2、变量:指存储在存储单元中的值,所有变量有三个属性: 段值SEGMENT:变量所在段的段基址 段内偏移地址OFFSET:变量所在地址和所在段首地址之间的偏移字节数 类型TYPE:变量中每个元素包含的字节数。 3

8、、标号:可执行指令语句地址的符号表示,三个属性: 段值SEGMENT:标号所在段的段基址 段内偏移地址OFFSET:标号所在地址和所在段首地址之间的偏移字节数 类型TYPE:指转移指令中标号可转移的距离,也叫距离属性,NEAR(近标号,实现本代码段内转移)、FAR(远标号,段间转移),2018/11/19,11,补充:,变量:放在伪指令前的标识符是变量 标号:放在指令前的标识符是标号,标号后有“:” 都有段地址、偏移地址、类型等属性。 例如: DATA SEGMENT TRY DB 20 DATA ENDS NEXT: LOOP NEXT,2018/11/19,12,4-2、MASM中的表达式

9、,表达式=操作数+运算符。 表达式可出现于源程序的任何地方, 在汇编过程中(而不是程序执行过程中)即可产生确定的值。运算的结果作为语句中的操作数使用。,6类运算符:算术运算符、逻辑运算符、关系运算符、数值返回运算符、修改属性运算符、其它运算符,2018/11/19,13,算术运算符:+、-、*、/、MOD、SHL、SHR 逻辑运算符:AND、OR、XOR、NOT 关系运算符:EQ、NE、GT、 LT、 GE 、LE 分析运算符:SEG、OFFSET、TYPE、SIZE、LENGTH 、HIGH、LOW 综合运算符:PTR、DS:、THIS、SHORT,2018/11/19,14,一、算术运算符

10、,数值表达式中可使用所有算术运算符 地址表达式仅使用+、-算术运算符 /除法,取商。MOD除法取余数。 例4-2 数组ARRAY定义如下:,ARRAY DB 1,2,3,4,5,6,7,8 TRY DB 20 指令为: MOV AX,30*5 MOV CX,(TRY-ARRAY),汇编时,计算表达式形成的指令为: MOV AX,150 MOV CX,8,+、-、*、/、MOD、SHL、SHR,2018/11/19,15,二、逻辑运算符,逻辑运算符在两个操作数之间按位进行二进制布尔运算,结果产生确定的数值。AND、 OR、 NOT、 XOR 逻辑运算符只能对常数进行运算,运算结果也是常数。 例:

11、 AND BL, 46H AND 0FH ; 汇编后得到 “ AND BL, 06H ” 的目标码,2018/11/19,16,三、关系运算符,在两个无符号操作数之间进行大小关系比较 EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于) 若关系满足则返回全1,否则返回全0。(0FFH0FFFFH0) 两个操作数必须为 数据 或是同一段内的两个存储单元的地址 例: MOV AX, 0A2H NE 02H ; 汇编后得到 “ MOV AX, 0FFFFH ” 的目标码 例4-6 MOV CX,(PORT LT 5)AND 100)OR(PORT GE 5)

12、AND 200),2018/11/19,17,四、数值返回运算符(分析运算符),对单个操作数进行属性分解,分别返回不同属性的值 SEG 取变量或标号所在段的段基址,结果为16位值 OFFSET 取变量或标号的段内偏移量,结果为16位值 TYPE 取变量或标号的类型 LENGTH 取变量重复次数 or 1 只和有无DUP有关 SIZE 取分配给变量的字节个数 SIZE=LENGTH*TYPE,表4-2 TYPE运算符返回值,2018/11/19,18,例,CSEG SEGMENT BUFF DW 10DUP(1234H),10H,00H COUN DD 12345678H CSEG ENDS,则

13、:SEG BUFF = CSEG ;段基址 OFFSET BUFF = 0 ;偏移量 TYPE BUFF = 2(字) ;类型 LENGTH BUFF = 10 ;DUP次数 SIZE BUFF = 10*2 = 20 ;字节数,SEG COUN = CSEG OFFSET COUN = 24 TYPE COUN = 4(双字) LENGTH COUN = 1 SIZE COUN = 4,2018/11/19,19,修改属性运算符(综合运算符),可以在程序运行过程中,通过“修改属性运算符”来修改变量或标号的属性,包括段属性、偏移地址属性、类型属性等。 有: 段操作符、PTR、THIS、HIGH

14、、LOW、SHORT,2018/11/19,20,段操作符(P36 表2-7) 格式:段前缀:变量或地址表达式 功能:修改变量或表达式到某个段寄存器提供的段基址中 段前缀:CS、ES、DS、SS Eg4-12:MOV AX,ES:BX,PTR:给已分配的存储单元或标号赋予新的属性。 格式:类型/距离 PTR 变量或标号 功能:将PTR左边的类型属性赋给右边的变量或标号 常与BYTE、WORD、NEAR、FAR等连用 Eg4-13: N1 DB 15H,36H MOV AX,WORD PTR N1,2018/11/19,21,PTR例 MUL BYTE PTRBX ;限定存储器操作数的类型 JM

15、P WORD PTRBX ;段内转移 JMP DWORD PTRBX ;段间转移 CS:IP JMP FAR PTR LO ;段间转移,2018/11/19,22,THIS: 格式:变量/标号 EQU THIS 类型/距离 功能:该变量或标号的段地址和偏移地址与下一个存储单元的地址相同,并具有THIS后的属性 Eg4-45:FIRST EQU THIS BYTE TABLE DW 200DUP(?) EG4-46 :SP1 EQU THIS FAR MOV AX,100,SHORT: 格式:SHORT 标号 功能:限制转移类指令为短转移(-128127) Eg:L1:JMP SHORT L2

16、L2:MOV AX,0,2018/11/19,23,HIGH、LOW(字节分离运算符) 格式:HIGH/LOW 变量或标号 功能:对于一个数或表达式,分离出高位字节和低位字节 Eg: K1 EQU 0ABCDH K2 EQU 1234H MOV AH, HIGH K1 MOV BL, LOW K2,经过汇编后形成指令: MOV AH,0ABH MOV BL,34H,2018/11/19,24,4-3 8086宏汇编语言常用伪指令,8086宏汇编语言MASM5.0规定的常用伪指令,包括 数据定义语句DB、DW、DD 标号赋值语句:EQU、= 段定义语句SEGMENT、ENDS 段分配语句:ASSUME 过程定义语句:PROC.ENDP 程序开始结束语句:ORG、END、NAME 群定义语句GROUP 结构定义语句:

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号