第四部分汇编语言程序格式教学课件.ppt

上传人:sccc 文档编号:5135832 上传时间:2023-06-07 格式:PPT 页数:109 大小:1.08MB
返回 下载 相关 举报
第四部分汇编语言程序格式教学课件.ppt_第1页
第1页 / 共109页
第四部分汇编语言程序格式教学课件.ppt_第2页
第2页 / 共109页
第四部分汇编语言程序格式教学课件.ppt_第3页
第3页 / 共109页
第四部分汇编语言程序格式教学课件.ppt_第4页
第4页 / 共109页
第四部分汇编语言程序格式教学课件.ppt_第5页
第5页 / 共109页
点击查看更多>>
资源描述

《第四部分汇编语言程序格式教学课件.ppt》由会员分享,可在线阅读,更多相关《第四部分汇编语言程序格式教学课件.ppt(109页珍藏版)》请在三一办公上搜索。

1、第四章 汇编语言程序格式,4.1 汇编语言语句种类4.2 伪操作4.3 汇编语言程序格式4.4 汇编语言的上机过程,4.1 汇编语言语句种类,一、指令语句二、伪指令语句三、宏指令,使CPU产生动作、并在程序执行时才处理的语句,就是第3章学习的处理器指令书写格式标号:指令助记符 DEST,SRC;注释标号:一条指令的符号地址。可以省略,如有必须以“:”作为结束标志。在程序段或子程序段的第一条指令处可使用标号,以在程序需要时转移到该处时,以标号的形式引用。,一、指令语句,二、伪指令语句,(Directive)不产生CPU动作、在程序执行前由汇编程序处理的说明性语句,例如,数据说明、变量定义等等伪指

2、令与具体的处理器类型无关,但与汇编程序的版本有关名字 伪指令 操作数;注释名字段:与标号相区别,不带“:”,标号/名字的命名,根据用途,由字母、数字、专用符号?-$组成约定:最长31个字符第一个字符不能是数字?、-、$、可出现在标号的任意位置,但?、$不能单独使用“.”只能出现在起始位置一个程序中,每个标识符的定义是唯一的,且不能与任何保留字相同,4.2 伪操作,一、处理器选择伪操作二、段定义伪操作三、程序开始和结束伪操作四、数据定义及存储器分配伪操作五、表达式赋值伪操作六、地址计数器及对准伪操作七、基数控制伪操作,一、处理器选择伪操作,.8086;选择8086指令系统.286;选择80286

3、指令系统.286 P;选择保护方式下的80286指令系统.386;选择80386指令系统.386 P;选择保护方式下的80386指令系统.486;选择80486指令系统.486 P;选择保护方式下的80486指令系统.586;选择Pentium指令系统.486 P;选择保护方式下的Pentium 指令系统,二、完整段定义伪操作,程序的段结构,段定义段寻址(指定当前段)段寄存器的装入,二、完整段定义伪操作,段名SEGMENT 定位 组合 类别;语句序列段名ENDS,段定义由SEGMENT和ENDS这一对伪指令实现,SEGMENT伪指令定义一个逻辑段的开始,ENDS伪指令表示一个段的结束段定义指令

4、后的4个关键字用于确定段的各种属性,堆栈段要采用stack组合类型如果不指定,则采用默认参数;但如果指定,注意要按照上列次序,二、完整段定义伪操作段定位(align)属性,表示对逻辑段起始边界的选择,可为:PAGE 段从一个页边界开始(XXX00H,256Bytes/Page)PARA段节边界开始(XXXX0H)DWORD段从一个4倍数地址开始WORD 段从一个偶地址开始BYTE 段可以从任意单元开始完整段定义伪指令的默认定位属性是PARA,二、完整段定义伪操作段组合(combine)属性,指定多个逻辑段之间如何连接与定位,可为:PRIVATE 本段与其他段没有连接关系,这是完整段定义伪指令默

5、认的段组合方式 PUBLIC 在满足定位关系的前提下,连接程序把本段与所有同名段相邻地连接在一起,形成新的逻辑段。(可在程序的不同位置及不同的文件中使用段定义语句定义一个逻辑段)COMMON 产生一覆盖段,两个同名段起始地址相同,用较长的段覆盖较短的段,二、完整段定义伪操作段组合(combine)属性,STACK把所有的同类别段连接在一起,段基值SS,且自动为SP初始化。在一个程序中一般应该有一个堆栈段。AT 表达式 AT 0930H;表示本段的物理地址从09300H开始 MEMORY 表示本段定位在所有其它段的最高地址,二、完整段定义伪操作段类别(class)属性,当连接程序组织段时,将所有

