收藏 分享(赏)

微机原理与接口技术-第5章汇编程序设计13.ppt

上传人:Facebook 文档编号:9024757 上传时间:2019-07-20 格式:PPT 页数:41 大小:220.50KB
下载 相关 举报
微机原理与接口技术-第5章汇编程序设计13.ppt_第1页
第1页 / 共41页
微机原理与接口技术-第5章汇编程序设计13.ppt_第2页
第2页 / 共41页
微机原理与接口技术-第5章汇编程序设计13.ppt_第3页
第3页 / 共41页
微机原理与接口技术-第5章汇编程序设计13.ppt_第4页
第4页 / 共41页
微机原理与接口技术-第5章汇编程序设计13.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

1、1,主要内容:,5.1 汇编语句格式 5.2 伪指令 5.3 数据项和表达式 5.4 宏指令语句 5.5 条件汇编伪指令(自学) 5.6 汇编语言源程序 5.7 汇编语言程序的上机过程 5.8 汇编语言程序设计的基本方法 5.9 程序设计举例 5.10 小结,2,5.3 数据项与表达式,数据项:常量、变量、标号及表达式。 运算符:算术运算符、逻辑运算符、关系运算符、分析运算符、综合运算符 表达式:数值表达式、地址表达式,3,5.3.1 常量,二进制数,以B结尾。如01001101B。 十进制数,如85。 十六进制数,以H结尾。第1个数字为A-F时,前面应加0,如0F160H。 字符串:用引号括

2、起来的1个或多个字符。如ERROR!, a,汇编时被翻译成对应的ASCII码45H,52H,52H,4FH,52H,21H和61H。,4,标号:指令所在内存单元的符号地址 有三个属性:段地址:即标号所在段的段地址;偏移量:标号所代表存储单元的段内偏移地址;类 型:NEAR或FAR(默认为NEAR)NEAR16位的指令地址,只需要段内的偏移地址。也叫近地址FAR32位的指令地址,同时需要段内偏移地址与段地址。又叫远地址 标号通常作为转移指令或CALL指令的转移地址。,5.3.2 标号,5,CMP AX,BXJNE NEXT NEXT: MOV AX,0,6,变量即内存中的存储单元或数据区。 变量

3、名是存储单元(数据区)的符号地址或名字。 变量也有三个属性: 段地址(SEG)变量所在段的起始地址 偏移量(OFFSET)变量所在单元距离段首地址的字节数 类 型(TYPE)变量占用的字节数。有BYTE、WORD和DWORD三种。,5.3.3 变量,变量在程序中作为存储器操作数被引用。,7,标号和变量名的使用规则以字母或者下划线开头,后跟字母、数字、下划线,长度不超过31个字符,并且系统中的保留字(如指令的操作码助记符、运算符、寄存器名称)不能作为标号和变量名。 例如:正确的:LP1, AGAIN, NEXT, _GO, OK_1错误的:4M, LOOP, AAA, #HELP, +ONE,8

4、,表达式是常数、寄存器、标号、变量与运算符的组合。 有数值表达式和地址表达式两种。 汇编时按优先规则对表达式进行计算,计算出具体的数值或地址。运行时不能改变。 表达式中的运算符有6类:算术、逻辑、关系、取地址、属性、杂类。,5.3.3 表达式,9,用于数值表达式,例:MOV AX,4*1024 汇编后的形式为:MOV AX,4096 用于地址表达式,例:LEA SI,TAB+3 若TAB的偏移地址为1000H,则汇编后的形式为:LEA SI,1003H,1. 算术运算符 +、-、*、/,MOD,10,SEG:取变量/标号的段地址 OFFSET:取变量/标号的偏移地址 例:VAR DB 12HM

