版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章 汇编语言程序组织 第四章 汇编语言程序组织 本章要求: 能够编写简单的、完整的汇编语言源程序。 掌握上机操作,以验证程序设计及编码的正确性。主要内容:汇编源程序结构、常用伪指令及操作符、汇编语言程序上机过程、数据的输入输出等。本章要求:4.1 汇编语言语句格式4.2 汇编语言源程序结构4.3 常用伪指令4.4 汇编语言操作符4.5 汇编语言程序上机过程4.6 调用ROM BIOS或DOS中断实现数据的输入输出4.7 简化段定义4.1 汇编语言语句格式4.1 汇编语言语句格式汇编语句:指令、伪指令、宏指令。每条指令语句都生成机器代码,各对应一种CPU操作,在程序运行时执行。伪指令语句由汇
2、编程序在汇编过程中执行,数据定义语句分配存储空间,其他伪指令不生成目标码。宏指令是用户按照宏定义格式编写的一段程序,可以包含指令、伪指令、甚至其他宏指令。4.1 汇编语言语句格式汇编语句:指令、伪指令、宏指令。汇编语言语句格式:名字 助记符 操作数 ;注释其中带 的内容是可选的。汇编语言语句格式:名字域是语句的符号地址,可以由26个大小写英文字母、09数字、_、$、?等字符组成,数字不能出现在名字的第一个字符位置。指令的名字叫做标号,必须以冒号(:)结束。它提供给循环或转移指令的转向地址。伪指令的名字可以是变量名、过程名、段名等。通常,名字具有三属性:段基址、偏移量和类型。标号的类型有NEAR
3、型和FAR型,变量的类型有字节、字、双字、四字等。返回名字域是语句的符号地址,可以由26个大小写英文字母、09助记符域给出操作的符号表示,可以是指令助记符、伪指令助记符等。例如加法指令的助记符是ADD。操作数域为操作提供必要的信息。每条指令语句的操作数个数已由系统确定,例如加法指令有两个操作数。注释域用以说明本条语句在程序中的功能,要简单明了。注释以分号(;)开始。返回助记符域给出操作的符号表示,可以是指令助记符、伪指令助记符4.2 汇编语言源程序结构用汇编语言编写程序可以使用两种基本格式。一种是使用完整段定义,另一种是使用简化段定义。完整段定义格式需要较复杂的语法,但它可以提供完整的控制,是
4、大多数汇编程序通用的,也是软件开发中经常使用的。本节介绍使用完整段定义格式书写的汇编语言源程序。4.2 汇编语言源程序结构用汇编语言编写程序可以使用两种4.2.1 典型的.EXE文件结构.EXE文件是一种可执行程序,它是一个可重定位的装入模块,可以包含多个段,文件的总长度可以超过64K,这种结构便于模块共享。 .EXE程序由文件头和程序本身的二进制代码两部分组成。4.2.1 典型的.EXE文件结构.EXE文件是一种可执行DOS装入.EXE文件的过程: DOS的装入程序为.EXE程序建立一个256字节的程序段前缀PSP,PSP中包含可以被用户程序使用的DOS入口、DOS为自己所存储的信息、由DO
5、S传递给用户程序的信息等。其中PSP:0处存放一条INT 20H指令。 把文件头读入内存工作区。 计算可执行模块的大小。 计算装入的起始段地址。 完成重定位。DOS装入.EXE文件的过程: 初始化段寄存器和指针寄存器。装入程序对段和指针寄存器的设置为:CS:IP为主程序的入口地址(程序装入后执行的第一条指令地址)。SS为堆栈段的段基址,SP指向栈顶。其他段寄存器全部被初始化为指向PSP的段基址,以便用户能够访问PSP中的信息。 把控制权交给.EXE程序。 初始化段寄存器和指针寄存器。装入程序对段和指针寄存器的例. 编程实现123456SUM单元的功能。(程序4.1)STASGSEGMENT S
6、TACK S ;DW 32 DUP(?) STASGENDSDATASEGMENTADW123BDW 456SUMDW ?DATAENDSCODESEGMENTMAINPROCFAR ;ASSUME CS:CODE,DS:DATA,SS:STASG,ES:NOTHING ;PUSHDS ;XORAX,AXPUSHAXMOV AX,DATA ;MOVDS,AXMOVAX,AADDAX,BMOV SUM,AXRET ;推荐程序4.2MAINENDPCODEENDSENDMAIN ;例. 编程实现123456SUM单元的功能。(程序4.11段定义伪指令基本格式:段名SEGMENT 定位类型组合类型类
7、别 段名 ENDS功能:定义一个段。1段定义伪指令说明:段名由用户自己起,要符合汇编语句对名字的要求。SEGMENT定义一个段的开始,ENDS定义该段的结束。 中内容是可选的,定位类型确定段的起始边界,组合类型说明段之间的关系,类别说明本段归于哪一类,类别名由用户自己起,并用单引号括起来。例.CODE SEGMENT CODE ENDS程序4.1的定义了STSG、DATA、CODE,其中STSG有三个可选参数。说明:段名由用户自己起,要符合汇编语句对名字的要求。SEG2ASSUME伪指令格式:ASSUME 段寄存器名:段名功能:说明段寄存器和段之间的关系。说明:若一个段寄存器与NOTHING关
8、联,则表示取消前边对该段寄存器的假设,可以省略。ASSUME语句并不给段寄存器赋值,它应放在引用段寄存器之前,通常放在代码段或主过程的第一个语句位置。例程序4.1中的语句。2ASSUME伪指令3过程定义伪指令格式:过程名PROC 类型过程名ENDP功能:定义一个过程。3过程定义伪指令说明:汇编语言中无论是主程序还是子程序都以过程形式出现。一个代码段可以含有多个过程,具有.EXE结构的主过程必须是FAR型。其中过程名由用户自己起。类型选项指明该过程的类型,可以是:NEAR(或缺省)说明该过程是近型的,只能在段内被调用。FAR 说明该过程是远型的,可以在段间被调用,也可以在段内被调用。例:程序4.
9、1中的语句,只定义了一个FAR型过程,其过程名为MAIN。说明:汇编语言中无论是主程序还是子程序都以过程形式出现。一4程序结束伪指令格式:END 过程名功能:表示源程序结束。说明:过程名指示程序执行起始地址。 中过程名是可选的。只有主过程模块的END后可带过程名,它必须是主程序名。若一个程序由多个模块组成,则除主模块外,其他模块的END语句不能带过程名。例如END MAIN程序4.1中语句,只有一个主过程,其程序结束语句带有主过程的名字MAIN,它表示程序从MAIN处开始执行。4程序结束伪指令5使DS指向用户程序的数据段从装入程序对段寄存器的初始化可看到,它并没有把DS和ES(386以上还有F
10、S、GS)指向用户自己的数据区,而是指向了PSP的段基址,这主要是方便用户程序通过DS等段寄存器访问PSP中信息。但在用户程序运行过程中,DS应指向程序自己的数据段以便访问其中内容,例如我们要访问A、B和SUM变量。同理ES等也应设置为正确的位置。为此,应在程序中用指令为DS等段寄存器赋值。见程序4.1的。5使DS指向用户程序的数据段6如何返回DOS 见程序4.1MAIN PROC FARASSUME PUSHDS;PSP段基址入栈XORAX,AX;清0PUSHAX;数字0入栈;完成程序指定功能RET MAIN过程是FAR型,执行RET时从栈中弹出0给IP,再弹出一个字(PSP段基址)给CS,
11、现在CS:IP指向PSP:0处的指令INT 20H。INT 20H指令功能:退出应用程序,释放所占内存并返回DOS。调用时要求CS指向PSP段基址。6如何返回DOS 见程序4.1程序4.1给出的是一种传统返回DOS的方法,对所有DOS版本均适用。在DOS较高版本中,推荐使用4CH系统功能调用返回DOS,这种方法实现起来比较简单。方法是功能号4CHAH寄存器,返回码AL,正常返回时返回码为0。使用这种方法。程序4.1的代码段可以改写为如程序4.2所示的结构。程序4.1给出的是一种传统返回DOS的方法,对所有DOS版CODESEGMENT ;程序4.2MAINPROCFARASSUMECS:COD
12、E , DS:DATAASSUMESS:STASGMOV AX , DATA ;无程序前奏MOVDS , AXMOV AX,AADD AX,BMOV SUM,AXMOVAX ,4C00HINT21HMAINENDPCODEENDSENDMAIN返回CODESEGMENT 以上两种.EXE结构编程时都可以使用。程序4.1结构使得对汇编语言编程及内部运行机制有更深入的了解,程序4.2使得程序更简洁。目前使用较多的.EXE结构是程序4.2所示结构。以上两种.EXE结构编程时都可以使用。程序4.1结构使得4.2.2 典型的.COM文件结构.COM文件是一种可执行程序,它的总长度不能超过64KB,整个文
13、件只能由一个段组成。它没有文件头,只包含程序本身的二进制代码。这种结构代码紧凑,与实现同功能的.EXE文件相比,占用内存更少,速度更快,因此适合编制较小的程序,例如DOS的外部命令SYS、FORMAT等都是.COM结构。4.2.2 典型的.COM文件结构.COM文件是一种可执行程序段前缀PSP段长为100H字节,PSP:0处存放一条INT 20H指令。程序的二进制代码紧跟PSP之后装入。 .COM程序的代码、数据及堆栈数据在同一段中,所以对所有的段寄存器都初始化为指向PSP的段基址。IP100H,为PSP之后的下一个地址偏移量,SP指向栈顶,栈顶中存入一个字型数字0,如下图所示。对于实现上例的
14、.COM结构的程序见程序4.3。程序段前缀PSP段长为100H字节,PSP:0处存放一条I返回CD200000CS、DS、ES、SSIP100H.COM文件装入内存示意图PSPSP64K返回CDCS、DS、ES、SSIP100H.COM文件装入CODESEGMENT ;程序4.3ORG 100HASSUME CS:CODE,DS:CODEMAINPROC NEARJMP STARTA DW 123B DW 456SUM DW ?START: MOV AX,AADD AX,BMOV SUM,AXRETMAIN ENDPCODE ENDSEND MAINCODESEGMENT ORG伪指令格式:O
15、RG 数值表达式功能:设置地址计数器内容为数值表达式的值。说明:在汇编程序对源程序汇编的过程中,使用地址计数器保存当前正在汇编的语句地址(段内偏移量),汇编语言允许用户直接用引用地址计数器的当前值。例1ORG 100H ;设置地址计数器的值为100H例2ORG 6 ;跳过6个字节的存储区域返回ORG伪指令格式:ORG 数值表达式返回同样道理,返回DOS功能也可以用以下两条指令替换:MOV AX,4C00HINT 21H替换后的.COM程序结构见程序4.4。同样道理,返回DOS功能也可以用以下两条指令替换:程序4.4CODE SEGMENTORG 100HASSUME CS:CODE , DS:
16、CODEMAIN PROC NEARJMP START;数据定义伪指令START: ;指令语句MOV AX , 4C00HINT 21HMAIN ENDPCODE ENDSEND MAIN返回程序4.4返回4.3 常用伪指令4.3 常用伪指令4.3.1 数据定义伪指令格式:变量名 助记符 操作数功能:为变量分配单元,并为其初始化或者只预留空间。4.3.1 数据定义伪指令说明:变量名是可选的,需要时由用户自己起。助记符是数据类型的符号表示。说明:助记符是数据类型的符号表示。助记符数据类型 一个数据项字节数DB(BYTE)字节型1DW(WORD)字型2DD(DWORD)双字型4DQ(QWORD)四
17、字型8DF(FWORD)六字节型6DT(TBYTE)10字节型10注:( )中是在MASM6.11版本中可以使用的助记符。DF助记符386以上有效,通常作为48位全指针变量。必须掌握DB、DW、DD。Ch04汇编语言程序组织课件操作数操作数可以是数字常量、数值表达式、字符串常量、地址表达式、?、 DUP(操作数,)形式。操作数a.数字常量及数值表达式十进制数:以D结尾,汇编语言中缺省值是十进制数,所以D可以省略不写。有效数字是09。二进制数:以B结尾,有效数字是0、1。例如,10100011B,10100011b。十六进制数:以H结尾,有效数字是09和A(a)F(f)。若第一位数字是字母形式,
18、则必须在前边加上0(数字)。例如,12H,12h,0AB56H,0ab56h。八进制数:以Q或O(字母)结尾,有效数字是07。例如,352Q。a.数字常量及数值表达式b.字符串常量c.地址表达式d. ?e. DUP(操作数,)b.字符串常量 例. M1 DB 15,67H,11110000B,?M2 DB 15,AB$M3 DW 4*5M4 DD 1234HM5 DB 2 DUP(5,A)M6 DW M2;M2的偏移量M7 DD M2;M2的偏移量、段基址设以上数据自1470:0000开始存放,则为: 0F 67 F0 00 31 35 41 42 24 14 00 34 12 00 00 0
19、5 41 05 41 04 00 04 00 70 14。 例. 可直接通过变量名引用变量,但要注意类型匹配。例如以下程序片段:MOV AL,M1;(AL) 15MOV BX,M3;(BX) 20ADD M3,6;(M3) 26MOV AL,M2;(AL)131HMOV BL,M2+2;(BL)A41HMOV M1+3,BL;(M13) 41H可直接通过变量名引用变量,但要注意类型匹配。例如以下程序片4.3.2 LABEL伪指令格式:名字 LABEL 类型功能:为下一个存储单元起一个名字并定义它的类型。说明:对于变量,类型可以是BYTE、WORD、DWORD等。对于标号,其类型可以是NEAR、
20、FAR。LABEL伪指令并不为名字分配空间,但它可以为下一个存储单元另起名字而且另定义它的类型,从而可以使同一地址具有不同类型的名字,便于引用。4.3.2 LABEL伪指令格式:名字 LABEL 类例. REDEWLABEL WORDDEBYTEDB 25H,32H,56H,42HMOV BL,DEBYTE;(BL)=25HMOV CX,REDEW;(CX)=3225H以上程序片段执行情况见下图。例. 返回25H32H56H42HREDEWLABEL语句功能示意图25HDEBYTE3225HBLCX返回REDEWLABEL语句功能示意图25HDEBYTE324.3.3 符号定义伪指令4.3.3
21、 符号定义伪指令1等值EQU伪指令格式:符号名 EQU 表达式功能:用符号名代表表达式或表达式的值。说明:表达式可以是任何有效的操作数格式。例如常数、数值表达式、另一符号名或助记符。注意:用EQU定义的符号在同一个程序中不能再定义。1等值EQU伪指令例. CR EQU 0DH ;回车符的ASCII值LF EQU 0AH ;换行符的ASCII值BEL EQU 07H ;响铃符的ASCII值PORT_B EQU 61H;定义PORT_ B端口 B EQU BP6 ;BP6用B表示程序中可以通过符号引用这些值,例如:MOVAL,CR ;等价于 MOVAL, 0DHADDBL,B ;等价于ADD BL
22、,BP6)OUTPORT_B,AL ;输出到61H端口例. EQU用途:增加程序可读性、缩短程序书写长度、避免因为某些修改而带来的程序不一致性。EQU伪指令除了以上用途外,经常使用它的一个场合是与配合,得到变量分配的字节数。如下所示:MSGDB This is first string.Countequ $msgMovcl,count ;(CL)MSG的串长21EQU用途:增加程序可读性、缩短程序书写长度、避免因为某些由于用EQU定义的符号在同一个程序中不能再定义,所以以下语句是错误的:CT EQU 1CTEQU CT1由于用EQU定义的符号在同一个程序中不能再定义,所以以下语2等号()伪指令
23、格式:符号名数值表达式功能:用符号名代替数值表达式的值说明:等号伪指令与EQU伪指令功能相似,其区别是等号伪指令的表达式只能是常数或数值表达式,另外用“”定义的符号在同一个程序中可以再定义。通常在程序中用“”定义常数。例. DPL1 20HK 1K K12等号()伪指令4.3.4 对准伪指令格式:EVEN功能:定位到偶地址。也可以用ALIGN 4定位到双字地址。4.3.4 对准伪指令格式:EVEN例. ORG50HA1DB3EVENA2DW5030500EVEN语句的效果50H51H52H53H例. EVEN语句的效果50H51H52H53H4.3.5 结构伪指令结构定义使得多个存储区具有相同
24、的数据格式。例如在日常生活中经常用到的二维表格数据,就可以用结构来定义。4.3.5 结构伪指令结构定义使得多个存储区具有相同的数据例为某单位设计一个工资表,工资表中有三项内容:姓名、职称、工资。该单位共有32个职工。工资表格式和每项数据的长度或范围如下所示。数据项姓名职称工资字段名NAMPOSTWAGES字段长度、类型或数值范围10字节、字符12字节、字符065535、数字工资表格式例为某单位设计一个工资表,工资表中有三项内容:姓名、职称1结构定义伪指令格式:结构名 STRUC结构名ENDS功能:定义一种结构。1结构定义伪指令例如,对于以上工资表,可以定义如下结构:PAYROLLSTRUCNA
25、MDB10DUP(A)POSTDBENGINEER WAGESDW?PAYROLLENDS例如,对于以上工资表,可以定义如下结构:注意:结构定义伪指令中虽然包含了数据定义语句,但仅仅是定义了某种格式的结构(例如PAYROLL),并没有给它分配空间。为了给结构数据分配空间,需要用结构预置语句。注意:结构定义伪指令中虽然包含了数据定义语句,但仅仅是定义2结构预置语句格式:结构变量名 结构名 字段值表功能:为结构变量分配存储空间及初始化。2结构预置语句对字段值的说明:字段值表必须用括起来;若只给出表示各字段均采用结构定义时的初值。若给出字段值表,则字段值间要用逗号隔开。只能对简单字段赋初值,对于多重
26、字段的位置应直接用逗号隔开,相当于占位,不可省略。若对某字段所赋初值的长度与结构定义中的不符,不足者用空格填充,超出者被截去。DUP操作数可以出现在结构预置中,用以分配多个同样结构的数据。对字段值的说明:为上例工资表分配32条记录空间的程序片段如下:NO1 PAYROLL ;1号职工的记录,各字段采用结构定义初值NO2 PAYROLL ;为2号职工的记录初始化NO3_32 PAYROLL 30 DUP();DUP为332号职工定义30条相同结构的记录为上例工资表分配32条记录空间的程序片段如下:经过以上语句定义,这个工资表的初始存储分配情况如下所示。偏移量结构变量名NAMPOSTWAGESNO
27、1NO1AAAAAAAAAAENGINEERNO2NO2AAAAAAAAAAWORKER1200NO3_32NO3_32AAAAAAAAAAENGINEERNO3_32241AAAAAAAAAAENGINEERNO3_322429AAAAAAAAAAENGINEER注:表示空格,占用一个字符位置。工资表初值经过以上语句定义,这个工资表的初始存储分配情况如下所示。偏3访问结构变量 结构变量名这种格式可以访问到结构变量级。它访问的是结构变量中的第一个字节值(视结构中的第一个字段的类型决定,例如若是用DW定义,则为第一个字)。例LEA BX,NO1;把结构变量NO1的首地址送BX3访问结构变量 结构
28、变量.字段名这种格式可以访问到结构变量中的字段值。例如: MOVNO1.WAGES ,1200;为1号职工的工资字段赋值1200MOVAX ,NO1.WAGES;取1号职工的工资送给AX 结构变量.字段名从以上可以看出,这里引用的结构变量实际上是使用它的偏移量,偏移量可以通过基址寄存器BX或BP表示。若使用BX,则段寄存器默认为DS;若使用BP,则段寄存器默认为SS。允许使用段超越前缀。例如:LEABX ,NO3_32MOVBX.WAGES,1500;为3号职工的工资字段赋值1500从以上可以看出,这里引用的结构变量实际上是使用它的偏移量, 结构变量.结构字段变址寄存器这种格式可以访问到结构变
29、量中某字段的某个字节,该字节距离字段首的位移由变址寄存器SI或DI给出。例如:LEABX ,NO3_32MOVBX.WAGES ,1500XORSI ,SIMOVBX.NAMSI ,C;字符C送给3号职工姓名字段的第一个字节 结构变量.结构字段变址寄存器注意结构定义、预置和存取三者的顺序及位置一般应遵从:结构定义在数据段前出现,预置在数据段中出现,访问在代码段中出现。程序4.5给出以上例子的完整程序。注意结构定义、预置和存取三者的顺序及位置一般应遵从:结构定程序4.5PAYROLL STRUCNAM DB 10 DUP(A)POST DB ENGINEER WAGES DW ?PAYROLL
30、ENDSDATA SEGMENTNO1 PAYROLL NO2 PAYROLL NO3_32 PAYROLL 30 DUP()DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC FAR MOV AX,DATA MOV DS,AX MOV NO1.WAGES,1200 MOV AX,NO1.WAGES LEA BX,NO3_32 MOV BX.WAGES,1500 XOR SI,SI MOV BX.NAMSI,C MOV AX,4C00H INT 21HMAIN ENDPCODE ENDS END MAIN返回程序4.5返回运行以上程序后,
31、该工资表的数据示意图如下所示。偏移量结构变量名NAMPOSTWAGESNO1NO1AAAAAAAAAAENGINEERNO2NO2AAAAAAAAAAWORKER1200NO3_32NO3_32CAAAAAAAAAENGINEERNO3_32241AAAAAAAAAAENGINEERNO3_322429AAAAAAAAAAENGINEER注:表示空格,占用一个字符位置。 程序4.5运行后的工资表12001500运行以上程序后,该工资表的数据示意图如下所示。偏移量结构变编写一个循环程序并递增修改SI的值,可以对一个字段的各个字节实现存取。同样道理,通过每次给BX增加一条记录的长度(本例是加24)
32、,可以存取到不同的记录。编写一个循环程序并递增修改SI的值,可以对一个字段的各个字4.3.6 微处理器伪指令4.3.6 微处理器伪指令较常使用的选择微处理器伪指令有以下几种:伪指令功 能.286选择80286微处理器指令系统.386选择80386微处理器指令系统.486选择80486微处理器指令系统.586选择80586微处理器指令系统 .8087选择8087数字协处理器指令系统.287选择80287数字协处理器指令系统.387选择80387数字协处理器指令系统较常使用的选择微处理器伪指令有以下几种:伪指令功 能注意较低版本的汇编程序并不完全支持这一组伪指令。例如即使在Pentium上使用MA
33、SM5.0,也不支持.586伪指令。由于向下兼容,所以在Pentium机器上仍然可以使用.386伪指令。注意较低版本的汇编程序并不完全支持这一组伪指令。例如即使在4.4 汇编语言操作符操作符可以出现在语句的操作数表达式中。该操作在汇编程序汇编时实现。包括算术、逻辑、关系、属性、返回值操作符。4.4 汇编语言操作符操作符可以出现在语句的操作数表达式例.X DW 12,34,56CT EQU (-X)/2MOV CX ,CT;(CX) 3MOV AX ,XADD AX ,X+2;(AX) 461.算术操作符例.1.算术操作符2.逻辑操作符例.PORT EQU 0FH AND DL,PORT AND
34、 0FEH汇编后:AND DL,0EH2.逻辑操作符例.PORT EQU 0FH3.关系操作符例.指令MOV AL,CH LT 20的汇编结果: MOV AL,0FFH;当CH20时或:MOV AL,0;当CH20时3.关系操作符例.指令MOV AL,CH LT 20的汇编4.返回值操作符这组操作符可以把一些特征或内存单元地址的组成部分作为数值返回。它们是TYPE、LENGTH、SIZE、SEG、OFFSET和,其格式和功能见下表。4.返回值操作符这组操作符可以把一些特征或内存单元地址的组返回格 式功 能TYPE 变量TYPE 标号返回变量或者标号的类型代码1LENGTH 变量返回由 dup
35、(操作数,)格式定义的n值,其他情况回送1SIZE 变量返回分配给变量的字节数,只对由 dup (操作数,)格式定义的变量有实际意义2SEG 变量SEG 标号返回变量或者标号的段基址OFFSET 变量OFFSET 标号返回变量或者标号的偏移量返回地址计数器的当前值 注1:若使用TYPE 变量,则返回一个数据项占用的字节数。例若变量用DB定义,则返回1;用DW定义返回2;若用结构定义则返回该结构占用的字节数。若使用TYPE 标号,则NEAR型标号返回1,FAR型标号返回2。 注2:SIZETYPE*LENGTH,只有在变量用 dup (操作数,)时表示该变量占用的字节数。因为LENGTH在其他情
36、况下总是回送1,此时SIZE也就失去实际意义。返回值操作符返回格 式功 能TYPE 变量返回变量或者标号的例.VARDW50DUP(12)ARYDW 4,5,6COUNT EQU -OFFSET ARY;COUNT6MOVAX, SEG VARMOVDS, AX;VAR的段基址DSADDSI, TYPE ARY;(SI)2SIMOVCX, LENGTH VAR;50CXMOVCX, SIZE VAR;100CXMOVCX, LENGTH ARY;1CXMOVCX, SIZE ARY;2CX例.5.属性操作符属性操作符指定操作数的属性。包括PTR、THIS、SHORT、HIGH和LOW操作符。5
37、.属性操作符属性操作符指定操作数的属性。包括PTR、TH(1)PTR操作符格式:类型 PTR 地址表达式功能:指定地址表达式的类型。(1)PTR操作符例.BUFDB31H,32HMOVAL,BUF;(AL)31HMOVBX,WORD PTR BUF;临时指定BUF为字型,(BX)3231HLEADI,BUFMOVBYTE PTR DI,6;明确指出DI指向字节型单元,否则汇编时出错例.(2)THIS操作符格式:THIS 类型功能:为存储器操作数指定类型。该操作数地址与下一个存储单元具有相同的段基址和偏移量。(2)THIS操作符例1REDEWEQU THIS WORDDEBYTEDB 25H,3
38、2H,56H,42HREDEW和DEBYTE的段基址和偏移量均相同,但类型不同前者是字型,后者是字节型。例2F_JMPEQU THIS FARN_JMP:DEC CX使“DEC CX”指令具有一个FAR属性的地址F_JMP。例1(3)SHORT操作符用来修饰JMP指令中转向地址的属性,指出转向地址是在下一条指令地址的-128+127字节范围之内。例如:JMP SHORT LAB(3)SHORT操作符(4)HIGH、LOW操作符这两个操作符被称为字节分离操作符,它接收一个数字或地址表达式,HIGH取其高字节,LOW取其低字节。例.COUNTEQU 1234HMOVAL ,LOW COUNT汇编结
39、果为:MOV AL,34H(4)HIGH、LOW操作符4.5 汇编语言程序上机过程汇编语言实践环境基于DOS平台。当汇编语言源程序编好后,要使其实现功能,需经过以下过程: 建立、编辑 汇编 连接 运行 调试4.5.1 .EXE文件上机过程 以程序4.1(名字为ADD1.ASM)为例,介绍汇编语言程序上机过程。4.5 汇编语言程序上机过程汇编语言实践环境基于DOS平1.建立文件可以用任何一种熟悉的文本编辑器建立、编辑汇编语言源程序。例如DOS提供的EDIT。启动EDIT的常用命令格式是:EDIT 文件名其中文件名是可选的。1.建立文件可以用任何一种熟悉的文本编辑器建立、编辑汇编语若启动时不带文件
40、名,对于已存在文件,启动后可以用FILE下拉菜单的OPEN命令打开它并对其编辑,最后用FILE下拉菜单的SAVE保存。对于新文件则可以直接输入,最后用FILE下拉菜单的SAVE AS保存。若启动时带有文件名但该文件不存在,则启动后可以输入新文件,否则把已存在的文件调入编辑。对于汇编语言源程序,其文件名的扩展名部分必须是.ASM。若启动时不带文件名,对于已存在文件,启动后可以用FILE下例如:D:MASMEDIT ADD1.ASM则屏幕显示:File Edit Search View Options Help |- D:masmADD1.ASM -|例如:若EDIT是从Windows环境的MS-
41、DOS方式进入的,则在DOS提示符后键入exit返回Windows。若EDIT是从Windows环境的MS-DOS方式进入的2.汇编汇编程序的基本功能是把用汇编语言书写的源程序翻译成机器语言的目标代码、检查用户源程序中的错误且显示出错信息、生成列表文件等。 为了适应模块化程序要求,汇编后目标程序中的地址部分是可浮动的相对地址,而不是可执行的绝对地址。2.汇编汇编程序的基本功能是把用汇编语言书写的源程序翻译成在DOS平台上使用较普遍的汇编程序是MASM和TASM。下边是Microsoft公司MASM 5.X版的汇编操作。首先在DOS提示符后键入MASM命令:D:MASMMASM在DOS平台上使用
42、较普遍的汇编程序是MASM和TASM。下屏幕显示:Microsoft (R) Macro Assembler Version 5.10 Source filename .ASM: ADD1(输入源文件名ADD1,不必输入扩展名)Object filename ADD1.OBJ:(要求回答目标文件名,可直接按Enter确认)Source listing NUL.LST: ADD1(列表文件名,需要时输入名字部分)Cross-reference NUL.CRF:(交叉引用文件名,缺省情况不产生)51058 + 421678 Bytes symbol space free0 Warning Erro
43、rs 0 Severe Errors屏幕显示:也可以用命令行的形式按顺序对四个提示予以回答,其格式是:MASM 源文件名,目标文件名,列表文件名,交叉引用文件名;若只想对部分提示给出回答,则在相应位置用逗号隔开,若不想对剩余部分作答,则用分号结束。例如以下命令行与前边的分行回答等效:D:MASMMASM ADD1 , ,ADD1;若只想对部分提示给出回答,则在相应位置用逗号隔开,若不想对ADD1.LST文件的内容为:;偏移量目标码 汇编格式 0000 DATA SEGMENT 0000 007B A DW 123 Segments and Groups:Name Length Align Co
44、mbine ClassCODE 0014 PARA NONEDATA 0006 PARA NONESTSG 0040 PARA STACK S ADD1.LST文件的内容为:3.连接程序被汇编通过后,需要经过连接才能执行。连接程序的功能是连接分别产生的目标模块、解决外部交叉调用、产生一个可重定位的装入模块、以及产生可选的内存映象文件等。在DOS平台上使用较普遍的连接程序是LINK和TLINK。下边是Microsoft Linker的连接操作。3.连接程序被汇编通过后,需要经过连接才能执行。连接程序的D:MASMLINKObject Modules .OBJ: ADD1(输入由汇编产生的.OBJ
45、目标文件名)Run File ADD1.EXE:(直接回车确认系统给出的默认可执行文件名)List File NUL.MAP: ADD1(输入内存映象文件名,缺省不产生)Libraries .LIB:(直接按回车键)D:MASMLINK对于以上回答,ADD1.OBJ经连接后在当前目录下产生了ADD1.EXE和ADD1.MAP文件。ADD1.MAP文件的内容为: Start Stop Length Name Class 00000H 0003FH 00040H STSG S 00040H 00045H 00006H DATA 00050H 00063H 00014H CODE Program e
46、ntry point at 0005:0000对于以上回答,ADD1.OBJ经连接后在当前目录下产生了A同样可以用命令行的形式按顺序对四个提示予以回答,格式:LINK 目标文件名,可执行文件名,内存映象文件名,库文件名;其中都不必给出扩展名,连接程序会按照缺省情况使用。若只想对部分提示给出回答,则在相应位置用逗号隔开,若不想对剩余部分作答,则用分号结束。同样可以用命令行的形式按顺序对四个提示予以回答,格式:经过建立、汇编和连接,关于ADD1.ASM共生成以下文件:ADD1 ASM 1,164 09-03-01 21:06 ADD1.ASMADD1 LST 2,629 09-03-01 21:0
47、6 ADD1.LSTADD1 OBJ 152 09-03-01 21:06 ADD1.OBJADD1 MAP 232 09-03-01 21:07 ADD1.MAPADD1 EXE 612 09-03-01 21:07 ADD1.EXE5 file(s) 4,789 bytes经过建立、汇编和连接,关于ADD1.ASM共生成以下文件:从6.0 版以后,Microsoft公司把MASM和LINK的功能由一个ML.EXE程序完成,只需一个命令就可把源程序汇编连接生成.EXE文件。而不再需要分两步操作。ML.EXE的常用命令格式:ML /Fl/Fm/Fr/c source_filename.ext从
48、6.0 版以后,Microsoft公司把MASM和LIN其中source_filename.ext为汇编语言源程序的文件名,扩展名不能省略。 中的F必须大写,l(字母)、m、r和c必须小写,各可选项含义如下:/Fl:产生.lst列表文件,缺省不产生/Fm:产生.map内存映象文件,缺省不产生。/Fr:产生.sbr交叉参考文件,缺省不产生。/c:只产生.obj文件,不产生.exe文件。缺省只产生.exe文件。其中source_filename.ext为汇编语言源程序例ML /Fl TEST.ASM以上命令会对已存在的TEST.ASM文件汇编且连接,并在当前目录下生成一个列表文件TEST.LST和
49、一个可执行文件TEST.EXE。例ML /Fl TEST.ASM4.运行例D:MASMADD14.运行例D:MASMADD1D:MASMDEBUG ADD1.EXE -5.调试D:MASMDEBUG ADD1.EXE 5.调试(1)用反汇编命令U显示可执行代码-u1307:0000 1E PUSH DS1307:0001 33C0 XOR AX,AX1307:0003 50 PUSH AX1307:0004 B80613 MOV AX,13061307:0007 8ED8 MOV DS,AX 1307:0009 A10000 MOV AX,00001307:000C 03060200 ADD
50、AX,00021307:0010 A30400 MOV 0004,AX1307:0013 CB RETF (1)用反汇编命令U显示可执行代码(2)用R命令显示寄存器值-r AX=0000 BX=0000 CX=0064 DX=0000 SP=0040 BP=0000 SI=0000 DI=0000 DS=12F2 ES=12F2 SS=1302 CS=1307 IP=0000 NV UP EI PL NZ NA PO NC 1307:0000 1E PUSH DS 以上为程序装入后寄存器初始设置,注意DS和ES的值,它们现在指向PSP的段基址。 标志位值的符号表示:标志位 OFDF IF SF
51、 ZF AF PF CF(1) OV DN EI NG ZR AC PE CY(0) NV UP DI PL NZ NA PO NC(2)用R命令显示寄存器值(3)用G命令执行正在被调试的程序到断点-g9 AX=1306 BX=0000 CX=0064 DX=0000 SP=003C BP=0000 SI=0000DI=0000DS=1306 ES=12F2 SS=1302 CS=1307 IP=0009 NV UP EI PL ZR NA PE NC1307:0009 A10000 MOV AX,0000 DS:0000=007B (3)用G命令执行正在被调试的程序到断点(4)用D命令查看数
52、据-d ds:0 f 1306:0000 7B 00 C8 01 00 00 00 00-00 00 00 00 00 00 00 00 .(4)用D命令查看数据(5)用T命令跟踪执行程序-tAX=0243 BX=0000 CX=0064 DX=0000 SP=003C BP=0000 SI=0000 DI=0000 DS=1306 ES=12F2 SS=1302 CS=1307 IP=0010 NV UP EI PL NZ AC PO NC 1307:0010 A30400 MOV 0004,AX DS:0004=0000-t AX=0243 BX=0000 CX=0064 DX=0000
53、SP=003C BP=0000 SI=0000 DI=0000 DS=1306 ES=12F2 SS=1302 CS=1307 IP=0013 NV UP EI PL NZ AC PO NC 1307:0013 CB RETF(5)用T命令跟踪执行程序(6)在返回前用D命令看程序的执行结果-d ds:0 f1306:0000 7B 00 C8 01 43 02 00 00-00 00 00 00 00 00 00 00 .C. 1306:0004单元中的43 02是结果579的十六进制逆序表示形式。(7)用Q命令退出DEBUG返回到操作系统-q D:MASM (6)在返回前用D命令看程序的执行
54、结果建立文件:edit prog4_3.asm汇编:masm prog4_3;连接:link prog4_3;转换:exe2bin prog4_3.exe prog4_删除.exe文件:del prog4_3.exe执行.com文件: prog4_3调试:debug prog4_4.5.2 .com结构文件上机过程建立文件:edit prog4_3.asm4.5.2 可以看出,它与.EXE文件上机过程类似,只是在连接后所生成的.EXE文件不能直接运行,而需要使用DOS命令EXE2BIN把.EXE转换成.COM文件,然后删除连接所生成的.EXE文件,执行和调试均是对转换后的.COM文件进行操作。
55、 可以看出,它与.EXE文件上机过程类似,只是在连接后所生4.6 调用ROM BIOS或DOS中断实现数据的输入输出 4.6 调用ROM BIOS或DOS中断实现数据的输入输返回硬件ROM BIOS中断DOS中断 ROM BIOS和DOS中断层次图返回硬件ROM BIOS中断DOS中断 ROM BIO1键盘中断调用16H16H中断服务子程序提供了多个功能,每个功能对应一个功能号。调用它们的方法是: 功能号AH INT 16H4.6.1 使用ROM BIOS中断调用1键盘中断调用16H4.6.1 使用ROM BIOS中断调主要功能简述如下:功能号功 能返 回 参 数0等待从键盘读字符AL字符的A
56、SCII值,AH扫描码1读键盘缓冲区字符若ZF1,表示缓冲区空;否则表示缓冲区不空,则ALASCII值,AH扫描码2返回键盘状态字节AL键盘状态字节主要功能简述如下:功等待从读键盘若ZF1,表示缓冲区空;否说明:对于2号功能,AL中返回的键盘状态字节各位含义如下:1按下右Shift键1按下左Shift键1按下Ctrl键1按下Alt键1Scroll Lock状态改变1Num Lock状态改变1Caps Lock状态改变1Insert状态改变位76543210说明:对于2号功能,AL中返回的键盘状态字节各位含义如下: 例1从键盘接收一个字符,并送入CHAR变量。CHAR DB ? MOV AH,0
57、 INT 16H ;等待从键盘接收一个字符 MOV CHAR,AL;接收到的字符保存 例1从键盘接收一个字符,并送入CHAR变量。也可以用1号功能完成上述功能,如下所示:CHAR DB ?LOP: MOV AH,1INT 16H;读键盘缓冲区JZ LOP;若缓冲区无字符可取则循环等待MOV CHAR,AL;接收到的字符保存也可以用1号功能完成上述功能,如下所示:例2设启动时初始化键盘为改写状态。编写能够实现以下要求的程序段:若按了Insert键,则转入插入处理,否则继续处于改写状态。MOVAH,2INT16HTEST AL,80HJNZINSERT.INSERT:. ;插入处理例2设启动时初始
58、化键盘为改写状态。编写能够实现以下要求的2显示器中断调用10H计算机的显示器有单色和彩色之分,它们可以工作于文本方式和图形方式。本节只介绍与文本方式有关的部分功能。显示器在文本方式下可以工作于4025、8025等显示方式。2显示器中断调用10H字符的属性确定了每个要显示字符的特性,例如字符是否闪烁、彩色字符的颜色等。下图是彩色文本显示的属性字节。字符的属性确定了每个要显示字符的特性,例如字符是否闪烁、彩返回背景色前景色闪烁彩色文本属性字节76543210BLRGBIRGB返回背景色前景色闪烁彩色文本属性字节7654 下表给出了16种字符颜色的组合,它也适用于图形方式。 当前景和背景选择相同颜色
59、组合时,字符便无法看见。 下表给出了16种字符颜色的组合,它也适用于图形方式。返回颜色IRGB颜色IRGB黑0000灰1000蓝0001浅蓝1001绿0010浅绿1010青0011浅青1011红0100浅红1100品红0101浅品红1101棕0110黄1110白0111亮白1111 彩色文本显示方式的属性字节返回颜色IRGB颜色IRGB黑0000灰1000蓝0001浅 设置显示模式功能号:0调用参数:AL显示模式。 设置显示模式返回模式类型列行分辨率颜色数0文本40252(黑白)1文本4025162文本802523文本8025164图形32020045图形32020026图形64020027文
60、本802540DH图形320200160EH图形640200160FH图形640350410H图形6403501611H图形640480212H图形6404801613H图形320200256 常用显示模式返回模式类型列行分辨率颜色数0文本40252(黑白)1例1设置显示器为8025彩色文本模式。MOVAH ,0MOVAL ,3INT10H例1设置显示器为8025彩色文本模式。 初始化窗口或窗口内容向上卷动功能号:6调用参数:AL上卷行数 BH空白区属性 CH=窗口左上角行号 CL=窗口左上角列号 DH=窗口右下角行号 DL=窗口右下角列号 初始化窗口或窗口内容向上卷动例2清屏,并设置为蓝底白
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 半导体封装设计行业营销策略方案
- 商品和服务的质量控制行业相关项目经营管理报告
- 性别平等心理咨询热线服务行业市场调研分析报告
- 助产士服务行业营销策略方案
- 寄宿学校教育服务行业营销策略方案
- 气量计计量仪器产品供应链分析
- 声音传送装置用话筒挑杆产品供应链分析
- 科学用棱镜细分市场深度研究报告
- 蛋糕铲细分市场深度研究报告
- 托管网站行业营销策略方案
- 上海市普陀区2024-2025学年六年级(五四学制)上学期期中语文试题
- 期中测试卷-2024-2025学年统编版语文三年级上册
- 封条模板A4直接打印版
- 检验科授权申请表1页
- 旅游线路设计实务 理论知识篇
- 工程地质学—地貌
- 应聘登记表(CMHR
- 《海报设计》PPT课件(完整版)
- 手工电弧焊焊接工艺规范
- 单元体幕墙吊装施工方案
- 大学的学习方法PowerPoint 演示文稿
评论
0/150
提交评论