6、的同类别段相邻分配段类别可以是任意名称,但必须位于单引号中大多数MASM程序使用 code、data和stack来分别指名代码段、数据段和堆栈段,以保持所有代码和数据的连续,DA1SEGMENT PARA DATADD1DB 10 DUP(12H)DA1ENDSSTA1SEGMENT STACK STACK0DW 20H DUP(?)STA1ENDSDA2SEGMENT PARA DATADD2DB 20H DUP(13H)DA2ENDSSTA2SEGMENT STACK STACK0DW 30H DUP(?)STA2ENDSCODE SEGMENTCODE ENDS,二、完整段定义伪操作段寻

7、址,指明当前段ASSUME 段寄存器名:段名,段寄存器名:段名,,在程序运行过程中,可重新设置当前段,也可以删除原有的设置ASSUME ES:NOTHING;删除对ES的设置ASSUME NOTHING;删除对所有段的设置,二、完整段定义伪操作段寄存器的装入,ASSUME只说明了哪些段为当前段,具体的段基值并没有装入,DS与ES的装入用ASSUME将DS/ES与相应的段建立联系后,用数据传送指令MOVAX,段名MOVDS/ES,AX,二、完整段定义伪操作段寄存器的装入,SS的装入在定义段时,用组合类型STACK说明STACK1SEGMENT PARA STACKDW 20H DUP(0)STA

8、CK1ENDSCODESEGEMNTASSUME CS:CODE,SS:STACK1,SS获得STACK1的段基值,且SP=40H,二、完整段定义伪操作段寄存器的装入,SS的装入(类似于DS/ES的方法)STACK1SEGMENTDW 40H DUP(0)BOTTOMLABEL WORDSTACK1ENDSCODESEGEMNTASSUME CS:CODEMOV AX,STACK1MOV SS,AXMOV SP,OFFSET BOTTOM;SP=80H,中间不得插入其他指令,二、完整段定义伪操作段寄存器的装入,CS的装入用结束伪指令:每个源程序都必须以END伪指令END 起始地址,标号表达式,

9、不一定是指令语句,二、完整段定义伪操作段寄存器的装入,CS的装入CODESEGEMNTASSUME CS:CODE,SS:STACK1START:END START,四、数据定义及存储器分配伪操作,数据是语句中操作数的基本组成部分一般来讲数据具有数值和属性两个特征汇编语言能识别的数据项包括:常数、变量和标号,四、数据定义及存储器分配伪操作,变量:代表存储在某些存储单元中的数据,在程序运行期间可以修改;对变量的访问以变量名的形式进行;可认为变量名为存储单元的符号地址变量的定义与预置由数据定义伪操作完成,分配存储单元起名字赋初值,四、数据定义及存储器分配伪操作数据定义伪指令的格式,变量名,DBDW

10、DDDQ,表达式1,表达式2,,段属性(SEG):表示变量存放在哪个逻辑段中,访问时要使之成为当前段偏移量属性(OFFSET):表示变量在所属逻辑段中距起始点的距离类型属性(TYPE):表示变量所占字节数,四、数据定义及存储器分配伪操作数据定义伪指令(表达式),数值表达式D1 DB 12H,34H,56H(D1)=12H,(D1+1)=34H,(D1+2)=56HD2 DW 1234H,5678H(D2)=1234H,(D2+2)=5678H?表达式:表示该单元的内容任意D3 DB?,?;表示分配2个字节D4 DW?,?;表示分配2个字,四、数据定义及存储器分配伪操作数据定义伪指令(表达式),

11、字符串表达式STR1 DB ABCDE;为每个字符分配1个单元,STR2 DW AB,CD;为由2个字符组成的字符串分配2个单元,四、数据定义及存储器分配伪操作数据定义伪指令(表达式),带DUP的表达式,变量名,DBDWDDDQ,表达式1 DUP(表达式2),D1 DB 20H DUP(?);预留20H个字节,内容任意,D2 DB 10H DUP(ABCD);重复10H个ABCD,共占40H字节,D3 DW 10H DUP(4);重复10H个字单元,内容0004H,共占20H字节,四、数据定义及存储器分配伪操作数据定义伪指令(表达式),带DUP的表达式DUP操作符可重复使用,D4 DB 10H