5、OV BX,OFFSET VAR ;VAR的偏移地址 MOV AX,SEG VAR ;VAR的段地址 注意,以下指令的异同:MOV BX, OFFSET VARLEA BX, VAR OFFSET只能取静态的偏移地址; LEA指令即可取静态的偏移地址,也可取动态的偏移地址。,2. 取地址运算符SEG、OFFSET,11,3. 取值运算符TYPE、LENGTH、SIZE,格式:TYPE 变量名或标号 功能: 返回变量或标号的类型值,例: ARRAY DW 1,2,3 ADD SI,TYPE ARRAY 则加法指令被汇编成: ADD SI,2,12,格式:LENGTH 变量名 功能:对于变量中使用

6、DUP(非嵌套)的情况,计算出分配给该变量的单元数(分配单元可以按字节、字或者双字为单位计算),而对于其他情况则返回值1。 例如:DATA1 DB 12H, 34HDATA2 DB 100 DUP(?)MOV AL, LENGTH DATA1 ;AL=1MOV AL, LENGTH DATA2 ;AL=100,13,格式:SIZE 变量名 功能:计算一个存储区域所占用的字节数SIZE = LENGTH*TYPE 例:BUFF DB 10 DUP(?) MOV CX, LENGTH BUFF MOV BX, TYPE BUFF MOV CX, SIZE BUFF,14,主要内容:,5.1 汇编语

7、句格式 5.2 伪指令 5.3 数据项和表达式 5.4 宏指令语句 5.5 条件汇编伪指令(自学) 5.6 汇编语言源程序 5.7 汇编语言程序的上机过程 5.8 汇编语言程序设计的基本方法 5.9 程序设计举例 5.10 小结,15,5.4 宏指令语句,如果需要多次使用同一个程序段,可以将这个程序段定义为一个”宏指令”,然后在需要时,可简单地用宏指令名来代替这个程序段。,指令的格式为:MACRO 形参表ENDM,16,无参数宏定义 CRLF MACRO ; 光标跳到下一行开头位置MOV AH,0EHMOV AL,0DHINT 10HMOV AL,0AHINT 10H ENDM 在程序中使用无

8、参数宏的方法MOV AH, 2MOV DL, AINT 21H ; 在当前光标位置显示ACRLF,1.无参数宏,17,含宏语句源程序序列MOV AH, 2MOV DL, AINT 21H ; 在当前光标位置显示ACRLF 汇编之后的语句序列(带有+号的指令为宏展开后的结果)MOV AH, 2MOV DL, AINT 21HMOV AH,0EHMOV AL,0DHINT 10HMOV AL,0AHINT 10H,宏定义 CRLF MACRO MOV AH,0EHMOV AL,0DHINT 10HMOV AL,0AHINT 10H ENDM,18,2.有参数宏,有参数宏定义 例:求两个数之和的宏定

9、义。X、Y、Z是形式参数。 DADD MACRO X,Y,ZMOV AX,XADD AX,YMOV Z,AXENDM,有参数宏调用DADD DATA1,DATA2,SUM DATA1,DATA2,SUM是实际参数,由它们替换定义中的X、Y、Z。,19,宏定义 DADD MACRO X,Y,ZMOV AX,XADD AX,YMOV Z,AXENDM,宏调用语句源代码DADD DATA1,DATA2,SUM 汇编之后的语句序列(带有+号的指令为宏展开后的结果)+ MOV AX,DATA1+ ADD AX,DATA2+ MOV SUM,AX,20,宏调用与过程(子程序)调用都是一次定义,多次调用。它

10、们之间的差别是: 执行形式:宏命令伪指令由宏汇编程序在汇编过理中进行处理,而CALL、RET则是由CPU执行的指令。 汇编结果:宏命令伪指令汇编后被展开。 执行速度:宏命令执行速度较快(因无调用转移) 占用内存:宏指令简化了源程序,但不能简化目标程序,并不节省内存单元。使用过程(子程序)可以节省代码占用的内存空间。,21,宏展开:汇编程序会把宏调用按宏定义展开。 例如:宏定义为: Display MACRO stringLEA DX,stringMOV AH,9INT 21HENDM 程序中宏调用:DISPLAY ERROR_MESSAGEDISPLAY EXIT_MESSAGE,22,汇编后

