《宏汇编语言书》PPT课件.ppt
《《宏汇编语言书》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《宏汇编语言书》PPT课件.ppt(82页珍藏版)》请在三一办公上搜索。
1、母亲卡,第3章 汇编语言程序格式,3.1 汇编程序功能 3.2 伪操作 3.3 汇编语言程序格式 3.4 汇编语言程序的上机过程3.5 DOS系统功能调用,开 始,3.1 汇编程序功能,1.程序的建立及汇编过程 用编辑程序建立ASM源文件 源文件就是用汇编语言的语句格式编写的程序源程序。它是不能被机器所识别的,所以要经过汇编程序加以翻译。我们通常用编辑程序(全屏幕编辑程EDIT)产生汇编语言的源程序。,返回本章首页,用MASM程序把源程序ASM转换成OBJ文件。汇编语言的作用就是把源文件转换成二进制代码表示的目标文件(称为OBJ文件)。在转换的过程中,汇编程序对源程序进行二遍扫视,如果源程序中
2、有语法错误,则汇编结束后,汇编程序将指出源程序中的错误,用户还可以用编辑程序来修改源程序中的错误,最后得到无语法错误的OBJ文件。,用LINK程序把OBJ文件转换成EXE文件 OBJ文件虽然已经是二进制文件,但它还不能直接上机运行;OBJ文件必须经过连接程序(LINK)把目标文件与库文件或其他目标文件连接在一起形成可执行文件(EXE文件)。这个文件可以由DOS装入存储器,并在机器上运行。用DOS文件命令直接键入文件名就可以执行改程序。,用图来表示对汇编语言的处理过程:2汇编程序的主要功能:检查源程序;测出源程序中的语法错误,并给出出错信息产生源程序的目标程序,并给出列表文件展开宏指令,编辑程序
3、,ABC.ASM文件,汇编程序,ABC.OBJ文件,连接程序,ABC.EXE文件,3.2 伪操作,汇编语言程序由指令、伪操作和宏指令组成。伪操作又称伪指令,它不象机器指令那样是在程序运行期间由计算机来执行的,它是在汇编程序对源程序汇编期间由汇编程序处理的操作,它们可以完成如数据定义,分配存储区,指示程序结束等功能。,返回本章首页,1数据定义及存储器分配伪操作伪操作的格式:【变量】助记符 操作数1,操作数2,【;注释】其中变量字段是可有可无的,它是符号地址,(1)变量是“操作数1”的 偏移地址。(2)助记符(操作项):说明伪操作的功能。【说明所定义的数据类型】(3)操作数:是存放到数据区的数据,
4、以备程序使用。(4)注释:说明该伪操作的功能,它是可有可无的。,1数据定义及存储器分配伪操作(2)助记符(操作项):说明伪操作的功能【说明所定义的数据类型】DB:用来定义字节,其后的每一个操作数都占一个字节。DW:用来定义字,其后的每一个操作数都占一个字(低位字节在第一个字节地址中,高位字节在第二个字节地址中)。DD:定义双字,其后的每个操作数占有二个字。DQ:定义四个字,其后的每个操作数占四个字DT:定义十个字节,其后每个操作数占10个字节。,1数据定义及存储器分配伪操作这些伪操作可以把数据存入指定的存储单元或者只分配存储器空间而并不存入确定的数据。(3)操作数:是存放到数据区的数据,以备程
5、序使用。操作数可以是常数或表达式,但在存储区中存放的是数据。,1数据定义及存储器分配伪操作例3.7 数据的定义:DATA_BYTE DB 10,4,10HDATA_WORD DW 100,100H,+5DATE_DW DD 3*20,0FFFDHARY DW 1,1,1,2,2,2解:DB:10 0AH,DW:100D 0064H+5 0005HDD:3*20=60D=3CH=0000003CH 0FFFDH=0000FFFFDH,1数据定义及存储器分配伪操作DATA_BYTE DB 10,4,10HDATA_WORD DW 100,100H,+5DATE_DW DD 3*20,0FFFDHN
6、UM DW 1,1,1,2,2,2DS=0B45 ES=0B35 SS=0B48 CS=0B55 IP=0010 NV UP EI PL NZ NA PO NC-D0B45:00000B45:0000 0A 04 10 64 00 00 01 05-00 3C 00 00 00 FD 0F 00.d.0B45:0010 00 01 00 01 00 01 00 02-00 02 00 02 00 00 00 00.0B45:0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00.,1数据定义及存储器分配伪操作操作数也可以是字符串例3.8:MES
7、SAGE DB HELLO DB AB 用ASCII码值一个字节来表示一个字符 H48H;E45H;L4CH;L4CH;O4FH;A41H;B42H用十六进制表示的ASCII码字符。DS=0B45 ES=0B35 SS=0B47 CS=0B54 IP=0005-D0B45:00000B45:0000 48 45 4C 4C 4F 41 42 01-00 01 00 01 00 02 00 02 HELLOAB.0B45:0010 00 02 00 06 00 00 00 00-00 00 00 00 00 00 00 00.,操作数可以保留存储空间,但不存入数据。例3.9:ABC DB 0,?
8、,?,?,0 DEF DW?,60,?0B45:0000 00 00 00 00 00 00 00 3C-00 00 00 00操作数字段还可以使用复制操作符来复制一个多个或操作数。格式:复制数 DUP(操作数,操作数)复制数指定括号中的操作数被重复的次数,它可以是一个表达式。,例3.10:ARRAY1 DB 2 DUP(0,1,2,?)ORG 10H ARRAY2 DB 5 DUP(?)ORG 20H ARRAY3 DB 5 DUP(8)语句1与ARRAY1 DB 0,1,2,?,0,1,2,?等价0B45:0000 00 01 02 00 00 01 02 00-00 00 00 00 0
9、0 00 00 000B45:0010 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 000B45:0020 08 08 08 08 08 00 00 00-00 00 00 00 00 00 00 00DUP 操作可嵌套 例:ARRAY4 DB 2 DUP(0,2 DUP(1,2),3)(1+221)26212字节,变量的类型属性:1)变量是第一个数据项的偏移地址。2)用来表示每一个数据项的长度,它是以字节为单位来表示的。用DB定义的变量占1字节。DW=2,DD=4,DQ=8,DT=10汇编语言用隐含的类型属性来确定某些指令是字指令还是字节指令在赋
10、值语句中,两个操作数类型要一致。,例7:OPER1 DB 1,2 OPER2 DW 1234H,5678H MOV AL,OPER1(赋值语句)MOV AX,OPER2 OPER1为字节类型属性,AL为字节类型属性,OPER2为字类型属性,AX为字类型属性。若改为 MOV AX,OPER1 MOV AL,OPER2错误:汇编程序在汇编时,能发现两条MOV指令中的两个操作数的类型不匹配。可以用“PTR”属性操作符指定操作数的类型属性,其格式:类型 PTR 变量常量 类型:BYTE,WORD,DWORD(双字),格式:类型 PTR 变量常量 类型:BYTE,WORD,DWORD(双字)改正:MOV
11、 AX,WORD PTR OPER1(AX)=0201H MOV AL,BYTE PTR OPER2(AL)=34H这样OPER1类型属性为字,两个操作数(AX,OPER1)的类型一致,汇编时不会出错,运行时把OPER1的字内容送入AX,即将OPER1的内容送AL,把OPER1+1的内容送AH,执行后(AX)=0201H,而第二条指令应把OPER2的第一个字节内容送AL,即(AL)=34H,LABEL:用来使同一个变量具有不同的属性(与PTR属性操作符类似)格式:变量 LABEL 类型 其中:类型BYTE,WORD,DWORD例8:B_ARRAY LABEL BYTE W_ARRAY DW 1
12、122H,1122H 数据1122H的第一个字节的地址赋予2个不同类型的变量名:字节类型变量B_ARRAY和字类型变量W_ARRAY。MOV AL,B_ARRAY;(AL)=22H MOV BX,W_ARRAY;(BX)=1122H,2表达式赋值伪操作有时程序中多次出现同一个表达式,为方便起见可以用赋值伪操作给表达式赋予一个名字。格式:表达式名 EQU 表达式表达式名:凡用到该表达式之处就可以用表达 式名来代替表达式:操作数、可求出常数值的表达式、有效的助记符 例:CONSTANT EQU 256 数赋以符号名 ALPHA EQU CONSTANT+7,“”伪操作也可作为赋值伪操作使用,并且“
13、”伪操作允许重复定义。例:EMP=7 EMP=EMP+1 而EQU伪操作中的表达式名是不允许重复定义的。,3段定义伪操作存储器的物理地址是由段地址和偏移地址组成的,当汇编程序把源程序转换为目标程序时,必须确定标号和变量的偏移地址,并把有关的信息通过目标模块传送给连接程序,以便连接程序把不同的段和模块连接在一起形成一个可执行的程序。段定义伪操作的格式 段名 SEGMENT 定位类型 组合类型 使用类型 类别 例如:DATA1 SEGMENT PARA PRIVATE USE16 DATA DATA1 ENDS,段定义格式:SEGMENT;ENDS对于数据段,附加段,堆栈段来说,是存储单元的定义分
14、配对于代码段则是指令及伪操作。段名必须由SEGMENT定义的段中的段名 各段的作用:是通过它与段寄存器的关系语句声明指定的。语句格式:ASSUME 段寄存器:段名段寄存器CS,DS,ES,SS例如:ASSUME DS:DATA1,例如:data_seg1 segment;定义数据段 data_seg1 ends data_seg2 segment;定义附加段 data_seg2 ends code_seg segment assume cs:code_seg,ds:data_seg1,es:data_seg2 start:mov ax,data-seg1;数据段地址放入ds mov ds,ax
15、 mov ax,data-seg2;附加段地址放入es mov es,ax Code_seg ends;代码段结束 end start,ASSUNE伪操作只指定某一个段分配给哪一个段寄存器,它并不把段地址装入段寄存器中,所以在代码段中必须把段地址装入相应的段寄存器中。SEGMENT伪操作还可以增加类型及属性的说明;格式如下:Segname segment 定位类型 组合类型 使用类型 类别 Segname ends,段定义伪操作的格式 段名 SEGMENT 定位类型 组合类型 使用类型 类别 例如:DATA1 SEGMENT PARA PRIVATE USE16 DATA DATA1 ENDS
16、 定位类型:段起始位置的边界值的情况 PARA:指定段的起始地址必须从小段边界开始,小段边界是指段的地址的最低的16进制数位必须为0。BYTE:该段可以从任何地址开始,这样定义段的时候等于对段的起始位没有限制。WORD:该段必须从字的边界开始,即段地址必须为偶数。PAGE:该段必须从页的边界开始,即段地址的最低两个16进制数位必须为0(该地址能被256整除),段定义伪操作的格式 段名 SEGMENT 定位类型 组合类型 使用类型 类别 例如:DATA1 SEGMENT PARA PRIVATE USE16 DATA 组合类型:程序连接时的段合并方法。PUBLIC:该段连接时将与有相同名字的其他
17、分段连接在一起,连接次序由连接命令指定。COMMON:会产生覆盖。该段在连接时与其它同名分段具有相同的起始地址,所以会产生覆盖,COMMON连接长度是各分段中的最大长度。PRIVATE:该段为私有段,在连接时将不与其他模块中的同名分段合并组合类型的默认值是PRIVATE。,段定义伪操作的格式 段名 SEGMENT 定位类型 组合类型 使用类型 类别 DATA1 SEGMENT PARA PRIVATE USE16 DATA(3)使用类型:用来说明使用16位寻址方式,还是32位寻址方式。它们是:USE 16:使用16位寻址方式;USE 32:使用32位寻址方式。使用类型默认项为USE 16(4)
18、类别:在引号中给出类型名,连接时把相同类型的段的位置靠在一起。,4存储模型与简化段定义伪操作 简化段定义 例:.MODEL SMALL.STACK 100H.DATA A1 DB 08H;定义数据区.CODE START:MOV AX,DATA MOV DS,AX MOV AX,4C00H INT 21H END START,MODEL伪操作 用来说明在存储器中是如何存放各个段的。Ting:所有数据和代码都放在一个段内,其数据和代码都是近访问。近访问:位移量是16位,范围在-32768+32767之间。Small:所有数据放在一个64K的数据段内,所有代码放在另一个64K的代码段内。,5程序开
19、始和结束伪操作 在程序的开始可以用NAME或TITLE为模块取名字。(1)NAME:模块名 例:NAME:EX_MOVS 汇编程序把NAME后边给出的名字作为模块名。程序中也可使用TITLE伪操作:(2)TITLE TEXT 例:TITLE EX_MOVS TITLE伪操作可指定每一页上打印标题;汇编程序可以将TEXT的前六个字符作为模块名。若既无NAME,又无TITLE,则把源文件名作为模块名。,表示源程序结束的伪操作的格式为:END LABEL 例:END START其中label标号指示程序开始执行的起始地址,如果是多个程序模块相连接,则只有主程序才使用标号,其它子程序则只用END而不必
20、指定标号。title给出标题,用end start表示程序结束;汇编程序遇到END时结束汇编,并指出从START开始执行。,例如:设计一个程序,实现三个数10H、3BH和42H的加法运算,源程序的名字为ABCASM。STACK SEGMENT DB 20 DUP(0)STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK START:MOV AX,DATA MOV DS,AX MOV AL,10H ADD AL,3BH ADD AL,42H MOV AH,4CH INT 21H CODE ENDS END START,6对准伪操作和地址计数器EVEN伪操
21、作使下一个字节地址是偶数一个字的地址最好从偶地址开始,对于字数组,为保证其从偶地址开始,可以在它前面用EVEN来实现。,DATA SEGMENT EVEN WARRY DW 100 DUP(?)DATA ENDSORG 常用的表达式 设置当前地址计数器的值使下一个字节的地址是常数表达式的值。例如:VECTORS SEGMENTS ORG 10H VECT1 DW 1234H ORG 20H VECT2 DW 5678H VECTORS ENDSVECT1的偏移地址值为10H,而VECT2偏移值为20H,地址计数器的值可用$来表示,并可直接用$来引用地址计数器的值。在对源程序进行汇编时,使用地址
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 宏汇编语言书 汇编语言 PPT 课件

链接地址:https://www.31ppt.com/p-5632569.html