12、 DUP(4 DUP(2),7),;重复10H个(2,2,2,2,7),共占50H字节,变量的使用在指令语句中,对已经定义的变量直接引用其符号名DATA SEGMENTDA1 DB 0FEHDA2 DW 52ACHDA3 DB 10H DUP(?)DA4 DW 10H DUP(1)MOV AL,DA1;AL=FEH MOV BX,DA2;BX=52ACH MOV SI,2 MOV DA3SI,AL MOV DA4SI,BX,变量的使用在伪指令语句中,DATA SEGMENTDA1 DB 12HNUM DB 75HARRAY DW 20H DUP(0)ADR1 DW NUMADR2 DD NUM

13、ADR3 DW ARRAY2,DW:定义的存储单元存放相应变量的偏移量DD:定义的存储单元存放相应变量的偏移量和段基值不能使用DB N,五、表达式赋值伪操作,等值语句符号 EQU 表达式;将表达式的值赋给左边的符号,表达式的形式1)常数或数值表达式CNT EQU 5NUM EQU 13+5+4,2)址表达式ADR1 EQU DS:BP+14,3)变量、标号或指令助记符W0 EQU WORD PTR DA_BYTE,等值语句仅在汇编源程序时作为替代符号用,不产生任何目标代码,不占存储单元在同一程序中,同一符号不能用EQU重复定义,五、表达式赋值伪操作,等值语句符号=表达式;功能与EQU相同,但可

14、重复定义,CNT=5NUM=4NUM=NUM+10HCBD=DDACBD=ADD,地址计数器$:汇编程序在为每条指令或变量分配内存时,使用当前位置计数器来指示下一指令或数据的偏移量,用$表示其值定位伪指令:ORG 表达式将表达式的值赋给当前位置计数器。即该伪指令后的指令或变量以表达式的值为偏移量 EVEN使下一指令或变量的偏移量为偶数 ALIGNboundary boundary的取值为2的整数倍,六、地址计数器及对准伪操作,五、地址计数器及对准伪操作(例),DATASEGMENT ORG 30HDB1DB 12H,34HORG$+20HSTRDB ABCCNTEQU$-STREVENDW1D

15、W 20H DUP(0)DATAENDSCODE SEGMENTASSUME CS:CODE,DS:DATAORG 10HSTART:MOV AX,DATAMOV DS,AXCODE ENDSEND START,六、基数控制伪操作,汇编语言源程序默认使用十进制,其他用标注表示(B,O,H)格式:RADIX 表达式功能:把默认的基数改为2、8、16等 除指定进制外,其他加标注,MOV BX,0FFHMOV BX,178,RADIX 16MOV BX,0FFMOV BX,178D,七、程序开始和结束伪操作,开始:NAME modul_nameTITLE text,程序终止和汇编结束是两码事,结束:

16、END 起始地址,一、指令语句,使CPU产生动作、并在程序执行时才处理的语句,就是第3章学习的处理器指令书写格式标号:指令助记符 DST,SRC;注释标号:一条指令的符号地址。可以省略,如有必须以“:”作为结束标志。在程序段或子程序段的第一条指令处可使用标号,以在程序需要时转移到该处时,以标号的形式引用。,4.3 汇编语言程序格式,二、伪指令语句,名字 伪指令 操作数;注释,4.3 汇编语言程序格式,符号名字段:与标号相区别,不带“:”可以是常量名、变量名、过程名、结构名、记录名等可视为指令语句中的操作数(如符号名就表示一个常量或存储地址命名规则与标号相同伪指令字段:规定这条语句要求汇编程序完

17、成的具体操作,标号:指令的符号地址,段属性(SEG)偏移量属性(OFFSET)距离属性(Distance类型):表示标号的转移特性,类型:NEAR:本标号只能被标号所在段的指令访问(段内转移、调用)FAR:可被其他段的指令访问(段间调用、转移),标号,2.设置标号距离属性的方法1)隐含方式:在指令语句中使用标号后,其隐含为NEAR属性SUB1:MOV AL,30H;SUB1具有NEAR属性;该方式定义的标号只能具备NEAR属性,标号,2.设置标号距离属性的方法2)用LABEL 伪指令赋予标号距离属性名称 LABEL 类型,/Type,该伪指令一般与指令语句/数据定义伪指令连用,以补充或设置与值