11、的结果:(带有+号的指令为宏展开后的结果) + LEA DX,ERROR_MESSAGE + MOV AH,9 + INT 21H + LEA DX,EXIT_MESSAGE + MOV AH,9 + INT 21H,宏定义 Display MACRO stringLEA DX,stringMOV AH,9INT 21HENDM,程序中宏调用: DISPLAY ERROR_MESSAGEDISPLAY EXIT_MESSAGE,23,3 宏嵌套,宏定义中允许使用宏调用,但所调用的宏指令必须是定义过的。(见例P142) 不仅如此,宏定义中还可以包含宏定义。,24,例 P141 采用宏定义体内包含

12、宏定义的方法设计一个运算宏指令,宏定义: DEFCALCU MACRO CALCULATION,OPERATORCALCULATION MACRO X, Y, ZPUSH AXMOV AX, X OPERATOR AX, YMOV Z, AXPOP AXENDM ENDM,25,假设有以下宏调用:DEFCALCU ADDITION,ADD宏展开后得到宏指令ADDITION的宏定义:ADDITION MACRO X, Y, ZPUSH AXMOV AX, XADD AX, YMOV Z, AXPOP AXENDM,26,进一步使用宏调用:ADDITION FIRST, SECOND, SUM 宏

13、展开为:PUSH AXMOV AX, FIRSTADD AX, SECONDMOV SUM, AXPOP AX,27,对于宏指令DEFCALCU,宏定义体中的形式参数CALCULATION及OPERATOR给予不同的参数去取代,便会得到不同的运算宏指令。 例如: DEFCALCU SUBTRACT, SUB ; 减法宏定义 DEFCALCU LOGAND, AND ; 逻辑与宏定义,28,4. LOCAL伪指令的使用,如果宏体中有分支、循环,就必然有标号,在程序中两次以上调用这样的宏指令时,就必然会出现标号重复定义的错误。 汇编语言提供LOCAL伪指令来解决该问题。 格式:LOCAL 标号名表

14、LOCAL伪指令要放在宏定义之中,是MACRO定界语句以下的第一条语句。 宏体中出现的标号称为局部标号,在使用了LOCAL伪指令之后,局部标号可以和源程序中的其他标号、变量重名。,29,例 P142,输出CRLF CRLF MACROMOV AH,0EHMOV AL,0DHINT 10HMOV AL,0AHINT 10H ENDM,输出VAR的NN位二进制数据 DISP MACRO VAR, NNLOCAL L1, L2MOV CH, NN/4 L1: MOV CL, 4 L2: MOV AL, 0ROL VAR,1ADC AL, 0MOV AH, 0EHINT 10HDEC CLJNZ L2

15、MOV AL, INT 10HDEC CHJNZ L1CRLF ; 宏嵌套 ENDM,30,CODE SEGMENT USE16ASSUME CS:CODENUM DB 88H START: MOV EBX, 12345678HDISP BH, 8DISP BX, 16DISP EBX, 32DISP NUM, 8MOV AH, 4CHINT 21H CODE ENDSEND START,31,主要内容:,5.1 汇编语句格式 5.2 伪指令 5.3 数据项和表达式 5.4 宏指令语句 5.5 条件汇编伪指令(自学) 5.6 汇编语言源程序 5.7 汇编语言程序的上机过程 5.8 汇编语言程序

16、设计的基本方法 5.9 程序设计举例 5.10 小结,32,5.6 汇编语言源程序的格式,汇编源程序有两种编程结构: 只能生成扩展名为EXE的可执行文件,称为EXE文件的编程格式 可以生成扩展名为CO的可执行文件,称为COM文件 COM文件的执行级别高于EXE文件,同名的BAT(批处理)文件执行级别最低。 EXE文件的编程格式允许源程序使用多个逻辑段。适合编写大型程序。,33,5.6.1 EXE文件的编程格式,DATA SEGMENT USE16 MESG DB HELLO,0DH,0AH,$ DATA ENDS STACK SEGMENT PARA STACK STACK USE16DB 1

