第四部分汇编语言程序格式教学课件.ppt
《第四部分汇编语言程序格式教学课件.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,;隐
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第四 部分 汇编语言 程序 格式 教学 课件
链接地址:https://www.31ppt.com/p-5135832.html