18、连用的标号/变量的距离/类型属性,段间转移/调用:SUB1_FAR,设置标号距离属性的方法(例1),SUB1:MOV AL,30H,段内转移/调用:SUB1,SUB1_FARLABEL FAR,设置变量类型属性的方法(例2),D_WORD DW 20H DUP(?),利用D_WORD无法取出数组中的某字节MOVAL,D_WORD+4,D_BYTE LABEL BYTE,MOVAL,D_BYTE+4,段属性(SEG):表示变量存放在哪个逻辑段中,访问时要使之成为当前段偏移量属性(OFFSET):表示变量在所属逻辑段中距起始点的距离类型属性(TYPE):表示变量所占字节数,变量:存储单元的符号地址

19、,表达式与运算符,指令中的操作数可以以表达式的形式出现,汇编程序在汇编过程中计算表达式,最终得到一个数值程序运行之前,就已经计算出了表达式;所以,程序运行速度没有变慢,但增强程序的可读性MASM对除伪指令外各种汇编时处理的指令统称为操作符(Operator),运算符,运算符算术运算符,+-*/MOD SHR SHL 实现加、减、乘、除、取模、移位的运算MOV AX,3*4+5;等价于 MOV AX,17其中MOD也称为取模,它产生除法之后的余数,如19 mod 7=5加+和减-运算符还可以用于地址表达式表达式 SHR/SHL CNT除加、减外,其他运算符的参数必须是整数,算术运算符例,NUM=

20、11011011BMOV AL,NUM SHL 3MOV AL,11011000BMOV BL,NUM SHR 2MOV AL,00110110BADD DL,NUM SHR 6ADD DL,00000011BMOV AL,ARRAYBXSI MOV AL,ARRAYBX+SI,运算符逻辑运算符,AND OR XOR NOT实现按位相与、相或、异或、求反的逻辑运算OR AL,03H AND 45H0R AL,01HMOV AX,NOT 0F0HMOV AX,0FF0FHMOV BL,55H AND 0F0H MOV BL,50H,运算符关系运算符,EQ NE GT LT GE LE用于比较和测

21、试符号数值表达式1 关系运算符 表达式2表达式为常数时,按无符号数进行比较表达式为变量(同段内)时,比较其偏移量MASM用0FFH/0FFFFH(补码-1)表示条件为真MASM用0000H表示条件为假,运算符关系运算符(举例),MOV AX,0FH EQ 1111B MOV AX,0FFFFHMOV BX,0FH NE 1111B MOV BX,0VAR DW NUM LT 0ABH;当已定义的常数NUM小于ABH时,则VAR 0FFFFH,操作对象:存储器操作数(变量/标号)格式:运算符 变量名/标号名,运算符数值返回运算符,SEG 名字/标号返回名字或标号的段基值MOV AX,SEG K1

22、,OFFSET 名字/标号返回名字或标号的段内偏移地址MOV SI,OFFSET VAR,运算符数值返回运算符,TYPE 名字/标号返回名字或标号的类型属性,以数字形式表示,运算符数值返回运算符(例),V1 DB ABCDV2 DW 1234H,5678HV3DD V2MOV AL,TYPE V1;AL=1MOV CL,TYPE V2;CL=2MOV CH,TYPE V3;CH=4,运算符数值返回运算符,LENGTH 名字/标号只用于变量,且为DUP所定义如未用DUP定义则返回值为1如使用DUP定义则返回最外层之值,运算符数值返回运算符(例),K1DB 10H DUP(0)K2DB 10H,2

