精品PPT课件--第5章汇编语言程序设计.ppt
《精品PPT课件--第5章汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《精品PPT课件--第5章汇编语言程序设计.ppt(146页珍藏版)》请在三一文库上搜索。
1、1,第5章 汇编语言程序设计,主要内容: 汇编语言源程序的结构 汇编语言语句格式 伪指令 功能调用 汇编语言程序设计,2,5.1 汇编语言概述 1、机器语言二进制数形式的指令和数据。 B0 64 是什么意思?这就是机器语言。既不直观,又不易理解和记忆. 2、汇编语言- MOV AL,64H ;很容易记忆理解,这就是助记符。 助记符用便于记忆的英语单词表示的指令操作码。它反映了指令的功能和主要特征,便于人们理解和记忆。 指令除了操作码以外,还有一个操作数问题。 操作数可能放在存储器中,这就涉及操作数的地址。程序中遇到转移指令或调用指令,也需要知道转移地址,若采用具体地址就很不方便,一旦有错,改动
2、也很麻烦。于是人们采用标号或符号来代替地址。,3,LP1: mov ax,VAR loop LP1 汇编语言指令助记符,符号地址,标号,伪指令等语言元素的集合以及这些元素使用的规则。 用汇编语言编写的程序叫汇编语言源程序。 汇编源程序需翻译成机器语言,变成可执行文件,机器才能执行,这个翻译过程叫汇编。高级语言中称该过程为“解释”或“编译”。执行翻译的程序称为“汇编程序”。,4,汇编语言程序设计与执行过程,输入汇编语言源程序 源文件 .ASM 汇编(编译) 目标文件 .OBJ 链接 可执行文件 .EXE 调试 最终程序 小汇编:ASM 宏汇编:MASM 3、高级语言:通用性强。例:MATLAB、
3、C、Pascal,5,5.2 汇编语言源程序的格式,汇编语言源程序通常由一个或几个程序模块组成,每个模块一般由三个逻辑段组成: 数据段存放数据、变量 DATA SEGMENT DATA EDNS 堆栈段堆栈区域 STACK SEGMENT STACK ENDS 代码段存放程序指令 CODE SEGMENT CODE EDNS,5.2.1 分段结构,6,一个基本的汇编语言程序框架如下: stack SEGMENT PARA stack DB 100 DUP(stack) stack ENDS data SEGMENT data ENDS code SEGMENT ASSUME CS:code,
4、DS:data, ES:data start: MOV AX, data MOV DS, AX MOV ES, AX MOV AH, 4CH INT 21H code ENDS END start,堆栈段,数据段,代码段,7,例:将两个五字节的16进制数相加 DATA SEGMENT ;定义数据段 DATA1 DB 0F8H,60H,0ACH,74H,3BH ;变量一,字节 DATA2 DB 0C1H,36H,93H,0D5H,20H ;变量二,字节 DATA ENDS ;数据段结束 CODE SEGMENT ;定义代码段 ASSUME CS:CODE,DS:DATA START: MOV A
5、X,DATA MOV DS,AX ;初始化DS MOV CX,5 ;置循环次数送CX MOV SI,0 ;(SI)=0 CLC ;(CF)=0,8,LOOPER: MOV AL,DATA2SI ;取一个字节加数 ADC DATA1SI,AL ;与被加数相加,带进位加法 INC SI ;SI加1 DEC CX ;CX减1 JNZ LOOPER ;若(CX)不等于0,转LOOPER MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;代码段结束 END START ;源程序结束 注:MOV AH,4CH INT 21H ;DOS功能调用,结束正在运行的程序,返回DOS,9,5
6、.2.2 汇编语言语句的类型和组成,汇编语言的语句有两种: 指令性语句由8086指令助记符构成的语句 指令性语句的格式为: 标号: 指令助记符 目的操作数,源操作数 ;注释 注:各部分之间至少要用一个空格作为分隔符。 指令性语句由CPU执行,每一条指令性语句都有一条机器码指令与其对应 指令性语句汇编时生成机器码; 例:LOOPER: MOV AL,DATASI,10,汇编语言的语句有两种: 指示性语句由伪指令构成的语句 指示性语句的格式为: 名字 伪指令 操作数1,操作数2,操作数n ;注释 注:各部分之间至少要用一个空格作为分隔符。 指示性语句由汇编程序执行。它指出汇编程序应如何对源程序进行
7、汇编,如何定义变量、分配存储单元以及指示程序开始和结束等。指示性语句无机器码指令与其相对应。 指示性语句汇编时不生成机器码。 例:DATA DB 0FBH,60H,11,标号有三个属性: 段地址:即标号所在段的段地址; 程序中引用一个标号,该标号的段地址应在CS中。 偏移量:标号所代表存储单元的段内偏移地址;16位的无符号数 类 型:NEAR或FAR: NEAR表示标号所在语句与转移指令/调用指令在同一码段内,跳转时只需改变IP即可。 FAR标号所在语句与转移指令/调用指令不在同一代码段内。 若没有对类型进行说明,默认为NEAR。 标号通常作为转移指令或CALL指令的转移地址。,5.2.3 名
8、字,12,汇编语言的一个实例: hello.asm data SEGMENT Hello DB Hello, world!,0DH,0AH,$ data ENDS prog SEGMENT ASSUME CS:prog,DS:data start: MOV AX,data MOV DS,AX LEA DX,hello ;取字符串首地址 MOV AH,9 INT 21H ;显示字符串 MOV AH,4CH INT 21H ;退回DOS prog ENDS END start,名字,标号,13,5.2.4 助记符和伪操作,助记符:8086、8088CPU指令的助记符,例如:MOV, ADD,MUL
9、等 伪操作指令:如DB、SEGMENT、ENDS、ASSUME、ENDS 5.2.5 操作数 操作数包括常量、寄存器、标号、变量及表达式。 1.常量 二进制数,以B结尾。如01001101B。 十进制数,如85。 八进制数,以Q结尾。如174Q。,14,十六进制数,以H结尾。第1个数字为A-F时,前面应加0,如0F160H。 字符串:用引号括起来的1个或多个字符。如ERROR!, a,汇编时被 翻译成对应的ASCII码45H,52H,52H,4FH,52H,21H和61H。 十进制科学计数法。如:8.75E-4 十六进制实数。如:10A4E87R 2、寄存器 8位寄存器:AH、AL、BH、BL
10、、CH、CL、DH、DL 16位寄存器:AX、BX、CX、DX、SI、DI、BP、SP、DS、CS、SS、DS 3、标号:代表一条指令的符号地址,15,变量名是存储单元(数据区)的符号地址或名字。 变量也有三个属性: 段地址变量所在段的段地址 偏移量变量单元地址与段首地址之间的位移量。 类 型有BYTE、WORD和DWORD三种。 变量在程序中作为存储器操作数被引用。 标号和变量名的使用规则 组成:A-Z(不分大小写), 0-9, ? . _ $ 不能以数字开头 长度小于31个字符 不能与保留字(指令助记符、伪指令、预定义符号等)重名 不能重复定义 例如: 正确的:LP1, AGAIN, NE
11、XT, _GO, OK_1 错误的:4M, LOOP, AAA, #HELP, +ONE,4.变量-即内存中的存储单元或数据区。,16,5.表达式,表达式是常数、寄存器、标号、变量与运算符的组合。 有数字表达式和地址表达式两种。 汇编时按优先规则对表达式进行计算,计算出具体的数值或地址。运行时不能改变。 表达式中的运算符有6类:算术、逻辑、关系、取地址、属性、杂类。 (1)算术运算符 +、-、*、/,MOD 用于数字表达式,例: MOV AX,4*1024 汇编后的形式为: MOV AX,4096 用于地址表达式,例: LEA SI,TAB+3 若TAB的偏移地址为1000H,则汇编后的形式为
12、:LEA SI,1003H,17,逻辑运算符只能用于数字表达式中。 例:MOV CL,36H AND 0FH 经汇编后:MOV CL,06H 注意,不要把逻辑运算符与逻辑运算指令混淆: 例:AND AX, 3FC0H AND 0FF00H 汇编后源操作数被翻译为:3F00H,所以上述指令与AND AX, 3F00H等价。,(2)逻辑运算符 AND、OR、XOR、NOT,关系运算的结果是一个逻辑值:真或假 关系为真,结果为全1; 关系为假,结果为全0 例: MOV BX,PORT GT 300H 若PORT的值大于300H,则汇编后为:MOV BX,0FFFFH 否则汇编后为: MOV BX,0
13、,(3)关系运算符EQ、NE、LT、GT、LE、GE,18,OFFSET:取变量/标号的偏移地址 注意,以下指令的异同: MOV BX, OFFSET VAR LEA BX, VAR OFFSET只能取静态的偏移地址; LEA指令即可取静态的偏移地址,也可取动态的偏移地址。 SEG:取变量/标号的段地址。 例:MOV AX, SEG DATA MOV DS,AX ;取变量DATA的段地址,(4)分析运算符和合成运算符,19,TYPE 取变量的类型(1,2,4) VAR DW ? ;字 ARRAY DD 10 DUP(?) ;双字 STR DB This is a test ;字节 MOV AX
14、,TYPE VAR ;(AX)=2 MOV BX, TYPE ARRAY ;(BX)=4 MOV CX, TYPE STR ;(CX)=1 LENGTH 取所定义变量的长度(即变量中元素的个数) 未使用重复操作符DUP,变量个数为1; 否则如上例中的变量ARRAY的个数为10;,20,SIZE 取所定义存储区的字节数(=TYPE*LENGTH) 例:VAR DW 1,2,3,4,5 则 TYPE VAR = 2,LENGTH VAR = 1,SIZE VAR = 2 合成运算符PTR:用来指定地址操作数的类型 格式: PTR 类型BYTE, WORD, DWORD, NEAR, FAR BYT
15、E、WORD、DWORD 用于描述数据存储单元(变量)地址 NEAR、FAR 用于描述转移、调用的目的地址 例:MOV BYTE PTRDI,0 ;字节类型 MOV WORD PTRDI,0 ;字类型 MOV DI,0B5H ;类型不定,21,PTR也可用来进行强制类型转换 例:STR1 DW ? ;STR1定义为字类型 MOV AX,STR1 ;合法 MOV AL,STR1 ;非法 MOV AL, BYTE PTR STR1 ;合法,22,(5)其他运算符 方括号:存储器地址 MOV CL,BX ;间址寻址 MOV AL,SI+5 ;变址寻址 段超越运算符: MOV AX,ES:DI HIG
16、H、LOW:获取数值或地址表达式的高位和低位字节 VAR EQU 0ABCDH MOV AH,HIGH VAR ; (AH)=0ABH MOV AL,LOW VAR ; (AL)=0CDH,23,5.2.6 注释 注释以分号开头,可放在指令后,也可单独一行。 注意注解的写法。要写指令(段)在程序中的作用,而不要写指令的操作。 例如:以下为同一条指令写的注释 1)MOV CX,100 ;传送100到CX 2)MOV CX,100 ;循环计数器置初值 显然,第二种写法要比第一种写法要好。,24,5.3 伪操作命令,数据定义伪指令 符号定义伪指令 段定义和段寄存器指定伪指令 过程定义伪指令 结束伪指
17、令,由汇编程序执行的指令,它本身不被汇编成机器指令。常用的伪指令有:,25,5.3.2 数据定义伪指令,用于定义变量,即内存单元或数据区。数据定义伪指令的格式为: 变量名 数据定义伪指令 操作数,操作数, 常用的数据定义伪指令有如下几种: DB 定义字节、DW 定义字、DD 定义双字、DQ 定义八字节 DT 定义十字节 操作数可以是常数、变量或表达式 例1:DATA_B DB 10,5,10H DATA_W DW 100H,-4 DATA_D DD 0FFFBH 汇编后的内存分配情况如右图所示。,26,例2:DATA DB 100,0FFH ;存入64H,0FFH EXPR DB 2*3+7
18、;存入0DH=13D STR DB WELCOME! ;存入8个字符 AB DB AB ;存入41H,42H BA DW AB ;存入42H,41H ABDD DD AB ;存入42H,41H,00,00 OFFAB DW AB ;存入变量AB的偏移地址 ADRS DW TABLE,TABLE+5,TABLE+10 ;存入3个偏移地址 TOTAL DD TABLE ;先存入TABLE偏移地址,再存段地址 NUM DQ 00 11 22 33 44 55 66 77H ;存入77H,66H,55H,44H,33H,22H,11H,00H, DECML DT 1234567890H ;存入90H,
19、78H,56H,34H,12H,00,00,00,00,00 HEXTAB DB 01,02,03,04,05,06,07,08,09 DB 0AH,0BH,0CH,0DH,0EH,0FH,27,例3:操作数可以是字符串,例如STR DB HELLO 汇编后的情况如图:,注意下面两个定义的不同之处: DB AB ;41H在低字节,42H在高字节 DW AB ;42H在低字节,41H在高字节,操作数?用来保留存储空间,但不存入数据. 例4:ABC DB 0,1,2,3,4,OK,$ RSV DW ?,?,?,?,?,?,?,?,28,复制操作符DUP: 重复的数据可以使用复制操作符DUP,如上面
20、RSV亦可写成: RSV DW 8 DUP(?) 若操作数中若使用$,则表示的是地址计数器的当前值。 例: TABLE DB 10 DUP(?) BUFFER DW TABLE,$+3 设TABLE的偏移地址为0080H,则汇编后如下图所示:,29,5.3.3 符号定义伪指令,1、 EQU 格式:名字 EQU 表达式 把一个表达式用一个符号表示,以后凡出现该表达式的地方都可用 这个符号表示。类似于C语言中的#define。 用EQU定义的符号未清除前不能重新定义。清除EQU定义用PURGE伪指令。 不占用存储空间,仅是给符号赋值 CR EQU ODH ;常数 A EQU ASCII_TABLE
21、 ;变量 STR EQU 64*1024 ;数值表达式 ADR EQU ES:BP+DI+5 ;地址表达式 CBD EQU AAM ;指令助记符,30,2、= 格式:名字 = 表达式 区别:可对同一名字重复定义 不占用存储空间,仅是给符号赋值,例1:FIVE EQU 5 COUNT EQU CX TEN EQU 10 DIST = BYTE PTRSI+BP GOTO = JMP MOV AX, TEN MOV CX, COUNT ADD DIST, FIVE DIST = WORD PTRSI+BP+1 ADD DIST, AX GOTO LABEL,定义,引用,31,例2:COUNT=10
22、 MOV CX,COUNT ;(CX)=10 COUNT=COUNT-1 MOV BX,COUNT ;(BX)=9 例3: COLUMN EQU 80 ROW EQU 25 SCREENFUL EQU COLUMN*ROW 3、LABEL 格式:名字 LABEL 类型 例:AREAW LABEL WORD ; AREAW类型为WORD,32,5.3.4 段定义伪操作,1、SEGMENT/ENDS 格式: 段名 SEGMENT 定位类型组合方式类别 段名 ENDS 汇编语言程序是按段来组织程序和数据的。 和存储器的物理段相对应,汇编语言程序中的段称为逻辑段。汇编 连接后被映射到物理段中。 SEG
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 精品 PPT 课件 汇编 语言程序设计
链接地址:https://www.31doc.com/p-2567091.html