微机原理第四章.ppt
《微机原理第四章.ppt》由会员分享,可在线阅读,更多相关《微机原理第四章.ppt(155页珍藏版)》请在三一办公上搜索。
1、第3章 汇编语言程序设计,3.1概述,一、机器语言、汇编语言和高级语言,1、机器语言 计算机中指令代码以二进制编码表示,这种代码 机器可以识别与执行,把这种机器代码称为机器语言。用机器语言编写的程序称为机器语言程序(或目的程序)。例如 下面的机器代码就是8086CPU的三条机器指令 B8H,00H,30H 4EH,D8H B9H,14H,00H 用机器语言书写的程序人们不易看懂,也不易记忆。看起来非常的乏味。但是计算机却非常熟悉它。,2、汇编语言 用助记符代替操作码,用符号和数字代替地址码(或操作数),这种语言称为汇编语言。用汇编语言编写的程序称为汇编语言源程序。必须经过翻译,转换成机器语言,
2、计算机才能执行。汇编语言人们容易记忆,也容易看懂。例如 用8086CPU的汇编语言可以把上述的机器指令代码写成 MOV AX,3000H MOV DS,AX MOV CX,0014H,3、高级语言 不依赖具体的机器,面向对象的计算机语言称为高级语言。如 BASIC,C,VB,VC等 高级语言易记忆,易懂、便于学习与掌握 汇编语言与高级语言的比较 汇编语言 高级语言 执行速度快,占内存小,执行速度慢,占内存大,实施控制方便,通用性差 通用性好,可移植性强 程序设计效率低,依赖机器 程序设计效率高,不依赖机器 与硬件打交道方便。与硬件打交道不方便。,二、汇编程序 1、汇编程序是用来将汇编语言程序翻
3、译成机器代码的系统(工具)程序。,汇编语言源程序,汇编语言,目标程序文件,源程序列表,.ASM,.OBJ,.LST,翻译,2、在DOS环境下建立和运行汇编语言程序的过程,汇编语言程序的执行过程:,编辑程序,.ASM 文件,汇编程序,.OBJ 文件,连接程序,.EXE 文件,Edit 等,MASM,LINK,3、汇编程序的种类 1.自汇编程序和交叉汇编程序 2.基本汇编、小汇编和宏汇编 3.一次扫描和两次扫描的汇编4、8086/8088宏汇编程序MASM.EXE 宏汇编程序MASM.EXE 5.00以及对应的连接程序LINK.EXE,三、调试与运行,1、源文件编辑 任何文本编辑器均可用于编辑汇编
4、语言的源程序。例如dos下的edit,turbo C集成环境的编辑器,Windows下的记事本、写字板等。汇编语言源程序以ASCII码形式存放于内存中,扩展名应为.ASM,给源文件命名后可存盘,源程序用大写、小写皆可。,2、源文件汇编 用Microsoft 的宏汇编程序(MASM)任何版本汇编皆可。汇编有下列几种方式 方式1:在命令提示符下,键入 MASM 屏幕上会出现如下提示,按照提示键入文件名回车即可。Source filename.ASM:xxx Object filename xxx.OBJ:Source listing nul.LST:xxx Crose-reference nul.
5、CRF:xxx+Bytes symbol space free 0 Warnimg Errors 0 Severs Errors,说明:汇编后生成3个文件,即:目标文件(.OBJ),列表文件(.LST),交叉引用文件(.CRF)。同时告诉程序员汇编有无错误(警告错误和严重错误)。无错,汇编通过;有错,则修改源程序的错误后,再次汇编。方式2 在命令行提示符下键入文件名与逗号和分号 C:MASMMASM ABC;(生成.OBJ文件,不产生.LST和.CRF)C:MASMMASM ABC,;(生成三个文件,名称为ABC).OBJ文件中的地址操作数是可浮动的相对地址。.LST文件把源程序与机器代码(目
6、的程序)都列表,可打印,显示。.CRF是用来对符号进行前后对照的文件,可了解源程序中符号(或变量)定义或引用情况。,3、连接 在命令提示符下,键入LINK,或在Windows下用鼠标直接点击LINK,即可连接。连接时屏幕显示如下:Object Modules.OBJ:ABC Run File ABC.EXE:List File NUL.MAP:ABC Libraries.LIB:(注:MASM中没有库文件,可直接键入回车)Link:Warnimg L4201:no Stack Segment(其中,L4201表示连接程序错误信息代码,4表示警告错误,201为错误号。源程序中没有堆栈段不影响连接
7、。)LINK生成两个文件:.EXE 为可执行文件。.MAP为内存分配图文件,提供了文件中的内存地址分配的一些信息。,4、调试与运行 用DEBUG与Codeview软件都可进行目的代码级程序的调试,对.EXE文件可直接调入DEBUG中跟踪调试。有错误需对源程序中的语句进行修改,汇编中只能发现语法和符号等错误,不能发现编程中的逻辑错误。Codeview窗口调试工具,使用时请参看有关资料。,3.2汇编语言源程序的格式,分段结构汇编语言程序的结构 汇编语言程序也是分段编写的,每段最长64K。8088汇编语言的源程序是由多个段组成的,一个可执行的汇编程序一般至少有一个代码段,其中包含可执行的语句。,例:
8、一个简单的汇编程序,my_data segment(数据段)again:Mov al,siarray1 db 05,a2H,00,10H,85H Inc si n equ 5 Cmp al,50array2 db n dup(?)Jbe next my_data ends Mov di,almy_code segment(代码段)Inc di assume cs:my_code next:dec cx assume ds:my_data jnz againbegin:mov ax,my_data mov ah,4ch mov ds,ax int 21h Lea si,array1 my_cod
9、e ends Lea di,array2 end begin Mov cx,n,3.2.2 汇编语言语句的类型和组成语句类型指令语句:以8086/8088指令为基本部分,必要时加上标号 及注释构成。每一条语句产生相对应的目标代码。伪指令语句:为汇编程序和连接程序提供一些必要控制 的管理性语句。汇编时,伪指令不产生目标代码。宏指令语句:由标号、宏指令和注释构成。汇编时,将宏指 令展开还原为定义时的多条语句,再逐条汇编。,指令语句及其格式 指令语句即第二章介绍的8086CPU的指令,每一条指令即可构成一指令语句。每一指令都有对应的机器代码。指令语句格式 标号:助记符 操作数,;注释 格式共有四部分
10、:其中标号,操作数,注释可以是任选项;助记符是必选项,该项在一条语句中不可省略。标号后面一定要跟一个冒号;注释前一定加一分号。,2、伪指令语句及其格式 伪指令语句不是真正的指令语句,它不产生机器代码,它是汇编程序要求的,用来指示汇编程序做何种操作,定义代码段、数据段在何处,是否产生列表等。伪指令语句格式 名字 定义符 参数,参数;注释 格式共有四部分:其中名字,参数,注释可以是任选项;定义符是必选项,该项在一条伪指令语句中不可省略。对于有些语句,名字也是必需的。名字后面不要跟冒号:注释前一定加一分号;各个参数之间用,分开。,宏指令语句及其格式 宏指令语句:为了书写方便,把一个重复出现的汇编语句
11、序列用一条指令代替,这种重新定义的指令就称为宏指令。这种由宏指令组成的语句称为宏指令语句。宏指令必须先定义,才能被使用,这称为宏定义;在汇编时,又要把宏指令语句进行宏展开,生成对应的机器代码。宏指令语句格式将在后面应用中介绍。,名字(标识符)汇编语言语句的四个域,一个语句行的基本格式为:标识符 操作符 操作数1,操作数2;注释,标识符、标号(名字)-标号和名字(变量)标识符可由数字、字母和下划线等一串字符构成,用于一段程序、一组(或一个)数据或一个段的开头。使用时要注意以下3点:不能以数字开头,数字可用在非开头的其它位置;其最大长度为31个字符。指令语句中的名字(标号)后跟冒号,而伪指令和宏指
12、令的名字之后不跟冒号。,一般说来,名字项可以是标号或变量。它们都用来表示本语句的符号地址,它是可有可无的,只有当需要用符号地址来访问该语句时它才需要出现。标号:标号在代码段中定义,后面跟冒号:,它也可以用LABEL或EQU伪操作来定义。此外它还可以作为过程名定义,这将在以后的章节中加以说明。标号经常在转移指令或CALL指令的操作数字段出现,用以表示转向地址。,标号有三种属性:段、偏移及类型。标号实际上是用符号表示的地址(其指令语句的符号地址)。段属性定义标号的段起始地址,此值必须在一个段寄存器中,而标号的段则总是在CS寄存器中。偏移属性:标号的偏移地址是16位无符号数,它代表从段起始地址到定义
13、标号的位置之间的字节数。类型属性:用来指出该标号是在本段内引用还是在其它段中引用的。如在段内引用的,则称为NEAR,指针长度为2字节;如在段外引用,则称为FAR,指针长度为4字节。,变量:是存放在某些存储单元中的操作数,变量在除代码段以外的其他段中定义,后面不跟冒号。它也可以用LABLE或EQU伪操作来定义。变量经常在操作数字段出现。所有的变量都有一个固定的地址(用变量名代表),它由段和偏移地址组成;同时还有一个类型,变量的类型属性定义该变量所保留的字节数。如BYTE(1个字节长)、WORD(2个字节长)、DWORD(4个字节长)、DQ(8个字节长)、DT(10个字节长),这一点在数据定义伪操
14、作中说明。,在程序中同样的标号或变量的定义只允许出现一次,否则汇编程序会指示出错。在程序中,变量可以使用数据定义伪指令进行初始化,见伪指令一节中的数据定义部分。,操作符 可以是指令、伪指令或宏指令的助记符。3.2.5操作数:可以是常数、寄存器名、标号、变量和表达式。,1、常数可以是二进制、十进制、八进制或十六进制数,也可以是字符串。例如 10100101B;二进常数 256D 或256;十进常数 356Q 或356Q;八进常数 2AFH;十六进常数 0ABCDH;十六进常数,但十六进常数的第一个字符必须是数字。ABCD;字符串常数,汇编后对应为相应的ASCII码:41H44H 1234;数字字
15、符串常数,字符串需用单引号,汇编后为31H34H,2、寄存器 8086/8088的寄存器是程序中最常出现的符号,它可分为字节寄存器和字寄存器,如AX为字寄存器,而AL则为字节寄存器。只有AX、BX、CX、DX可分为字和字节寄存器。3.标号 标号实际上是用符号表示的地址(其指令语句的符号地址),因此它也是由段、偏移地址和类型组成,其类型分为段内(NEAR)和段间(FAR)两种。,实际上是代码段中某一指令的地址,同样具有三个属性:段地址,偏移量与类型。类型有:FAR与NEAR FAR(可在段间或段内引用)NEAR(可在段内引用)注意:常量、变量的名字以及标号不能用宏汇编中的保留字,即:(指令助记符
16、,CPU的寄存器名,伪指令的符号等)例如:AAA:MOV AX,DATA;错误,AAA不能做标号 DAA DB?,?;错误,DAA不能做变量名,通过 SEG 标号 OFFSET 标号可以分别得到标号的段地址和偏移地址。如果是NEAR类型,在程序执行时,只取标号的偏移地址,例如在过程调用(CALL)时,只取IP,而对于FAR类型,则要取段地址和偏移地址,在CALL时要取IP和CS。,4.变量 变量是存放在某些存储单元中的操作数,使用有一定意义的符号来代表这些单元。所有的变量都有一个固定的地址(用变量名代表),它由段和偏移地址组成;同时还有一个类型,它可以是字节(BYTE)、字(WORD)或双字(
17、DWORD)。在程序中,变量可以使用数据定义伪指令进行初始化,见伪指令一节中的数据定义部分。,5、表达式 表达式是常数、寄存器、标号、变量与一些操作符相组合的序列,可以有数字表达式和地址表达式两种。在汇编期间,汇编程序按照一定的优先规则对表达式进行计算后可得到一个数值或一个地址。为了能了解表达式的组成,我们先介绍一些常用的运算符。运算符包括算术、逻辑、关系、分析、综合五类运算符。见下表,表 8086汇编语言中的运算符,算术运算符 逻辑运算符 关系运算符 分析运算符 综合运算符,+(加法)AND(与)EQ(相等)SEG(求段基址)PTR-(减法)OR(或)NE(不相等)OFFSET 段属性前缀*
18、(乘法)XOR(异或)LT(小于)TYPE THIS/(除法)NOT(非)GT(大于)SHORTMOD(求余)LE SIZE HIGHSHL(左移)GE LENGTH LOWSHR(右移),(1)、算术运算符 有7 种:+,-,*,/,MOD,SHL,SHR。分别为:加,减,乘,除,模,左移,右移。说明:除法返回的是商,而模返回的是余数。例如:PI EQU 3456/1000;PI=3 PIR EQU 3456 MOD 1000;PIR=456 SHL,SHR是移位运算,一般在建立屏蔽字时使用。例如:MSK EQU 0011 0100B MSK1 EQU MSK SHL 2;低位补2个 0,M
19、SK1=1101 0000BMSK2 EQU MSK SHR 2;高位补2个 0,MSK2=0000 1101B,(2)、逻辑运算符 有4 种:AND,OR,XOR,NOT 逻辑运算符和逻辑运算指令的区别:逻辑运算符在汇编时完成逻辑运算,逻辑运算指令在执行该指令时完成逻辑运算。例如 MSK EQU 0011 0101B MOV AL,4EH AND AL,MSK AND 0FH 汇编时计算出 MSK AND 0FH=05,执行第三条指令时AL=04H。,例:逻辑运算符运用。MOV AX,0F00FH AMD 253BH;AX=200BH MOV AC,0F00FH OR 253BH;AX=F5
20、3FH MOV AC,0F00FH XOR 253BH;AX=D534H例 IN AL,VAL OUT VAL AND OFEH,AL 其中VAL为端口号,OUT指令中的表达式说明当VAL为偶数时,输出端口号与输入端口号相同,而当VAL为奇数时,则输出端口号比输入端口号小1。,(3)关系运算符 包括 相等:EQ 大于:GT 不等:NE 小于或等于:LE 小于:LT 大于或等于:GE 关系运算结果只有两个真、假。如果关系是真,则结果为 0FFH(0FFFFH);如果关系是假,则结果为0。例如:MOV BX,DATA1 LT 0010H MOV BX,0FFFFH MOV BX,DATA1 LT
21、0010H MOV BX,0,当 DATA1 0010H 时,当 DATA1 0010H 时,例MOV BX,(VAL LT 5)AND 20)OR(VAL GE 5)AND 30)则当VAL5时,汇编结果应该是:MOV BX,20否则,汇编结果应该是:MOV BX,30,(4)分析运算符 分析运算在汇编语言程序设计中很重要。存储器地址操作数(变量和标号)具有段、偏移量及类型三种属性,分析运算符用来分离出一个存储器地址操作数的这三种属性,并用数值的方法表达出来。它包括:取存储单元偏移:OFFSET 取存储单元段:SEG 取类型:TYPE 取字节数:SIZE 按类型取长度:LENGTH,求存储器
22、地址操作数的三个属性,求变量的字节数和长度,SEG与OFFSET分析符 分别返回一个变量或标号的段地址和偏移量地址 OFFSET 格式为:OFFSET Variable或label 汇编程序将回送变量或标号的偏移地址值。例 MOV BX,OFFSET OPER_ONE 则汇编程序将OPER_ONE的偏移地址作为立即数回送给指令,而在执行时则将该偏移地址装入BX寄存器中。所以这条指令与指令 LEA BX,OPER_ONE是等价的。,SEG 格式为:SEG Variable或label 汇编程序将回送变量或标号的段地址值。例 如果DATA_SEG是从存储器的05000H地址开始的一个数据段的段名,
23、OPER1是该段中的一个变量名,则 MOV BX,SEG OPER1 将把0500H作为立即数插入指令。实际上由于段地址是由连接程序分配的,所以该立即数是连接时插入的。执行期间则使BX寄存器的内容成为0500H。,TYPE分析符 返回变量和标号的类型。对于变量:类型为字节、字、双字变量分别返回1,2,4。对于标号:类型为NEAR的标号返回-1(0FFFFH),类型为FAR标号返回-2(0FFFEH)。例 ARRAY DW 1,2,3则对于指令 ADD SI,TYPE ARRAY 汇编程序将其形成为:ADD SI,2,表 存储器操作数的类型值,存储器操作数 类型值,字节数据(DB定义)1 字型数
24、据(DW定义)2 双字数据(DD定义)4 NEAR指令单元-1 FAR 指令单元-2,LENGTH 格式为:LENGTH Variable 对于变量中使用DUP的情况,汇编程序将回送分配给该变量的单元数。而对于其他未用DUP说明的情况则回送1。例 FEES DW 100 DUP(0)对于指令MOV CX,LENGTH FEES 汇编程序将使其形成为:MOV CX,100,例 ARRAY DW 1,2,3对于指令 MOV CX,LENGTH ARRAY 汇编程序将使其形成为:MOV CX,1 例 TABLE DB ABCD对于指令MOV CX,LENGTH TABLE汇编程序将使其形成为:MOV
25、 CX,l,SIZE 格式为:SIZE Variable 汇编程序应回送分配给该变量的字节数。但是,此值是LENGTH值和TYPE值的乘积。所以:FEES DW 100 DUP(0)MOV CX,SIZE FEES将形成为 MOV CX,200对于:ARRAY DW 1,2,3 MOV CX,SIZE ARRAY将形成为 MOV CX,2 而TABLE DB ABCD MOV CX,SIZE TABLE将形成为MOV CX,1。,LENGTH 和 SIZE 分析符 对于DUP定义的变量:LENGTH 返回的是分配给该变量的元素的个数;SIZE 返回的是分配给该变量的元素的字节数。例如:BUF
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 第四
链接地址:https://www.31ppt.com/p-5349890.html