23、0H,30HK3DW 20H DUP(0,1,2 DUP(2)K4DB ABCD MOV AL,LENGTH K1;AL=10H MOV BL,LENGTH K2;BL=1 MOV CX,LENGTH K3;CX=20H MOV DX,LENGTH K4;DX=1,运算符数值返回运算符,SIZE 名字只用于变量,得到重复定义的变量的数组元素所占字节数=LENGTH*TYPE,K1DB 10H DUP(0)K2DB 10H,20H,30HK3DW 20H DUP(0,1,2 DUP(2)K4DB ABCDMOV AL,LENGTH K1;AL=10HMOV BL,LENGTH K2;BL=1MO

24、V CX,LENGTH K3;CX=20HMOV DX,LENGTH K4;DX=1MOV AL,SIZE K1;AL=10HMOV BL,SIZE K2;BL=1MOV CL,SIZE K3;CL=40HMOV DL,SIZE K4;DL=1,运算符属性修改运算符,对存储器操作数(名字/标号)的属性进行修改PTR 运算符类型 PTR 地址表达式,该修改是临时的,只在当前语句有效,运算符属性修改运算符(例),DA_BYTE DB 20H DUP(0)DA_WORD DW 30H DUP(0)LEA BX,DA_WORD LEA SI,DA_BYTE MOV AX,WORD PTR DA_BYT

25、E10H ADD BYTE PTR DA_WORD20H,BL INC BYTE PTR BX SUB WORD PTR SI,30H AND AX,WORD PTRBXSI JMP FAR PTR SUB1,运算符的优先级,1()LENGTH SIZE WIDTH MASK2PTR OFFSET SEG TPYE THIS:3HIGE LOW4*/MOD SHL SHR5+-6EQ NE GT LT GE LE7NOT8AND9OR XOR10SHORT,建议采用圆括号“()”显式表达,它可以极大地提高程序的可阅读性,过程定义伪指令,过程名PROC NEAR/FARRET过程名ENDP,;隐

26、含为NEAR,;必须包含,在同一个逻辑段中可包含多个过程,程序结束返回的方法,以过程成形式编制的程序以中断指令“INT 21H”返回,程序结束返回的方法以过程成形式编制的程序,程序段前缀PSP(Program Segment Prefix),从可用内存的最低地址处开始参数与缓存区结合的区域共占256(100H)字节操作系统在PSP首址+100H处装配要运行的程序对扩展名为EXE的程序,运行时DS和ES指向程序段前缀在PSP PSP+1存放指令“INT 20H”(该指令使程序返回控制台命令接收状态),PSP,DS:0000H,ES:0000,附加段,已用内存,各段顺序及大小随程序而定,数据段,堆

27、栈段,剩余内存,程序段前缀PSP,代码段,INT 20H,100H,PSP+100H,程序结束返回的方法以过程成形式编制的程序,对过程的要求,过程的距离属性应设置为FAR保留进入程序前的DS(PUSH DS)使过程结束后执行 INT 20H过程的最后一条指令RET 后从栈顶弹出DS:0000 CS:IP,程序结束返回的方法以过程成形式编制的程序,MAINPROC FARPUSH DSXOR AX,AXPUSH AXRETMAIN ENDP,;完成所需要的功能,程序结束返回的方法以中断指令“INT 21H”返回,DOS软中断向用户提供了一组非常有用的系统功能,其中4CH功能结束当前进程,控制返回

28、给调用该程序的进程,因此,在程序结束前加入语句:MOV AH,4CHINT 21H,源程序:文件名.asm,目标模块:文件名.obj,可执行文件:文件名.exe,错误,4.4 汇编语言的上机过程,开发过程源程序的编辑,源程序文件要以ASM为扩展名源程序文件的形成(编辑)可以通过任何一个文本编辑器实现:DOS中的全屏幕文本编辑器EDIT其他程序开发工具中的编辑环境MASM程序员工作平台PWB中的编辑环境EDIT TEST.ASM,开发过程源程序的汇编,汇编是将源程序翻译成由机器代码组成的目标模块文件的过程MASM 6.x提供的汇编程序是MASM.EXE:MASM TEST.ASM如果源程序中没有

29、语法错误,MASM将自动生成一个目标模块文件(TEST.OBJ);否则MASM将给出相应的错误信息这时应根据错误信息,重新编辑修改源程序后,再进行汇编,开发过程目标模块的连接,连接程序能把一个或多个目标文件和库文件合成一个可执行程序(.EXE、.COM文件):LINK TEST.OBJ如果没有严重错误,LINK将生成一个可执行文件(TEST.EXE);否则将提示相应的错误信息这时需要根据错误信息重新修改源程序后再汇编、链接,直到生成可执行文件,开发过程可执行程序的调试,经汇编、连接生成的可执行程序在操作系统下只要输入文件名就可以运行:TEST操作系统装载该文件进入主存,并开始运行如果出现运行错

30、误,可以从源程序开始排错,也可以利用调试程序帮助发现错误采用DEBUG.EXE调试程序:DEBUG TEST.EXE,简单的汇编源程序(例1),编制一汇编源程序,求出下列公式中的Z值,并放在RESULT单元中。,开始,预置数据段和堆栈段,为返回DOS做准备,DX X+Y,DX DX*8,DX DX-X,DX DX/2,RESULT DX,返回,TITLEEXAMPLEDATASEGMENT XDW 6YDW 7RESULT DW?DATAENDSSTA1SEGMENT PARA STACKDW 20H DUP(0)STA1 ENDSCODESEGMENTPROC1PROC FAR ASSUME

31、 CS:CODE,DS:DATAASSUME SS:STA1,START:PUSH DS;为返回做准备XOR AX,AXPUSH AXMOV AX,DATA;装入DSMOV DS,AXMOV DX,X;DX=XADD DX,Y;DX=X+YMOV CL,3SHL DX,CL;DX=(X+Y)*8SUB DX,X;DX=(X+Y)*8-XSAR DX,1;DX=(X+Y)*8-X)/2MOV RESULT,DXRETPROC1 ENDPCODE ENDS END START,简单的汇编源程序(例2),用查表的方法将1位十六、进制数转换成相应的ASCII码。,解:将地址及其单元存储的内容建立一种关

32、系,DATASEGMENT TABLE DB 30H,31H,32H,33H,34H,35HDB 36H,37H,38H,39HDB 41H,42H,43H,44H,45H,46HHEXDB 4ASCIIDB?DATAENDSSTA1SEGMENT PARA STACKDW 20H DUP(0)STA1 ENDSCODESEGMENTASSUME CS:CODE,DS:DATAASSUME SS:STA1,START:MOV AX,DATA;装入DSMOV DS,AXXOR BX,BXMOV BL,HEXMOV DL,TABLEBXMOV ASCII,DLMOV AH,2INT 21HMOV

33、AH,4CHINT 21HCODEENDSEND START,MOV BX,OFFSET TABLEMOV AL,HEXXLAT TABLEMOV ASCII,ALMOV DL,AL,COM文件及其编写与建立,COM文件也是一种可执行文件由程序本身的二进制代码组成,没有exe文件的头信息,占用的存储空间相对要小;文件只由一个逻辑段构成,所占空间=64KB装入速度快于exe文件COM文件的编写程序不分段入口必须是100H不必设置堆栈段,系统自动将SP建立在段末所有的过程均应具有NEAR属性,COM文件源程序格式举例,program segmentorg 100hassume cs:program

34、,ds:programassume es:program,ss:programmainproc near;program goes heremov ah,4chint 21h;data goes hereprogramendsend main,COM文件建立,Cexe2bin filename,源程序的两种格式书写,源程序分别用两种格式书写 1)第一种格式MASM 5.0以前就具有 完整段定义格式 2)第二种格式从MASM 5.0开始支持 简化段定义格式,三、存储模式与简化段定义伪指令,.MODEL 存储模式使用简化段定义,必须有存储模式伪指令.model语句必须位于所有段定义语句之前存储模式

