《微机原理与应用》第4章汇编语言程序设计.ppt
《《微机原理与应用》第4章汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《《微机原理与应用》第4章汇编语言程序设计.ppt(140页珍藏版)》请在三一办公上搜索。
1、微机原理与接口技术主讲 易凡 武汉大学物理学院电子科学与技术系,第四章汇编语言程序设计,4.1 汇编语言的基本概念,机器语言用机器码(二进制码)表示操作的程序语言,与处理器相关,可直接执行,但难懂,检查难;,汇编语言程序的一般概念,高级语言 具有普适性的程序设计语言,功能强大,易编写,易检查,与机器无关。,汇编语言用多种助记附表示多操作的语言,面向机器,但易懂,易检查,机器不能识别,4.1.1 汇编语言程序的一般概念(续),汇编语言源程序用汇编语言按一定格式编写的程序,它不能直接执行。源程序的属性为ASM目标文件将源程序经汇编后转换成的二进制代码的文件,属性为OBJ执行文件经连接后将目标文件与
2、库文件或其它目标文件连接在一起形成的可执行的文件,属性为EXE汇编将源程序转换成目标文件的翻译过程汇编程序完成汇编工作的程序,汇编程序的主要功能,检查源程序;测出源程序中的语法错误,给出出错信息;产生目标代码程序,并给出列表文件(LST文件);展开宏指令;常用的汇编程序有小汇编ASM,宏汇编MASM,以及TASM,TASMX,TASM32等,4.1.2 上机的步骤,编辑建立ASM源程序;将ASM文件经汇编(MASM)转换成OBJ文件;将OBJ文件经连接(LINK)转变成EXE文件上机执行。,4.2 汇编语言程序格式,指令语句能产生目标代码,CPU可以执行,完成特定功能的语句,由CPU指令组成。
3、指示语句(伪指令语句)不产生目标代码,仅是为汇编程序作指示的语句。宏指令语句是一个指令序列,在汇编时,所有的宏指令语句都被展开为相应的指令序列。,汇编语言语句的类型,4.2.2 语句的格式,语句格式为:名字 助记符 操作数;注释其中,助记符项为必要项,方括号项为可选项。,名字可为作名字的字符有:字母AZ,数字09,字符?、_、$等数字不能放在名字之首在指令语句中,名字一般是标号。伪指令语句中,名字通常是变量(名),段名,过程名等,标号:是某指令代码存放单元的符号地址,标号后必须有一个冒号“:”标号的属性:段,偏移量,类型(FAR,NEAR),变量(名)某个存储器中数据单元或数据区的符号地址,它
4、代表数据单元或数据区。变量有三种属性:段,偏移量,类型(BYTE,WORD,DWORD,QWORD),4.2.2 语句的格式,助记符分为指令助记符和伪指令助记符。操作数指令操作的对象。可作为操作数的有:常量,寄存器,标号,变量和表达式。常量:如立即数,直接寻址的地址,ASC码字符串等寄存器:AX,AH,DS,SP,DX等,表达式:是常数、寄存器、标号、变量与一些操作符相组合的序列。分数字表达式和地址表达式两种。数字表达式产生一个数值结果,地址表达式产生一个地址。,;注释项它不会被汇编,其功能为增加源程序的可读性。注释前必须加分号;,4.2.2 语句的格式(续),4.2.3 操作符,算术操作符(
5、加)、(减)、(乘)、/(除)、MOD(模除,即两个整数相除后取余数),例4.1MOVDX,BLOCK(61)2 该指令语句等价于MOVDX,BLOCK10,算术操作符应用之例,例4.2 数组ARRAY定义如下,试写出把数组长度(字数)存入CX寄存器的指令。ARRAYDW1,2,3,4,5,6,7ENDDW?END是为计算数组长度而建立的符号地址。所需指令为:MOV CX,(ENDARRAY)/2汇编后计算表达式而形成了指令MOV CX,7,逻辑运算操作符AND(逻辑与)OR(逻辑或),XOR(逻辑异或)NOT(逻辑非)。,它们只能用于数字表达式中,4.2.3 操作符(续),例4.4ANDDX
6、,PORT_VAL AND 0FEH汇编PORT_VAL AND 0FEH 确定了外设端口号,例4.3INAL,PORT_VALOUTPORT_VAL AND 0FEH,AL当端口号PORT_VAL为偶数时,输出端口号与之相同;当PORT_VAL为奇数时,输出端口号比输入端口号小1,逻辑运算操作符应用之例,关系运算操作符EQ(等于)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)参与关系运算操作的两个操作数必须都同为数字或为同一段内的两个存储器地址。计算的结果应为逻辑值:结果为真,表示为FFFFH结果为假,表示为0,4.2.3 操作符(续),例4.5:MOV
7、AX,4 EQ 3;结果为假等价于MOV AX,0MOV AX,4 NE 3;结果为真等价于MOV AX,0FFFFH例4.6 MOV BX,(PORT_VAL LT 5)AND 20)OR(PORT_VAL GE 5)AND 30)当 PORT_VAL5时,汇编结果为:MOV BX,30否则,汇编结果为:MOV BX,20,关系运算操作符应用之例,分析运算符,SEG格式:SEG 变量(名)功能:取变量所在段的段基址,主要有:SEG,OFFESET,TYPE,SIZE,LENGTH,OFFST格式:OFFSET 变量/标号功能:取变量或标号的偏移地址,分析运算符应用之例,例4.8MOV DI,
8、OFFSET DATA1;;(DI)DATA1的偏移地址,例4.7MOV AX,SEG ARRAY;(AX)ARRAY的段基址MOV DS,AX;(DS)(AX),分析运算符(续),表4.1 TYPE 类型值与类型的关系,TYPE格式:TYPE 变量/标号功能:取变量或标号的类型值,例4.10:VARDW?;VAR为字变量ARRAYDD 10 DUP(?);ARRAY为双字变量STRDB THIS IS TEST;STR为字节变量 MOVAX,TYPE VAR;(AX)2MOVBX,TYPE ARRAY;(BX)4MOVCX,TYPE STR;(CX)1,例4.9ARRAYDW 1,2,3:A
9、DDSI,TYPE ARRAY汇编后:ADDSI,2,分析运算操作符应用之例,LENGTH格式:LENGTH 变量(名)功能:取重复定义(DUP)的复制次数,若不是DUP定义,则取数值1。,分析运算符(续),SIZE格式:SIZE 变量(名)功能:取LENGTH值与TYPE值的乘积,例4.13 若:FEESDW 100 DUP(?)则TYPEFEES=2 LENGTH FEES=100 SIZE FEES=(LENGTH FEES)(TYPE FEES)=1002=200所以MOV CX,SIZE FEES汇编后:MOV CX,200,例4.11 若:FEESDW 100 DUP(?)对于指令
10、:MOVCX,LENGTH FEES汇编后:MOVCX,100,例4.12 若:ARRAYDW 1,2,3对于指令:MOVCX,LENGTH ARRAY汇编后为:MOVCX,1,分析运算操作符应用之例,综合运算符,属性运算符PTR格式:类型 PTR 表达式功能:对存储单元赋予确定的类型,THIS运算符格式:名字 EQU THIS 类型功能:给名字(变量或标号)指定类型,它的段,偏移地址与下一存储单元相同。,短程运算符SHORT格式:SHORT 标号功能:指明标号的类型为短标号,从标号到引用标号指令之间的距离是在:-128127字节范围内,例4.15设已有数据定义如下TWO_BYTEDW?可用以
11、下语句对这两个字节赋予另一种类型定义ONE_BYTEEQU BYTE PTR TWO_BYTEOTHER_BYTE EQU BYTE PTR(TWO_BYTE+1)OTHER_BYTE EQU BYTE PTR ONE_BYTE1ONE_BYTE与TWO_BYTE 皆为符号地址它们的段和偏移量属性相同,但类型属性不同,前者是BYTE类型,后者是WORD类型。,例4.14 INCBX;操作数的类型不明确可用PTR操作符对操作数明确定义:INC WORD PTR BX;明确字操作数,综合操作符应用之例,例4.16 FIRST_TYPEEQUTHIS BYTE WORD_TABLEDW100 DUP
12、(?)FIRST_TYPE与WORD_TABLE的段,偏移地址均相同,但前者是BYTE类型,后者是WORD类型。,综合操作符应用之例,例4.17L1EQU THIS FARL:MOV CX,100L标号与L1标号的段、偏移地址一样,但类型不同。L是NEAR类型,L1是FAR类型,允许其他段的转移指令调用。,例如:JMP SHORT TAG TAG:,字节分离运算符LOW、HIGH功能:分别得一个数值或地址表达式的低位和高位字节,例4.18STUFFEQU 0ABCDH语句:MOVAH,HIGH STUFF 汇编后:MOVAH,0ABH语句:MOVAL,LOW STUFF 汇编后:MOVAL,0
13、CDH,综合运算符,4.3 伪指令语句,数据定义伪指令语句功能:定义变量的类型,分配空间并赋初值格式:变量名 DB/DW/DD 操作数,操作数,变量名是任选项,是数据单元的符号地址,助记符 DB、DW、DD DB(Define byte):定义变量的类型为BYTE,每个操作数占一个字节,数据定义伪指令语句,助记符 DB、DW、DD DB(Define byte):定义变量的类型为BYTE,每个操作数占一个字节DW(Define word):定义变量的类型为WORD,每个操作数占2个字节,采用小端对准方式存放DD(Define double word):定义变量的类型为DWORD,每个操作数占4
14、个字节,操作数的几种形式操作数为常数,常数表达式或为字符(串)操作数是“?”只定义存储空间,但不预存储数据操作数是已定义的变量或标号,操作数字段的几种形式举例,操作数是常数或是常数表达式,例4.19DATA_BYTEDB10,4,10HDATA_WORDDW100,100H,-5DATA_DWDDD320,0FFFDHDATA_BYTE 是字节类型,每个操作数占一个字节单元DATA_WORD 是字类型,每个操作数占两个字节单元DATA_DWD 是双字类型,每个操作数占四个字节单元,图4.1 例4.19 的汇编结果,操作数是字符串,例4.20MESSAGEDB HELLO ABDB ABBADW
15、AB字符串必须用单引号 包封超过两个字符的字符串只能用DB定义。,操作数字段的几种形式举例,操作数是?只定义存储空间,但不预存储数据,例4.21ABCDB0,?,?,?,0DEFDW?,52,?,MWSSAGE DB HELLO,DB AB,DW AB,图4.2 例4.20 的汇编存储结果,图4.3 例4.21与例4.22 的汇编结果,关于复制操作符DUP(duplication operator),格式:重复次数 DUP(复制内容),图4.4 例4.23的汇编结果,操作数是已定义的变量或标号,例4.24PAR1DB 1,2,3,4PAR2DB ABCD PAR3DW 0,1,?DATA1DB
16、 100 DUP(?)DATA2DW 200 DUP(0)PARM_TABLEDW PAR1 DW PAR2 DW PAR3INTSEG_DATADD DATA1 DD DATA2,符号定义的伪指令,表达式赋值伪指令EQU格式:名字 EQU 表达式表达式可以是常数、符号、地址表达式、寄存器,指令等;表达式不允许重复定义,例4.25:CREQU 256;数赋于符号名DATAEQU HIGHT+12;地址表达式赋予符号名LFEQU ASC_TABLE;变量赋新符号名BEQU BP+8;变址方式引用赋于符号BCBDEQU AAM;CBD等价于指令AAM,等号=伪操作“=”与“EQU”的功能一样,但“
17、=”操作允许表达式重复定义,例4.26COUNT=10 MOV CX,COUNT;(CX)10 COUNT=COUNT1 MOVBX,COUNT;(BX)9,符号定义的伪指令(续),类型定义伪指令LABLE格式:标号/变量 LABLE 类型功能:对标号/变量的类型定义,它的段地址和偏移地址与下一个存储器单元的相同。变量类型:BYTE、WORD、DWORD标号类型:NEAR、FAR,符号定义的伪指令(续),LABLE伪指令应用举例,例4.27AGAINFLABLEFARAGAIN:PUSHAX AGAIN的类型为NEAR,允许在本段内调用;AGAINF的类型为FAR,允许被其他段调用;AGAIN
18、与AGAINF的段、偏移属性均相同。,例4.28AREAWLABLE WORD AREABDB 100 DUP(?)MOVAREAW,AX MOVAREABBX,ALAREAW的类型为WORD,AREAB的类型为BYTE它们的段地址与偏移地址一样,段定义伪指令SEGMENT/ENDS,格式:段名SEGMENT 定位类型组合类型类别(段体)段名ENDS功能:定义一个逻辑段并赋予一个段名。,“SEGMENT”位于逻辑段的开始,指示逻辑段起始“ENDS”位于逻辑段的结尾,指示逻辑段的结束二者前的段名必须一致,定位类型对本逻辑段边界定位,BYTE:字节边界,即从任意边界开始WORD:字边界,即本段的起
19、始地址必须是偶数PARA:节(Paragraph)的边界开始,16个字节为一个节,节边界的地址应为0HPAGE:页(Page)边界,256个字节为一页,页边界起始地址应为00H若省略定位类型,则默认其为PARA,定位类型应用举例,例4.29 SEGMENT伪操作的定位类型应用举例STACKSEGMENTSTACK;STACK段,PARA边界 DB 100 DUP(?);长度为100字节STACKENDS;STACK段结束DATA1SEGMINT BYTE;DATA1段,BYTE边界STRINGDB this is an example!;定义字符串DATA1ENDS;DATA1段结束,DATA
20、2SEGMINT WORD;DATA2段,WORD边界BUFFERDW 40 DUP(0);长度为40个字 DATA2ENDS;DATA2段结束CODE1SEGMINT PAGE;CODE1段,PAGE边界:CODE1ENDS;CODE1段结束CODE2SEGMENT;CODE2段,PAGE边界:START:MOV AX,STACKMOV SS,AX:CODE2ENDS;CODE2段结束 END START;源程序结束,定位类型应用举例,本例的源程序中共有五个逻辑段,段名和定位类型分别为:STACK段,PARA边界:段长度为100个字节(64H)DATA1段,BYTE边界:段长度为19个字节(
21、13H)DATA2段,WORD边界:段长度为80个字节(50H)CODE1段,PAGE边界:段占用13个字节(0DH)CODE2段,PARA边界:段占用52个字节(34H),定位类型应用举例,表4.2 例4.28各逻辑的起始地址和结束地址,定位类型应用举例,组合类型(Combine-type)指示汇编程序,各逻辑段组合方式,该项缺省:则各逻辑段不组合PUBLIC:将不同模块中具有相同段名的逻辑段连接成一个大逻辑段,连接次序由连接命令指定。STACK:与PUBLIC类似,但仅限于堆栈段的组合COMMON:将各同名分段组合为一个段,各同名分段有相同的起始地址,因此会发生重叠,COMMEN段的长度等
22、于原来最大逻辑分段的长度。,MEMORY:当几个逻辑段连接在一起时,指定本逻辑段定位在地址最高的地方。若连接时有几个指定MEMORY的段,则汇编程序只将首先遇到的段作为MEMORY段,其余的段则作为COMMON段。AT 表达式:表示本逻辑段段地址是表达式所计算出来的结果。它不能用来指定代码段。,例如:AT 8A00H,表示本段的段基址是8A00H,本段从存储器的物理地址为8A00H开始装入。,组合类型(Combine-type)指示汇编程序,各逻辑段组合方式,类别(class),类别必须放在单引号 之内其作用是在连接时决定各逻辑段的装入顺序当几个程序模块进行连接时,具有相同类别名的逻辑段按连接
23、出现的先后顺序被装入连续的内存区没有类别名的逻辑段,与其他无名逻辑段一起连续装入内存。,例4.30 假设一个主程序中有五个逻辑段,段名和类别为:STK1段 STACK CODE1段 无 DATA1 段 BUFFER DATA2 段 TABLE DATA3 段 BUFFER一个子程序,有四个逻辑段,段名和类型分别为:DATA4 段 TABLE DATA5 段 BUFFER STK2 段 STACK CODE2 段 无当将主程序和子程序进行连接时,两个程序模块中各逻辑段装入内存的顺序见图4.5,类别定义之例,段分配伪指令ASSUME,格式:ASSUME 段寄存器名:段名,段寄存器名:段名,功能:指
24、示汇编程序源程序的逻辑段与段寄存器的关系;说明段寄存器名必须是CS、DS、ES和SS之一,而段名则是由SEGMENT所定义;ASSUME语句通常位于代码段中紧接段定义语句之后;,说明ASSUME NO THING的格式可取消前面由ASSUME所指定的段寄存器设置;ASSUME仅指示逻辑段与段寄存器的关系,但并不对段寄存器赋值。,段分配伪指令ASSUME,通常给段寄存器赋值语句为:movax,段名 mov段寄存器,ax,例4.31 定义各逻辑段之例data1segment data1endsdata2segmentdata2ends,伪指令ASSUME应用之例,codesegmentassume
25、 cs:code,ds:data1,es:data2start:mov ax,data1mov ds,axmov ax,data2mov es,ax codeends end start,过程定义PROC/ENDP伪指令,格式:过程名PROC NEAR/FAR(过程体)RET 过程名 ENDP功能说明:定义一个过程并赋予一个名字定义该过程的类型(NEAR或者FAR),若没有指明类型,则默认为NEAR过程;,功能说明:ENDP标志过程结束,PROC与ENDP前的过程名必须一致;调用指令CALL,位于调用程序中;返回指令RET,处于过程内部,作为过程的出口;过程的定义和调用均可嵌套。,过程定义PR
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机原理与应用 微机 原理 应用 汇编语言 程序设计
链接地址:https://www.31ppt.com/p-5898322.html