17、00 DUP(?) STACK ENDS CODE SEGMENT USE16ASSUME CS:CODE,DS:DATA,SS:STACK START:MOV AX,DATAMOV DS,AXMOV CX,10 L1: MOV AH,9MOV DX,OFFSET MESGINT 21HLOOP L1MOV AH,4CHINT 21H CODE ENDSEND START,34,5.6.2 COM文件的编程格式,汇编语言要求:COM文件的编程格式必须符合以下规定: 源程序只允许使用一个逻辑段,即代码段,不允许设置堆栈段 程序使用的数据,可以集中设置在代码段的开始或末尾 在代码段偏移地址(有效地

18、址)为100H的单元,必须是程序的启动指令 代码段目标块小于64KB,35,例 P145,显示10行HELLO CODE SEGMENT USE16ASSUME CS:CODEORG 100H BEG: JMP START MESG DB HELLO,ODH,OAH,$ ; START: MOV CX,10 ;设置循环次数 LAST: MOV AH,9MOV DX,OFFSET MESGINT 21H LOOP LASTMOV AH,4CHINT 21H CODE ENDS END BEG,36,例 P145,显示10行HELLO CODE SEGMENT USE16ASSUME CS:COD

19、EORG 100H START: MOV CX,10 ;设置循环次数 LAST: MOV AH,9MOV DX,OFFSET MESGINT 21H LOOP LASTMOV AH,4CHINT 21H MESG DB HELLO,ODH,OAH,$ ; CODE ENDS END START,37,5.6.3 EXE和COM文件的内存映像,程序段前缀(PSP)位于DS:00HFFH的256B的数据块,是DOS为应用程序生成的运行环境信息。,38,(1)代码段、数据段及堆栈段在同一段,64KB。,(2)第一条指令的偏移地址固定为100H,即有(IP)=100H。,(3)SP指向该物理段末尾,故

20、不用定义堆栈段。,39,磁盘上的EXE文件包括两部分:装入模块、重定位信息 DOS装载EXE文件时,这两部分都调入内存。DOS测试内存环境,根据重定位信息完成对装入模块的重定位之后,重定位信息即被丢弃。 DOS在偏移地址为00HFFH的单元自动生成一个有256B的数据块,该数据块被称为“PSP”(program segment prefix)。 DOS自动给DS、ES、FS和GS赋值,使DS=ES=存放PSP的段基址,FS=GS=0,并使CS:IP用户程序的启动地址,SS:SP指向用户堆找段的栈顶,在这以后,DOS才把控制权交给用户程序。 还有一点必须注意,DOS给DS和ES所赋的初值并不等于

21、用户程序数据段和附加段的段基址,用户程序一开始必须对DS(ES、FS、GS)初始化就是这个道理。,40,COM文件没有重定位信息,因此比EXE文件的体积小得多。 DOS在装载COM文件时也在偏移地址为00H-FFH的单元生成一个程序段前缀,然后从偏移地址100H开始依次存放用户程序。DOS自动赋值使CS=DS=ES=SS=PSP的段基址,FS=GS=0,并使IP=100H,SP=FFFEH。随后DOS把控制权交给用户程序,CPU即从CS:100H单元依次执行用户程序。 DOS在装入COM文件之后自动为用户程序设置了堆栈段,且堆栈段在用户程序的高瑞。初始栈顶为两个字节的0。 DOS装入COM文件后自动使IP=100H,所以,要求COM文件的汇编格式,必须在代码段偏移地址为100H的单元放置程序的启动指令。,41,作业:,1. 用适当的INT 21H、INT 10H的功能调用在屏幕指定位置(0页、第10行、第5列)显示一个字符串信息(“I Like Macro Assembler!”)。P173P1754、8、10、18,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报