35、决定一个程序的规模,确定进行子程序调用、指令转移和数据访问的缺省属性MASM有7种不同的存储模式:TINY SMALL COMPACT MEDIUM LARGE HUGE FLAT,三、存储模式TINY微型模式,微型模式是MASM 6.0才引入的用于创建COM类型程序用微型模式编写汇编语言程序时,所有的段地址寄存器都被设置为同一值这意味着代码段、数据段、堆栈段都在同一个段内,不大于64KB;访问操作数或指令都只需要使用16位偏移地址,存储模式SMALL小型模式,一般的程序(例如本书的绝大多数程序示例和习题)都可用这种模式在小型模式下,一个程序至多只能有一个代码段和一个数据段,每段不大于64KB

36、这里的数据段是指数据段、堆栈段和附加段的总和,它们共用同一个段基址,总长度不可超过64KB;因此小模式下程序的最大长度为128KB访问操作数或指令都只需要使用16位偏移地址;这意味着诸如指令转移、程序调用以及数据访问等都是近属性(NEAR),即小型模式下的调用类型和数据指针缺省分别为近调用和近指针,存储模式COMPACT紧凑模式,适合于数据量大但代码量小的程序紧凑模式下,代码段被限制在一个不大于64KB的段内;而数据段则可以有多个,超过64KB这种模式下的调用类型缺省仍为近调用;而数据指针缺省为远(FAR)指针,因为必须用段地址来区别多个数据段,存储模式MEDIUM中型模式,中型模式是与紧凑模

