【教学课件】第二章汇编语言和汇编程序.ppt
《【教学课件】第二章汇编语言和汇编程序.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第二章汇编语言和汇编程序.ppt(107页珍藏版)》请在三一办公上搜索。
1、第二章 汇编语言与汇编程序,2.1 机器语言与汇编语言一.机器语言机器只能识别二进制编码 机器指令机器能直接执行的一组二进制代码(命令)该二进制代码称为机器码(Machine Code).如:40HINC AX 01D8HADD AX,BX指令通常由两部分组成:操作码和操作数 操作码该指令的功能,即执行什么操作。操作数指令操作对象,指明参加操作的数或操作数的地址。,机器指令的集合机器语言用机器语言编写的程序 机器语言程序,二、汇编语言,机器语言编写程序烦琐,难记忆,不易理解,易出错。用一些助记符来表示指令的操作码,操作数亦用一些符号来表示符号指令。如上:40HINC AX 01D8HADD A
2、X,BX符号指令与机器指令一一对应。符号指令的集合符号语言,又称汇编语言用汇编语言编写的程序汇编语言程序不能由计算机直接执行,必须将它翻译成机器语言程序翻译过程称汇编翻译程序为汇编程序。汇编语言源程序 汇编 目标程序,三、宏汇编程序MASM,允许把一串指令定义为一条宏指令,有宏汇编功能。如MASM系统程序。宏汇编语言有三类基本指令:符号指令,伪指令,宏指令。,2.2 常用伪指令与常用算符,每一种计算机语言都规定了自己的符号系统及语法规则。汇编语言也是如此,除符号指令外,还必须正确使用各种符号。汇编中的各种符号由伪指令定义,或为汇编的保留字。,一、汇编语言源程序结构单模块程序结构,参见教材P、6
3、0 一般 程序由三个段组成。教材中程序的小写字母部分均为程序结构。,STACK SEGMENT STACK DW 32 DUP(?)STACK ENDSDATA SEGMENT:DATA ENDSCODE SEGMENTBEGIN PROC FAR ASSUME CS:CODE,SS:STACK,DS:DATA PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX:RETBEGIN ENDPCODE ENDS END BEGIN,定义堆栈段及堆栈长度,定义数据段,定义代码段,将汇编源程序视为DOS下的子程序,将程序段前缀PSP进栈,设置用户数据段,返回
4、到PSP,执行PSP中的第一条指令 INT 20H,结束程序返回调用程序,因为连接程序为每一个用户程序建立了一个 程序段前缀PSP,在PSP的开始处安排了一条 INT 20H指令,执行该指令结束当前程序返回 调用程序。,而PSP的地址,其段地址寄存在DS和ES中;偏移地址为0,将DS:0000地址进栈,即PSP地址进栈。,PSP的长度为256个字节,即100H个单元,主要存放了装入程序与DOS连接的信息。结束用户程序返回DOS有两种方法:其一:MOV AH,4CH;返回DOS INT 21H 其二:INT 20H;返回调用程序,便于调试它的机器码是CD20H,当用DEBUG调用EXE文件时,在
5、DS:0000单元中便可看到该指令。,DOS在转移控制权时,将CS指向EXE程序的代码段,SS指向堆栈段,但DS和ES并不指向用户程序的数据段和附加数据段,而是指向PSP。,二、常用伪指令(P58),伪指令不产生机器代码,CPU也不会产生某种操作,它主要告诉汇编程序哪些是数据,哪些是指令,符号约定,程序从何处开始,何处结束,即为汇编控制命令。伪指令很多,下面主要介绍段定义,过程定义。,1、段定义伪指令定义一个存储段,一个程序模块可由若干段组成。,格式:段名 SEGMENT 定位方式组合方 式类别名 伪指令或指令段名 ENDS功能:定义一个以“段名”为名称的存储段。,定位方式,组合方式,类别名赋
6、给段名的属性,三个可选项主要用于多模块化程序设计,以告诉LINK程序各模块间段如何定位,段与段如何组合,还可连接在一起。一般单模块程序可省略。,段名给段取名,用来指出汇编程序为该段分配的存储区的起始地址,即段地址,为一常数,用SEG运算符取得。定位方式相邻两段间应如何衔接,即对该段的起始地址所提出的要求。定位方式有四种选择:(1)PARA(节)规定段的起始地址总是16的整数倍,即低四位为零,省略时,系统隐含为此方式,教材中均默认为PARA方式。(2)WORD(字)规定段的起始地址总是2的整数倍,即低1位为零。,(3)Byte(字节)规定段的起始地址总是1的 整数倍,即能被1整除,任何地址可为段
7、地址,不留空隙。,(4)Page(页)规定段的起始地址总是256的整数倍,即低8位为零。,组合方式提供本段同其他段的组合关系,有6种选择方式。,(1)NONE不选择表示本段与其他逻辑上不发生关系,尽管物理上可能相邻,但每段都有自己的段首址。系统隐含该组合方式,单模块程序,各段之间不发生关系,采用不选择方式,教材中多数例题的数据段,代码段均为不选择方式。(2)PUBLIC公共将同段名,同类别名的段顺序相拼,是否留有空隙取决与定位方式。,(3)STACK堆栈将同段名,同类名的段顺序相拼,不留空隙,长度相加,构成堆栈段。一个程序模块中至少有一个段为STACK组合方式的段。,(4)COMMON公用将同
8、名段,同类别名的段相互覆盖,长度取决于最长的段。(5)AT表达式段地址为表达式的值。(6)MEMORY表示将本段定位在其他段的上面(即最高地址)。类别名用单引号括起来的字符串,连接时将同类别名的所有段(段名可不同)存放在连续的存储区。单模块程序可省略类别名。,2、假定伪指令,格式:ASSUME段寄存器:段名,功能:告诉汇编程序各段名与段寄存器的对应关系,一般在代码段中。因为,存储器分段管理,程序中的存储单元用逻辑地址的偏移地址来寻址,而段地址一般默认,所以,代码段一开始就要对段 寄存器与段之间的关系做假定。,3、源程序结束伪指令,格式:END 表达式功能:源程序的最后一个语句,标志整个程序结束
9、,即告诉汇编程序,汇编到此结束。表达式为可选项,必须是存储器地址,即程序的启动地址,常为标号。不带表达式的END结束的模块不能单独运行,为子模快。,4、子程序定义伪指令格式:子程序名PROC NEAR或FAR:RET 子程序名ENDP,PROCENDP必须配对使用。子程序名有标号属性,一般段内调用为NEAR或省略,段间调用为FAR。RET为子程序返回指令,返回调用主程序:段内:SP IP,SP+2 SP 段间:SP IP,SP+2 cs,SP+4SP,STACK SEGMENT STACK DW 32 DUP(?)STACK ENDSDATA SEGMENT:DATA ENDSCODE SEG
10、MENTBEGIN PROC FAR ASSUME CS:CODE,SS:STACK,DS:DATA PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX:RETBEGIN ENDPCODE ENDS END BEGIN,定义堆栈段及堆栈长度,定义数据段,定义代码段,将汇编源程序视为DOS下的子程序,将程序段前缀PSP进栈,设置用户数据段,返回到PSP,执行PSP中的第一条指令 INT 20H,结束程序返回调用程序,STACK SEGMENT STACK DW 32 DUP(?)STACK ENDSDATA SEGMENT:DATA ENDSCODE
11、SEGMENTBEGIN PROC FAR ASSUME CS:CODE,SS:STACK,DS:DATA PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX:RETBEGIN ENDPCODE ENDS END BEGIN,例、两个数据交换。,DT1 DB 11HDT2 DB 22H,MOV AL,DT1MOV AH,DT2MOV DT1,AHMOV DT2,AL,STACK SEGMENT STACK DW 32 DUP(?)STACK ENDSDATA SEGMENT DATA ENDSCODE SEGMENTBEGIN PROC FAR AS
12、SUME CS:CODE,SS:STACK,DS:DATA PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX:RETBEGIN ENDPCODE ENDS END BEGIN,上机调试作业,如:P32、17.,MOV AX,1122HMOV BX,3344HMOV CX,5566HPUSH AXPUSH BXPUSH CXPOP BXPOP AXPOP DX,三、常量(P34),1、常量 常数和符号常量主要给变量赋初值或指令中立即数等。常数汇编中允许的常数有二进制,十进制,十六进制,字符串(ASCII码字符,用单引号表示,如:ABC)。符号常量程序
13、中可以给常数取名。用EQU或“伪指令定义。,格式:标识符EQU表达式数值表达式 标识符表达式,例:AA EQU 10 BB EQU 2*AA+3 CC=66 MOV AX,AA;AX=10 MOV AX,BB;AX=23 MOV AX,CC;AX=66注:AA,BB,CC为立即数。,2、数值表达式由常量与运算符组成的有意义的式子,结果为数值。,在MASM中允许对常量进行三种类型的运算:(1)算术运算+,*,/,MOD(求余),SHR(右移),SHL(左移)如:AA EQU 10,则表达式AA 32 32,可以作为操作数。,(2)逻辑运算AND,OR,XOR,NOT,按位运算。注意:将运算符与指
14、令相区别。,例:X EQU 0FFFFH MOV AX,5555H AND AX,X AND 0FFH;AX=0055H(3)关系运算EQ(),NE(),LT(),GT(),LE(),GE()关系运算的结果为两个特殊常量0FFFFH(TURE),0(FALSE)。,四、变量(P34)变量是存储器中的数据或数据区的符号地址表示,即给存储单元取名。,1、变量的三个属性存储器分段,变量有三个属性。(1)段属性定义变量所在段的段首地址(一般为DS)。(2)偏移地址变量偏离段首址的字节数,即段首址到变量定义语句的字节距离。(3)类型属性存取该变量中的数据所需要的字节数。类型:字节,字,双字,四字,十字节
15、类型,一个数据分别占1,2,4,8,10个单元,其类型由定义的伪指令确定。,2、变量的定义一般在数据段或附加数据段中用伪指令定义。,格式:变量名DB表达式;定义BYTE字节变量 变量名DW表达式;定义WORD字变量 变量名DD表达式;定义DWORD双字变量 变量名DQ表达式;定义QWORD四字变量 变量名DT表达式;定义TBYTE十字节变量 EQU伪指令不分配存储单元,但变量定义伪指令要分配存储单元。表达式确定了变量的初值。,表达式可以有以下几种形式:,(1)常量或数值表达式存入数值。(2)ASCII字符串(若串长 2,只能用DB定义,)存入ASCII码值。(3)?分配一个空单元,无确定值。(
16、4)重复子句,格式:N DUP(表达式)重复N次,其值由表达式确定。(5)地址表达式由常量,变量,标号,间址寄存器(BP,BX,SI,DI)的内容和运算符等组成有意义的式子。如一个变量名就是一个地址表达式。可用DW或DD定义,若用DW则取它的偏移地址来初始化变量;若用DD则其偏移地址和段地址来初始化其变量。,若有多个表达式,用逗号分隔。,例:DATA SEGMENT;段定义 DT1 DB 10,3*20 DT2 DB ABC,44H,45H DT3 DW 100H,5 DT4 DD 0FFFFH DT5 DB 0,?,?,?,0 AA EQU$DT1;$汇编地址计数器,记录当前汇编地址为14H
17、。DT6 DB 2 DUP(0,2 DUP(2,3)DT7 DW DT2 DT8 DD DT4 DATA ENDS,存放示意:,DT1 DT2 DT3 DT4 0A 3C 41 42 43 44 45 00 01 FB FF FF FF 00 00DT5 DT6 00 XX XX XX 00 00 02 03 02 03 00 02 03 02 03DT7 DT8 02 00 0B 00 DATAL DATAH,从变量中取数据属于直接寻址方式,注意与符号常量区别。,例:MOV AX,AA;立即寻址,AX=0014H MOV AX,DT3;直接寻址,AX=0100H MOV AL,DT2+2;A
18、L=43H变量一旦定义,则有类型,指令中类型一致例:MOV AX,DT1 MOV BL,DT3,注意区分变量的值与偏移地址:,变量名 偏移地址 变量的值 DT1 0000H 0AH DT2 0002H 41H DT3 0007H 0100H DT4 000BH 0000FFFFH,偏移地址是16位无符号数,在符号指令中的基址,变址,基址加变址三种寻址中,其偏移量可以是常数,或符号常量,还可以是变量名。若是变量名,它给出变量所在段的偏移地址,其意义是取变量单元中的数据,所以其类型要与另一操作的类型一致。,例:MOV BX,0 MOV AX,DT3BX;AX=0100H MOV AL,DT3BX
19、常以间址、基址、变址访问一片连续的单元。例:LEA BX,DT2;BX0002H MOV AL,BX;AL41H MOV AL,BX1;AL42H,五、标号存放某指令的符号地址,也可以是过程名(过程地址入口),注:变量是存放数据的符号地址。1、标号的三个属性(1)段属性定义该标号所在段的段首址。(2)偏移地址标号偏离段首址的字节数。(3)类型两种:NEAR段内,FAR跨段2、标号的定义(1)书写在指令前,用:定义,只能为NEAR NEXT:MOV AL,SI;定义近标 号NEXT(2)用PROCENDP伪指令定义过程名例:ABC PROC FAR;定义过程名ABC为远标号 DEF PROC N
20、EAR;定义过程名DEF为近标号,六、变量,标号属性运算符,前面已知由变量,标号,常量,寄存器内容和运算符组成的式子地址表达式,它们的结果是地址,所以仍有属性,运算符除可以使用数值表达式的运算符外,还有一些特别的(最常用)符号。1、类型运算符PTR(P36)格式:类型PTR地址表达式 类型BYTE,WORD,DWORD,NEAR,FAR五种。作用指明表达式的类型,不管他原来有无类型,均以PTR前的类型为准。只改变类型属性,不改变段属性和偏移地址属性。,例1:DTA DB 33H,44H MOV AX,DTA MOV AX,WORD PTR DTA 表示临时改变DTA为字类型。,例2:MOV 4
21、SI,55H MOV BYTE PTR 4SI,55H INC BX INC WORD PTR BX 明确操作数类型。,例3:A DW 1122H,3344H;变量A为字类型,B EQU BYTE PTR A;变量B字节单元将同一存储单元用不同类型的变量(或标号)来表示。如:MOV AX,A MOV AL,B 执行结果均是:AL22H,例4:NEXT:MOV AX,0;定义NEXT近标号 JMP FAR PTR NEXT 临时改变标号的类型为FAR。,2、跨段前缀符:即跨段或段超越 格式:段寄存器名:地址表达式 作用用来临时改变变量,标号,地址表达式或指定的段属性,且只在所出现的语句中有效,不
22、改变偏移地址和类型。例:MOV AX,BP;(SS:BP)AX MOV AX,DS:BP;(DS:BP)AX,3、取段地址算符SEG取变量或标号的段地址。例:MOV AX,SEG DT1;取DT1的段首址AX,段首址为常数,因此立即寻址。,4、取偏移地址算符OFFSET取变量或标号的偏移地址。例:MOV BX,OFFSET DT1;取变量DT1的偏移地址BX,立即寻址。等效:LEA BX,DT1;但为直接寻址。作业:P72、10.,2.3 符号指令的寻址方式,一条符号指令,由操作码(助记符)指明进行什么样的操作,操作数告之操作的对象,操作数可以放在寄存器或存储单元中,寻找操作数(地址)的方式寻
23、址方式。一、立即寻址操作数直接放在符号指令中。例:MOV AX,2000H;AX=2000H 助记符 目的 源操作数 注:立即数可以是8位或16位,负数用补码表示。例:MOV BL,1;BL=0FFH MOV CX,5;CX=0FFFBH 立即寻址方式主要用来给寄存器或存储单元赋初 值,也可以与寄存器或单元进行算术逻辑运算。因为直接书写在指令中,操作对象直观,清晰,所以常用。,二.寄存器寻址操作数在指定的寄存器中,例:MOV CX,BX;CX=BX 寄存器可以是8位或16位的寄存器。例:MOV CL,BH;CL=BH 因为寄存器在CPU内部,所以采用寄存器寻址可提高运行效率,特别是AX,用它存
24、放运算结果,则执行指令的时间短些,所以最常用。三.直接寻址操作数在内存中,其偏移地址由 指令直接给出。而操作数一般在DS段(默认)。,例:MOV AX,DS:2000H 或 MOV AX,2000H;(DS:2000H)AX偏移地址,又称有效地址,此处源操作的EA=2000H,若偏移地址是数值常量,则应在偏移地址前加段名。区分立即数与直接寻址。直接寻址常用已定义的变量表示。例:VARX DW 1122H,4455H VARY DB 33H MOV AX,VARX;AX=1122H MOV BX,VARX2;BX4455H MOV BL,VARY;BL=33H MOV VARY+1,AL;(VA
25、RY+1)=22H,四.寄存器间接寻址操作数在内存中,而操作 数的地址的16位偏移量包含在SI,DI,BX,BP 之一中,即寄存器的内容为操作数的EA.,SI DI EA=BX BP 1.若以SI,DI,BX 间址,操作数在DS段。例:MOV AX,SI;(DS:SI)AX,即(DS:SI)AL,(DS:SI+1)AH 2.若以BP间址,操作数在SS段。例:MOV AX,BP;(SS:BP)AL,(SS:BP+1)AH,只有SI,DI,BX,BP 可作为间址寄存器,如 MOV AX,CX,间址时,寄存器的内容是有效地址,所以称为地址指针,主要用于存取存储单元中的数据,只要修改寄存器内容,用一条
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 第二 汇编语言 汇编程序

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