微机原理汇编语言程序设计ppt课件.ppt
《微机原理汇编语言程序设计ppt课件.ppt》由会员分享,可在线阅读,更多相关《微机原理汇编语言程序设计ppt课件.ppt(63页珍藏版)》请在三一办公上搜索。
1、微机原理与接口技术,第四章 汇编语言程序设计,本章内容,4.1 概述4.2 汇编语言的格式与语法4.3 DOS与BIOS中断调用4.4 汇编语言程序设计和上机过程,4.1 概述-程序设计语言,机器语言:每种CPU都有自己独立的一套指令系统,其能直接理解和执行的是二进制机器码形式,这种二进制编码格式语言称为机器语言。特点是占内存少、执行速度快,但难以记忆、容易出错,实际中很少使用。例:89H,DCH汇编语言:用指令的助记符来表示二进制机器码的语言称为汇编语言,即是机器语言的符号表示。它是一种面向机器的程序设计语言,通常是为特定计算机或计算机系列专门设计的。特点是允许直接调用CPU内部资源,代码精
2、简,占内存少,执行速度快,但通用性差,编写、调试周期长。常用来编制系统软件、实时控制程序、实时通信程序及接口的驱动程序等。例:MOV SP,BX高级语言:是面向过程的语言(如:BASIC语言、C语言等),不依赖于具体的计算机结构和指令系统。特点是通用性强,可移植,但目标程序长,执行速度慢。,4.1 概述-汇编程序,用汇编语言编写的程序不能由机器直接执行,而必须经汇编程序(Assembler)翻译成机器语言程序常使用的汇编程序是Microsoft公司的宏汇编MASM,它可以将源程序翻译成对应的目标程序,并且: 检查语句语法 自动分配存储区 将其他进制转换为二进制数 计算表达式的值 展开宏命令,4
3、.2 汇编语言的格式与语法,4.2.1 源程序的结构4.2.2 语句的格式与构成元素4.2.3 语句的操作数4.2.3.1 常量4.2.3.2 变量和标号4.2.3.3 表达式4.2.4 伪指令4.2.5 宏指令,4.2.1 源程序的结构,汇编语言源程序通常由一个或几个程序模块组成,每个模块一般由三种逻辑段组成: 数据段、附加段定义和存放数据、变量 堆栈段堆栈区域 代码段存放程序指令,4.2.1 源程序的结构,NAMEPROGRAM MOV AX, EXTRASTACKSEGMENT STACK MOV ES, AXSTA DB 100 DUP(?)STACKENDSMOV AX, OFFSE
4、T SDAT; -CALL P1DATASEGMENTSDATDB 1,2,3,4,5MOV AH, 4CHDATAENDSINT 21H; -MAINENDPEXTRASEGMENT; -DDATDB 5 DUP(?)P1PROCEXTRAENDS; -RETCODESEGMENTP1ENDPASSUME CS:CODE, SS:STACK; -ASSUME DS:DATA, ES:EXTRACODEENDSMAINPROC FAR; -MOV AX, DATAENDMAINMOV DS, AX,堆栈段,数据段,扩展段,代码段,代码段,4.2.1 语句的格式,汇编语言的语句有两种:指令性语句
5、:由8086指令构成的语句指示性语句:由伪指令构成的语句指令性语句由CPU执行,每一条指令性语句都有一条机器码指令与其对应,指令性语句汇编时生成机器码。指示性语句由汇编程序执行,它指示汇编程序应如何对源程序进行汇编,如何定义变量、分配存储单元以及指示程序开始和结束等。指示性语句无机器码指令与其相对应,在汇编时不生成机器码。,标号:指令的符号地址,用来代表指令在存储器中的地址符号:段、过程、变量的名字,用来代表它们在存储器中的地址指令助记符:8086指令助记符、伪指令助记符操作数:即指令的操作对象对指令性语句:0,1,2个对指示性语句:根据需要而定操作数之间以逗号分隔操作数可以由标号、常量、变量
6、、表达式、寄存器操作数和存储器操作数等构成 例如:AX,DI+BX+10,DATA,200,16*8+TABLE,等等,4.2.2 语句的构成元素,注释:以分号开头,可放在指令后,也可单独一行。注意注释的写法,要写指令(或程序段)在程序中的作用,而不要写指令的操作。例如:以下为同一条指令写的注释 1)MOV CX, 100 ;传送100到CX 2)MOV CX, 100 ;循环计数器置初值显然,第二种写法要比第一种写法要好,4.2.2 语句的构成元素,4.2.3 语句的操作数,4.2.3.1 常量4.2.3.2 变量和标号4.2.3.3 表达式,4.2.3.1 常量,常量操作数:数值常数:11
7、001000B,0FA21H,329D(329)字符常数:ABCD (41H 42H 43H 44H)例:MOV AX, 0FA21H VAR DB 329STR DB ABCD,变量:指存储器存储单元中的数据,数据运行时可改变变量名:是存储单元的符号地址变量在程序中作为存储器操作数被引用变量有三个属性:段地址:变量所在段的段地址偏移地址:变量所在存储单元的偏移地址类 型:有BYTE、WORD和DWORD等例:MOV AX,VAR PUSH VAR,4.2.3.2 变量与标号-变量,标号:指令所在存储单元的符号地址 标号的三个属性:段地址:即标号所在段的段地址;偏移量:标号所代表存储单元的段内
8、偏移地址;类 型: NEAR或FAR:NEAR:段内转移或段内调用FAR: 段间转移或段间调用 标号通常作为转移指令的转移地址 JMP label JNZ non_zero,4.2.3.2 变量与标号-标号,组成:A-Z(不分大小写), 0-9, ? . _ $不能以数字开头,句号(.)只能作为首字符长度小于31个字符不能与保留字(指令助记符、伪指令、预定义符号等)重名不能重复定义 例如: 正确的:LP1, AGAIN, NEXT, _GO, OK_1 错误的:4M, LOOP, AAA, #HELP, +ONE,4.2.3.2 变量与标号-命名规则,4.2.3.3 表达式,表达式由标号、常量
9、、变量等加上必要的运算符构成有数字表达式和地址表达式两种汇编时按优先规则对表达式进行计算,计算出具体的数值或地址,运行时不能改变表达式中的运算符包括:算术、逻辑、关系、分析以及属性运算符等,算术运算符包括:加:,减:,乘:*,除: /,取模: MOD 例: MOV AX, 4*1024 汇编后的形式为: MOV AX, 4096 逻辑运算符包括: 与:AND、或:OR、异或:XOR、非:NOT例:MOV CL, 36H AND 0FH 经汇编后:MOV CL, 06H逻辑运算符只能用于数字表达式中。注意,不要把逻辑运算符与逻辑运算指令混淆:例:AND AX, 3FC0H AND 0FF00H
10、汇编后源操作数被翻译为:3F00H, 所以上述指令与以下指令等价: AND AX, 3F00H,4.2.3.3 表达式算术运算符,分析运算符包括:SEG、OFFSETSEG:取变量/标号的段地址OFFSET:取变量/标号的偏移地址 例:VAR DB 12H MOV BX,OFFSET VAR ;取变量VAR的偏移地址 MOV AX,SEG VAR ;取变量VAR的段地址SEG 、OFFSET运算符在汇编过程取相应地址,4.2.3.3 表达式分析运算符,4.2.3.3 表达式属性运算符PTR,属性运算符PTR用来指定地址操作数的类型 格式: PTR 类型BYTE, WORD, DWORD, NE
11、AR, FAR BYTE、WORD、DWORD 用于描述数据存储单元(变量)地址 例: MOV WORD PTRBX,03H NEAR、FAR 用于描述转移、调用的目的地址 例:JMP FAR PTR LABEL1,例: MOV DI, 0 ;类型不定 MOV BYTE PTRDI, 0 ;字节类型 MOV WORD PTRDI, 0 ;字类型,4.2.3.3 表达式属性运算符PTR,4.2.3.3 表达式属性运算符PTR,PTR也可用来进行强制类型转换例:VAR DW 1234H ;VAR定义为字类型 MOV AX, VAR1 ;合法 MOV AL, VAR1 ;非法 MOV AL, BYT
12、E PTR VAR1 ;合法,4.2 汇编语言的格式与语法,4.2.1 源程序的结构4.2.2 语句的格式与构成元素4.2.3 语句的操作数4.2.3.1 常量4.2.3.2 变量和标号4.2.3.3 表达式4.2.4 伪指令4.2.5 宏指令,4.2.4 伪指令,伪指令由汇编程序执行的指令,它本身不被汇编成机器指令。常用的伪指令有:数据定义伪指令符号定义伪指令段定义伪指令过程定义伪指令程序模块定义伪指令定义模块连接标号和变量的伪指令,4.2.4 伪指令数据定义伪指令,用于对程序中使用的变量进行定义通过变量定义指明变量的类型,并为其分配存储单元。数据定义伪指令的格式为: 变量名 数据定义伪指令
13、 操作数, 操作数, VAR DW 1234H常用的数据定义伪指令有如下几种: DB 定义字节 DW 定义字 DD 定义双字 DQ 定义4字型变量 (占8字节存储空间) DT 定义10字节变量(表示BCD码,或用于浮点运算)数据定义伪指令中的操作数可以是常数、变量或表达式,DATA1_B DB 10DATA2_B DB 5DATA3_B DB 10HDATA1_W DW 100HDATA2_W DW -4DATA_D DD 0FFFBH汇编后的内存分配情况如右图所示。,Q,数据定义伪指令-例1,操作数可以是字符串,使用DB,DW 例 STR_DB DB HELLO STR_DW DW AB,C
14、D 汇编后的情况如图:,注意下面两个定义的不同之处: STR_DB DB AB ;41H在低字节,42H在高字节 STR_DW DW AB ;42H在低字节,41H在高字节,数据定义伪指令-例2,? 用来分配存储空间,但不置初值 例1:RSV DB ? 复制操作符 DUP: 重复的数据可以使用复制操作符DUP,如上面RSV亦可写成: 例2: STR DB 10 DUP (A) DATA DB 10 DUP( 30H,9 DUP (20H) ) 若操作数中若使用$, 则表示的是地址计数器的当前值。 例3 BUF DW 0A32H, $, $+3 数据元素的初值: ADDR+1, (ADDR+2)
15、+3,4.2.4 伪指令数据定义伪指令:?、DUP、$,例: TABLE DB 10 DUP(?) BUFFER DW TABLE, $+3设TABLE的偏移地址为0080H,则汇编后如下图所示:,数据定义伪指令-例3,4.2.4 伪指令符号定义伪指令:EQU,将一个表达式用一个符号表示,以后凡出现该表达式的地方都可用这个符号表示类似于C语言中的#define汇编时,符号被符号代表的内容替换 例: COUNT EQU CX TEN EQU 10 MOV COUNT,TEN 汇编后: MOV CX,10,4.2.4 伪指令段定义伪指令,汇编语言程序是按段来组织程序和数据的,段的划分与存储器的物理
16、段相对应。汇编语言程序中的段称为逻辑段,汇编连接后被映射到相应的物理段中。逻辑段共分为:代码段、堆栈段、数据段和附加段段定义伪指令:SEGMENT、ENDS、ASSUME、ORG定义一个段的基本格式: 段名 SEGMENT 定位类型组合方式类别 段名 ENDS,SEGMENT和ENDS成对出现,二者前面的段名应一致伪指令SEGMENT说明了一个段的开始伪指令ENDS说明了一个段的结束数据段用于对程序中使用的变量进行定义,堆栈段用于对堆栈进行定义,数据段和堆栈段由指示性语句构成;代码段由指令性语句构成。 例如: data_seg SEGMENT data_seg ENDS,4.2.4 伪指令SE
17、GMENT和ENDS,4.2.4 伪指令ASSUME伪指令,ASSUME伪指令用于明确段和段寄存器的关系,例如 ASSUME CS:code_seg, DS:data_seg, SS:stack_seg语句中的code_seg、data_seg、stack_seg为段名语句的作用为:CS将指向段名为 code_seg 的代码段DS和ES将指向段名为 data_seg 的数据段SS将指向段名为 stack_seg 的堆栈段,ASSUME伪指令只是告知汇编程序段与段寄存器之间的对应关系,并没有给段寄存器赋予实际的初值,程序中需要通过下面的语句进行赋值: MOVAX, data_seg MOVDS,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 汇编语言 程序设计 ppt 课件

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