37、式互补的模式适合于数据量小但代码量大的程序中型模式的代码段可以超过64KB,有多个;但数据段只能有一个不大于64KB的段这种模式下的数据指针缺省为近指针;但调用类型缺省是远(FAR)调用,因为要利用段地址区别多个代码段,存储模式LARGE大型模式,较大型程序通常采用的存储模式大型模式允许的代码段和数据段都有多个,都可以超过64KB;但全部的静态数据(不能改变的数据)仍限制在64K字节内大型模式下的调用类型和数据指针缺省分别为远调用和远指针,存储模式HUGE(巨型模式),与大型模式基本相同,只是静态数据不再被限制在64K字节之内,存储模式 FLAT平展模式,平展模式用于创建一个32位的程序,它只

38、能运行在32位x86 CPU上。DOS下不能使用FLAT模式,而编写32位Windows 9.x或Windows-NT的程序时,必须采用FLAT模式。,简化段定义伪指令,.STACK 大小;堆栈段开始.DATA;数据段开始.CODE 段名;代码段开始,简化段定义伪指令指明一个逻辑段的开始,同时自动结束前面的一个段采用简化段定义伪指令前,需有.model语句使用简化段定义,各段名称和其他用户所需的信息可以使用MASM预定义符号,例如:data表示由.data等定义的数据段的段名,简化段定义伪指令堆栈段伪指令,.STACK 大小堆栈段伪指令.STACK创建一个堆栈段,段名是:stack它的参数指定

39、堆栈段所占存储区的字节数,默认是1KB(=1024=400h字节),简化段定义伪指令数据段伪指令,.DATA数据段伪指令.data创建一个数据段,段名是:_DATA。它用于定义具有初值的变量,当然也允许定义无初值的变量无初值变量可以安排在另一个段中,它用.data?伪指令创建,数据段名是:_BSS.const伪指令用于建立只读的常量数据段(段名:CONST),简化段定义伪指令代码段伪指令,.CODE 段名代码段伪指令.code创建一个代码段,它的参数指定该代码段的段名如果没有给出段名,则采用默认段名:在TINY、SMALL、COMPACT和FLAT模式下,默认的代码段名是:_TEXT 在MED

40、IUM、LARGE和HUGE模式下,默认的代码段名是:模块名_TEXT,简化段定义伪指令程序开始伪指令,.STARTUP按照CPU类型、存储模式、操作系统和堆栈类型,产生程序开始执行的代码;同时还指定程序开始执行的起始点在DOS下,还将设置DS值,调整SS和SP值使用了该伪指令,则程序结束处的END伪指令不必再指定程序入口处的标号,简化段定义伪指令程序终止伪指令,.EXIT 返回参数产生终止程序执行返回操作系统的指令代码它的可选参数是一个返回的数码,通常用0表示没有错误。例如.exit 0对应的代码是:mov ah,4chint 21hDOS功能调用的4ch子功能(返回DOS):入口参数:AH

41、4ch,AL返回数码,简化段定义格式MASM 6.x支持,;SampleA.ASM.model small.stack.data.;在数据段定义数据.code.startup.;在代码段填入指令序列.exit 0.;子程序代码end,;lt301a.asm(文件名).model small;定义程序的存储模式.stack;定义堆栈段.data;定义数据段stringdb Hello,Everybody!,0dh,0ah,$;在数据段定义要显示的字符串.code;定义代码段.startup;程序起始点,建立DS、SSmov dx,offset string;指定字符串mov ah,9int 21

