《《宏汇编语言书》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,地址计数器的值可用$来表示,并可直接用$来引用地址计数器的值。在对源程序进行汇编时,使用地址
22、计数器来保存当前正在汇编的指令的地址。例如:VECTORS SEGMENTS ORG 10H VECT1 DW$1234H;(VECT1)=1244H ORG 20H VECT2 DW$5678H;(VECT2)=5688HVECTORS ENDS,ALIGN伪操作 设置地址值是4的倍数。格式为:ALIGN boundary 其中 boundary 必须是2的幂例:DATA ALIGN 4 ARRAY DB 100 DUP(?)保证了ARRAY的值为4的倍数。,例1:定义数据段中变量A=10,数组WARRY有10个元素11,再定义变量B10DATA SEGMENT A DB 10 WARRY
23、DW 10 DUP(11)B DB 10DATA ENDS,例2:定义数据段中变量A10,数组WARRY有10个元素11,但该数组应从偶地址开始存放数据,再定义变量B10DATA SEGMENT A DB 10 EVENWARRY DW 10 DUP(11)B DB 10DATA ENDS,例3:定义数据段中变量A=10,存入数组WARRY时,应用20H开始,存放10个元素11,再存放B=10变量并从30H开始 DATA SEGMENT A DB 10 ORG 20H WARRY DW 10 DUP(11)ORG 30H B DB 10 DATA ENDS,7.基数控制伪操作 汇编程序默认的数
24、为10进制数,因而除非专门指定,汇编程序把程序中出现的数均看作10进制数。当使用其他基数表示的常数时,需要专门给以标记。二进制数 由一串0,1组成其后跟以字母B,如:00101100B十进制数:由09数字组成的数,后面可以跟字母D,如178D,十六进制数:由数字09,A-F组成的数,后面跟字母H.如果这个数的第一个字符是A-F时,应在其前加上数字0,如0FFFF八进制数:由数字07组成的数,后面可跟字母O或Q,如:1777O,RADIX:可把默认的基数改变为216范围内的任何基数 RADIX 表达式 表达式的值为默认的基数值(十进制表示)例:MOV BX,0FFH RADIX 16 MOV B
25、X,178 MOV BX,0FF MOV BX,178D 是等价的。把基数定为16进制数后,十进制数后跟D,如果某16进制数末字符为D,则应在其后跟字母H,以免与10进制混淆。字符串可以看成串常数,可以用双引号或单引号把字符串放在其中,得到的是字符串的ASCII码值.例如:DB ABCD db“good”,3.3 汇编语言程序格式,汇编语言源程序中的每个语句可以由四项组成,语句格式:名字 操作项 操作数;注释其中,名字项是一个符号;操作项是一个操作码的助记符,它可以是指令,伪操作或宏指令名。操作数项是由一个或多个表达式组成,它为执行操作提供需要的信息。注释项用来说明程序或语句功能“;”为识别注
26、释项的开始。以上四项中,带括号的两项是可有可无的;各项间用“空格”符隔开。,语句格式:名字 操作项 操作数;注释 1名字项:源程序中用下列字符来表示名字:(1)字母A-Z;(2)数字09;(3)专用字符?._$除了数字外,所有字符都可以放在源语句的第一个位置。名字中如果遇到“.”则必须是第一个字府。可以用很多字符来说明名字,但只有前面的31个字符能被汇编程序所识别。名字项可以是标号或变量,它们都用来表示本语句的符号地址。它是可有可无的,只有用符号地址来访问该语句时它才需要出现。,语句格式:名字 操作项 操作数;注释标号:标号在代码段中定义,后面根冒号“:”,它也可以用LABEL或EQU伪操作来
27、定义。标号经常在转移指令用以表示转向地址。三种属性:段,偏移和类型段属性:标号的段地址已隐含给出,标号的段地址总在CS寄存器中。偏移:标号的偏移地址是16位无符号数,它代表从段起始地址到定义标号的位置之间的字节数类型:用来指出该标号是在本段内引用还是在其它段中引用,如在段内则称为NEAR指针长度为2字节。如在段外引用则称为FAR指针长度4字节。,变量:变量在除代码段以外的其他段中定义,后面不根冒号,它也可以用LABLE或EQU伪操作来定义。变量经常在操作数字段出现。三种属性:段,偏移和类型。段属性:具有段地址。定义变量的段起始地址,此值必须在一个段寄存器中;,偏移:变量的偏移地址是16位无符号
28、数,它代表从段的起始地址到定义变量的位置之间的字节数。类型:定义该变量所保留的字节数。如:BYTE(1个字节长)WORD(2个字节长)DWORD(4个字节长)DQ(8个字节长)在程序中,标号或变量的定义只允许出现一次。,语句格式:名字 操作项 操作数;注释 2.操作项:操作项可以是指令助记符,伪操作或宏指令的助记符。对于指令,汇编程序将其翻译为机器语言指令。对于伪操作,汇编程序将按其功能进行处理。对于宏指令,则将根据其定义展开。3.操作数项:由一个表达式或多个表达式组成,多个操作数项之间一般用逗号分开。在指令中,操作数项的位置被翻译成操作数地址。,操作数项可以是常数,寄存器,标号,变量,表达式
29、 表达式:是由常数,寄存器,标号,变量与一些操作符组合的序列。有数字表达式和地址表达式两种算术操作符:,*,/,mod(除法求余)算术操作符可以用于数字表达式或地址表达式中地址数字量是是某一单元的地址:SUM1:SUM字节单元的下一个字节单元的地址 SUM1:SUM字节单元的前一个字节单元的地址,例1:要求把首地为BLOCK的字数组的第1个字传送到DX寄存器,可用指令。MOV DX,BLOCK例2:数组A定义如下,试写出把数组长度(字数)存入CX寄存器的指令。A DW 1,2,3,4,5,6,7 END DW?其中END是为计算数组长度而建立的符号地址 MOV CX,(END-A)/2 MOV
30、 CX,70500:0000 01 00 02 00 03 00 04 00-05 00 06 00 07 00 0000偏移地址:00-01-02-03-04-05-06-07-08-09-0A-0B-0C-0D-0E0F(0E-00)/2=7,逻辑操作符:AND,OR,XOR,NOT 逻辑操作符是位操作,它只能用于数字表达式中。例3:IN AL,PORT OUT PORT+1,AL其中,PORT为端口号,OUT指令中表达式说明从PORT 重读出数据,将该数据在PORT+1中输出。,关系操作符:两个操作数必须为数字或同一段内两存储器地址,结果有6种:LT(小于),LE(小于等于)GT(大于)
31、,GE(大于等于)EQ(相等),NE(不等)例5:MOV BX,PORT LT 5 当PORT5为真时,(BX)=0FFFFH,当PORT=5为真时,(BX)=0,数值回送操作符 将变量或表号作为数值回送。TYPE1)如果是变量,则汇编程序将回送该变量类型包含的字节数:DB=1,DW=2,DD=4,DT=10.2)如果是标号,回送该标号类型的数值。NEAR1,FAR2例6:ARRAY DW 1,2,3 ADD SI,TYPE ARRAY 汇编:ADD SI,2,LENGTH 变量中使用DUP的情况时回送该变量单元数;其他情况回送1 例7:FEES DW 100 DUP(0)MOV CX,LEN
32、GTH FEES 汇编:MOV CX,100例8:ARRAY DW 1,2,3 MOV CX,LENGTH ARRAY 汇编:MOV CX,1,SIZE:汇编程序应回送分配给该变量的字节数,此值是LENGTH和TYPE值的乘积。FEES DW 100 DUP(0)MOV SI,TYPE FEES MOV CX,LENGTH FEES MOV DX,SIZE FEES汇编:MOV SI,2 MOV CX,100 MOV DX,200,OFFSET:回送变量或标号的偏移地址。格式为:OFFSET Variable或label 例:MOV BX,OFFSET FEES 将OPER的偏移地址作为立即数
33、回送给指令而在执行时,则将该偏移地址装入BX寄存器中。与 LEA BX,FEES等价。,SEG:回送变量的段地址或标号的段地址 例:数组A定义如下DATA SEGMENT A DW 1,2,3,4,5,6,7 END DW?DATA ENDS MOV BX,SEG A DATA是从存储器的05000H地址开始的一个数据段的段名,A是该段中的一个变量名,将把0500H赋值给BX。,属性操作符包括6种:PTR段操作符SHORTTHISHIGHLOW,PTR 类型 PTR 表达式(type PTR expression)用来给已分配的存储地址赋予另一种属性使该地址具有另一种类型。类型:类型字段表示所
34、赋予的新类型属性。表达式:表达式字段是原有类型的符号字段。OPER2 DW 1234H,5678HMOV AL,BYTE PTR OPER2(AL)=34H,例:已有数据定义如下:TWO_BYTE DW?用下列语句对这两个字节赋予另一类型定义:ONE_BYTE EQU BYTE PTR TWO-BYTE这里ONE-BYTE和TWO-BYTE两个符号地址具有相同的段地址和偏移地址。但类型属性不同,ONE_BYTE 为字节变量,TWO-BYTE为字节变量.说明类型可有:BYTE,WORD,DWORD,NEAR,FAR几种。PTR可用来建立字,双字,段内或段间指令单元,段操作符用来表示一个标号,变量
35、或地址表达式的段属性例如:用段前缀指定某段的地址操作数。MOV AX,ES:BX+SI表示形式:段名:地址表达式 SHORT用来修饰指令中转向地址的属性指出转向地址是在下一条指令地址的127个字节范围内,THIS 格式:THIS 属性 或 类型该操作数的段地址和偏移地址与下一个存储单元地址相同。它可以象PTR一样建立一个指定类型或指定距离的地址操作数。例如:FIRST_TYPE EQU THIS BYTE WORD_TAB DW 100 DUP(?)此时FIRST_TYPE的偏移地址和WORD_TAB完全相同,但它是字节类型的,而WORD_TAB是字类型的。,HIGH和LOW:称为字节分离操作
36、符,它接收一个数或地址表达式,HIGH取其高字节,LOW取其低字节。例:CONST EQU 0ABCDH 则 MOV AH,HIGH CONST 将汇编成 MOV AH,0ABH 以上说明了五种类型的常用操作符。,表达式是常数,寄存器,标号,变量和操作符的组合.在计算表达式时,应该先计算优先级高的操作符。然后从左到右的对优先级相同的操作符进行计算。优先级从高到低排列如下,共11级。(P109),语句格式:名字 操作项 操作数;注释注释项:说明一段程序或一条指令的功能,是可有可无的。语句中分号“;”后面是注释项.,3.4 汇编语言程序的上机过程,1建立汇编语言的工作环境:EDIT.COM;编辑程
37、序 MASM.EXE;汇编程序 LINK.EXE;连接程序 DEBUG.COM;调试程序 EXE 2BIN.EXE;转换成COM文件以上文件存放在磁盘上。,返回本章首页,2建立ASM文件 设用编辑软件建立一个文件名为:abc.asm的原文件.CEDIT abc.asmBR E存盘退出3产生OBJ文件 MASM ABCBR 源文件建立后,就用MASM对源文件汇编,汇编后产生二进制的目标文件(OBJ)4用LINK产生EXE文件 LINK ABCBR5程序的执行 C ABCBR CDEBUG ABC.EXEBR,3产生OBJ文件CMASM ABC BR The IBM Personl Compute
38、r Assembler Version 1.00(C)Copyright IBM CORP(98)Obgect filename ABC.OBJ:Source Listing NUL.LST:ABC Cross reference NUL.CRF:ABC第一个是OBJ文件目标文件 第二个是LST文件列表文件列表文件同时列出源程序和机器语言程序清单,并给出符号表,因而使程序调试更加方便。,LST清单的最后部分为段名表和符号表,段的大小及有关属性,以及用户定义的符号名,类型及属性第三个是CRT文件产生交叉引用表 该表给出用户定义的所有符号,对于每个符号列出了其定义所在行号及引用的行号。,4用LIN
39、K产生EXE文件LINK有两个输入文件OBJ和LIB OBJ是需要连接的目标文件,LIB则是程序中需要用到的库文件,如无特殊要求,则对LIB:回车LINK的另一个输出文件是MAP文件,它是连接程序的列表文件,称为连接映象,它给出每个段在存储器中的分配情况。,5程序的执行C ABC CSDSSSES,书P28,段寄存器,3.5 DOS系统功能调用,3.5.1 概述3.5.2 常用的DOS系统功能调用,3.5.1 概述,对8086系列机来说,MS-DOS操作系统是最主要的操作系统。MS-DOS操作系统除了具有较为完整的文件管理功能之外,同时还为各种应用程序、外围设备等提供软件接口。它由三部分组成:
40、IO.SYS、MSDOS.SYS COMMAND.COM。,DOS系统功能调用的方法一般可分为以下几步:设置所要调用功能的入口参数。在AH寄存器中存入所要调用功能的功能号。INT 21H指令自动转入中断子程序入口。相应中断子程序运行完毕,可按规定取得出口参数。,3.5.2 常用的DOS系统功能调用,1单字符输入(1号调用)2单字符显示(2号调用)3打印输出(5号调用)4结束调用(4CH号调用)5显示字符串(9号调用)6字符串输入(10号调用),1单字符输入(1号调用)格式:MOVAH,1 INT21H功能:从键盘输入字符的ASCII码送入寄存器AL中,并送显示器显示。2单字符显示(2号调用)格
41、式:MOV DL,待显示字符的ASCII码 MOV AH,2 INT 21H功能:将DL寄存器中的字符送显示器显示。如果DL中为CTRL+BREAK的ASCII码,则退出。,3打印输出(5号调用)格式:MOVDL,待打印字符的ASCII码 MOVAH,5 INT21H功能:将DL寄存器中的字符送打印机打印。4 结束调用(4CH号调用)格式:MOVAH,4CH INT21H功能:终止当前程序并返回调用(返回DOS),5显示字符串(9号调用)格式:LEA DX,待显示字符串首偏移地址 MOVAH,9 INT 21H功能:将当前数据区中以结尾的字符串送显示器显示。6字符串输入(10号调用)格式:LE
42、A DX,缓冲区首偏移地址 MOV AH,10 INT 21H功能:从键盘上输入一字符串到用户定义的输入缓冲区中,并送显示器显示。,【例3.25】若要在屏幕上显示字符串“Example of string display!”,则程序如下:DATA SEGMENT STRDB 0DH,0AH,Example of string display!DATA ENDSSTACKSEGMENT STACK DB100 DUP(0)STACKENDSCODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK,BEGIN:MOV AX,DATA MOV DS,AX LEA DX,STR MOV AH,9 INT 21H MOV AH,4CH INT 21HCODEENDS END BEGIN,本章到此结束!,返回本章首页,结 束,