42、h;利用功能调用显示信息.exit 0;程序结束点,返回DOSend;汇编结束,Hello,Everybody!,6.4 DOS系统功能调用,系统功能调用,21H号中断是DOS提供给用户的用于调用系统功能的中断,它有近百个功能供用户选择使用,主要包括设备管理、目录管理和文件管理三个方面的功能ROM-BIOS也以中断服务程序的形式,向程序员提供系统的基本输入输出程序汇编语言程序设计需要采用系统的各种功能程序充分利用操作系统提供的资源是程序设计的一个重要方面,需要掌握,Video processing,Use INT instruction to handle inputs and outputs

43、INT 10H:screen handling(BIOS)INT 21H:for displaying screen output(DOS)Main idea:Insert a value in AH register which is used to identify the type of service the interrupt needs to perform,字符输出的功能调用,DOS功能调用INT 21H功能号:AH02H(06)入口参数:DL字符的ASCII码功能:在显示器当前光标位置显示给定的字符,光标右移一个字符位置。如按Ctrl-Break或Ctrl-C则退出,;在当前显

44、示器光标位置显示一个问号MOV AH,02H;设置功能号:AH02HMOV DL,?;提供入口参数:DL?INT 21H;DOS功能调用:显示,MOV AH,06HMOV DL,CINT 21H,CO_TITLEDB Intertech Corp.,13,10MOV AH,02HMOV CX,17LEA DI,CO_TITLEL10:MOV DL,DIINT 21HINC DILOOP L10,CO_TITLEDB Intertech Corp.,13,10COUNTEQU$-CO_TITLEMOV AH,02HMOV CX,COUNTLEA DI,CO_TITLEL10:MOV DL,DII

45、NT 21HINC DILOOP L10,INT 21 FUNCTION FOR SCREEN DISPLAY,Using Control Characters for a Screen Display,字符串输出的功能调用,DOS功能调用INT 21H功能号:AH09H入口参数:DS:DX欲显示字符串在主存中的首地址字符串应以$(24H)结束功能:在显示器输出指定的字符串可以输出回车(0DH)和换行(0AH)字符产生回车和换行的作用,字符串输出的功能调用显示字符串(例),STR DB HELLO,EVERYBODY!,0DH,0AH,$;在数据段定义要显示的字符串.MOV AH,09H;设置

46、功能号:AH09HMOV DX,OFFSET STR;提供入口参数:DX字符串的偏移地址INT 21H;DOS功能调用:显示,SCREEN FEATURES,25 rows(0-24)and 80 columns(0-79),(0,79),(0,0),(24,0),(24,79),Center:Row 12,Column 39,SCREEN FEATURES,Video Display Area:Text mode:4KB in BIOS(2K for characters and 2K for attributes)Pages:0 to 7INT 10H:Set cursor(AH=02H)

47、INT 10H:Clear&Scroll screen(AH=06H),SET CURSOR,INT 10H function 02H tells BIOS to set the cursorDetermine the row and column that we want to set our cursor at.E.g row=12,column=40)Load 02H to AH.Load page#to BH,Row#to DH,and Column#to DLCall INT 10H function,MOV AH,02HMOV BH,0;page#to BHMOV DH,08;ro

48、w#to DHMOV DL,15;column#to DLINT 10H,MOV DX,080FH,CLEARING THE SCREEN,INT 10H function 06H tells BIOS to clear or scroll screenAH=function 06HAL=number of lines to scroll,or 0 for full screenBH=attribute value(color,blinking.etc/.)CX=starting row:columnDX=ending row:column toCall INT 10H,MOV AX,0600

49、H;clear and scrollMOV BH,71H;white background,blue foregroundMOV CX,0000H;starting row:columnMOV DX,184FH;ending row:columnINT 10H,CLEARING THE SCREEN,Attribute byte in text mode determines the characteristics of each displayed character,BackgroundForegroundBlackBlue01HBlueRed14HGreenCyan23HWhiteLig

50、ht magenta7DHGreenGrayA8H,71=0111 0001(White background and Blue foreground),Displaying ASCII Characters,.MODEL SMALL.CODEORG 100HBEGIN:JMP SHORT A10MAINASCHARDB 00,$A10MAINPROC NEAR;Main procedure:;Clear screen and set attribute:MOV AX,0600H;Scroll full screenMOV BH,07;Attribute:white on blackMOV C

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号