




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第4章 汇编语言程序设计,2,主要内容,汇编语言源程序的结构 汇编语言语句格式 伪指令 功能调用 汇编语言程序设计,3,4.1汇编语言源程序 (1)机器语言机器语言是用二进制代码来表示指令和数据的语言,是计算机硬件系统唯一能够直接理解和执行的语言。 (2)汇编语言汇编语言是一种采用助记符表示的程序设计语言,即用助记符来表示指令的操作码和操作数,用标号或符号代表地址、常量或变量。助记符一般是英文缩写,用便于记忆的英语单词表示的指令操作码,4,汇编程序(翻译程序,源程序的编译程序,汇编程序,汇编语言源程序,机器语言目标程序,汇编源程序需翻译成机器语言,变成可执行文件,机器才能执行,这个翻译过程
2、叫汇编。高级语言中称该过程为“解释”或“编译”。执行翻译的程序称为“汇编程序,5,4.1.1 汇编语言源程序的结构,汇编语言源程序通常由一个或几个程序模块组成,每个模块一般由3个(或4个)逻辑段组成: 数据段存放数据、变量 (附加数据段存放数据、变量) 堆栈段堆栈区域 代码段存放程序指令,6,一个基本的汇编语言程序框架如下: stack SEGMENT PARA stack DB 100 DUP(stack) stack ENDS data SEGMENT data ENDS code SEGMENT ASSUME CS:code, DS:data, ES:data, SS:stack sta
3、rt: MOV AX, data MOV DS, AX MOV ES, AX MOV AL, 4CH INT 21H code ENDS END start,堆栈段,数据段,代码段,真指令,7,4.1.2 汇编语言的语句与格式,汇编语言的语句有两种: 指令性语句由8086指令助记符(真指令)构成 的语句 指示性语句由伪指令构成的语句 指令性语句的格式为: 标号: 指令助记符 目的操作数,源操作数 ; 注释 指示性语句的格式为: 名字 伪指令 操作数1, 操作数2, ,操作数n ; 注释 注:各部分之间至少要用一个空格(或逗号、分号)作为分隔符,8,指令性语句(真指令)由CPU执行,每一条指令性
4、语句都有一条机器码指令与其对应; 指示性语句(伪指令)由汇编程序执行。它指出汇编程序应如何对源程序进行汇编,如何定义变量、分配存储单元以及指示程序开始和结束等。指示性语句无机器码指令与其相对应。 注意: 指令性语句汇编时生成机器码; 指示性语句汇编时不生成机器码,9,语句的构成元素: 标号指令的符号地址,用来代表指令在存储器中的地址。只能出现在指令性语句中,标号后应加上冒号。 名字段、过程、变量的名字,用来代表它们在存储器中的地址。只能出现在指示性语句中,名字后不加冒号。 指令助记符8086助记符、伪指令 操作数即指令的操作对象 对指令性语句(真指令)0,1,2个 对指示性语句(伪指令)根据需
5、要而定 操作数之间以逗号分隔 操作数可以是:寄存器、存储单元、常数或表达式 例如:AX,DI+BX+10,200,16*8+TABLE,等等,10,注释以分号开头,可放在指令后,也可 单独一行。 注意注解的写法。要写指令(段)在程序中的作用,而不要写指令的操作。 例如:以下为同一条指令写的注释 1)MOV CX,100 ;传送100到CX 2)MOV CX,100 ;循环计数器置初值 显然,第二种写法要比第一种写法要好,11,汇编语言的一个实例: hello.asm data SEGMENT Hello DB Hello, world!,0DH,0AH,$ data ENDS prog SEG
6、MENT 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,名字,标号,12,4.1.3 数据项与表达式,数据项(操作数的形式)包括常量、标号/名字、变量及表达式。 1.常量 二进制数,以B结尾。如01001101B。 十进制数,如85。 十六进制数,以H结尾。第1个数字为A-F时,前面应加0,如0F160H。 字符串:用引号括起来的1个或多个字符。 如ERROR!
7、, a,汇编时被翻译成对应的ASCII码45H,52H,52H,4FH,52H,21H, 61H,13,有三个属性: 段地址:即标号所在段的段地址; 偏移量:标号所代表存储单元的段内偏移地址; 类 型:NEAR或FAR:(SHORT ?) NEAR表示标号所在语句与转移指令/调用指令在同一码段内,跳转时只需改变IP即可。 FAR 标号所在语句与转移指令/调用指令不在同一代码段内。跳转时需改变CS和IP即可。 若没有对类型进行说明,默认为NEAR。 标号通常作为转移指令或CALL指令的转移地址,2.标号/名字指令或数据所在内存单元的符号地址,如 Start : MOV AX, data,14,变
8、量即内存中的存储单元或数据区。 变量名是存储单元(数据区)的符号地址 或 名字。 变量也有三个属性: 段地址变量所在段的段地址 偏移量变量单元地址与段首地址之间的位移量。 类 型有BYTE、WORD 、DWORD三种之一。 变量在程序中作为存储器操作数被引用,3.变量,如 Start : MOV AX, data,15,标号和变量名的使用规则: 组成:A-Z(不分大小写), 0-9, ? . _ $ 不能以数字开头,句号(.)只能作为首字符 长度小于31个字符 不能与保留字(指令助记符、伪指令、预定义符号等)重名 不能重复定义 例如: 正确的:LP1, AGAIN, NEXT, _GO, OK
9、_1 错误的:4M, LOOP, AAA, #HELP, +ONE,16,4.表达式,表达式是常数、寄存器、标号、变量与运算符的组合。 有数字表达式和地址表达式两种。 汇编时按优先规则对表达式进行计算,计算出具体的数值或地址。运行时不能改变。 表达式中的运算符有6类:算术、逻辑、关系、取地址、属性、杂类,如 Start : MOV AX, 16*8+TABLE,17,用于数字表达式, 例: MOV AX,4*1024 汇编后的形式为: MOV AX,4096 用于地址表达式, 例: LEA SI,TAB+3 若TAB的偏移地址为1000H,则汇编后的形式为: LEA SI,1003H,1)算术
10、运算符 +、-、*、/,MOD,18,逻辑运算符只能用于数字表达式中。 例: MOV CL,36H AND 0FH 经汇编后:MOV CL,06H 注意: 不要把逻辑运算符与逻辑运算指令混淆: 例:AND AX, 3FC0H AND 0FF00H 汇编后源操作数被翻译为:3F00H,所以上述指令与 AND AX, 3F00H等价,2)逻辑运算符 AND、OR、XOR、NOT,19,关系运算的结果是一个逻辑值:真或假 关系为真,结果为全1 关系为假,结果为全0 例: MOV BX, PORT GT 300H 若PORT的值大于300H为真,则汇编后为: MOV BX, 0FFFFH 若为假,则汇
11、编后为: MOV BX, 0,3)关系运算符EQ、NE、LT、GT、LE、GE,20,SEG: 取变量/标号的段地址 OFFSET:取变量/标号的偏移地址 例:VAR DB 12H MOV BX,OFFSET VAR ;取变量VAR的偏移地址 MOV AX,SEG VAR ;取变量VAR的段地址 注意: 下面两条指令的异同: MOV BX, OFFSET VAR LEA BX, VAR OFFSET只能取静态的偏移地址; LEA指令即可取静态的偏移地址,也可取动态的偏移地址,4)取地址运算符SEG、OFFSET,21,TYPE 取变量的类型(1,2,4) LENGTH 取所定义变量的长度 (即
12、变量中元素的个数) SIZE 取所定义存储区的字节数 (=TYPE * LENGTH) 例:VAR DW 1,2,3,4,5 则 TYPE VAR = 2 LENGTH VAR = 5 SIZE VAR = 10,5)取值运算符TYPE、LENGTH、SIZE,22,6)属性运算符PTR,用来指定地址操作数的类型。 格式: PTR 类型BYTE, WORD, DWORD和 NEAR, FAR ,SHORT BYTE、WORD、DWORD 用于描述数据存储单元(变量)地址 NEAR、FAR (SHORT ?) 用于描述转移、调用的目的地址,23,例:MOVBYTE PTRDI,0 ;字节类型 M
13、OVWORD PTRDI,0 ;字类型 MOVDI,0B5H ;类型不定 PTR也可用来进行强制类型转换 例:STR1 DW ? ;STR1定义为字类型 MOVAX,STR1 ;合法 MOVAL,STR1 ;非法 MOV AL,BYTE PTR STR1 ;合法,24,4.2 伪指令,数据定义 伪指令 符号定义 伪指令 段定义和段寄存器指定伪指令 过程定义 伪指令 结束 伪指令,由汇编程序执行的指令,它本身不被汇编成机器指令。常用的伪指令有,25,4.2.1 数据定义伪指令,用于定义变量,即内存单元或数据区。数据定义伪指令的格式为: 变量名 数据定义伪指令 操作数,操作数, 常用的数据定义伪指
14、令有如下几种: DB 定义字节 DW 定义字 DD 定义双字 操作数可以是常数、变量或表达式,26,例1: DATA_B DB 10,5,10H DATA_W DW 100H,-4 DATA_D DD 0FFFBH 汇编后的内存分配情况 如右图所示,05H,10H,00H,01H,FCH,FFH,FBH,FFH,00H,00H,0AH,Q,DATA_B,DATA_W,DATA_D,10,5,10H,100H,4,0FFFBH,27,例2:操作数可以是字符串,例如 STR DBHELLO 汇编后的情况如图,STR,H,E,L,L,O,注意:下面两个定义的不同之处: DBAB ;41H在低字节,4
15、2H在高字节(先A后B) DW AB ;42H在低字节,41H在高字节(先B后A,48H,45H,4CH,4CH,4FH,28,操作数?用来保留存储空间,但不存入数据. 例3:ABC DB 0,1,2,3,4,OK,$ RSV DW ?,?,?,?,?,?,?,? 复制操作符DUP: 重复的数据可以使用复制操作符DUP,如上面RSV亦可写成: RSV DW 8 DUP(?) 若操作数中若使用$,则表示的是地址计数器的当前值,29,例4: TABLE DB 10 DUP(?) BUFFER DW TABLE,$+3 设TABLE的偏移地址为0080H,则汇编后如下图所示,BUFFER,0080H
16、,80H,TABLE,008AH 008BH 008CH 008DH,.,8DH,00H,00H,0089H,10 Bytes,+3,30,4.2.2 符号定义伪指令,把一个表达式用一个符号表示,以后凡出现该表达式的地方都可用这个符号表示。类似于C语言中的#define。 符号定义伪指令有两种:EQU,,用EQU定义的符号未清除前,不能重新定义。清除EQU定义可用PURGE伪指令。 用”=”定义的符号可在任何时候进行重定义。 二者均不占用存储空间,仅是给符号赋值,31,例:FIVE EQU 5 COUNT EQU CX TEN EQU 10 DIST = BYTE PTRSI+BP GOTO
17、= JMP MOV AX, TEN MOV CX, COUNT ADD DIST, FIVE DIST = WORD PTRSI+BP+1 ADD DIST, AX GOTO LABEL,定义,引用,32,4.2.3 段定义伪指令,汇编语言程序是按段来组织程序和数据的。 和存储器的物理段相对应,汇编语言程序中的段称为逻辑段。汇编连接后被映射到物理段中。 3/4类段:代码(程序)、数据/附加数据、堆栈 段定义伪指令:SEGMENT、ENDS、ASSUME、ORG 定义一个段的基本格式: 段名 SEGMENT 定位类型组合方式类别 段名 ENDS,33,这两个伪指令总是成对出现,二者前面的段名应一
18、致。SEGMENT说明了一个段的开始,ENDS说明了一个段的结束。 对数据段和堆栈段,段中的语句一般是变量定义。 对代码段则是指令语句。 如: data SEGMENT data ENDS,SEGMENT和ENDS伪指令,34,ASSUME伪指令,在代码段中,还必须明确段和段寄存器的关系,这由ASSUME语句来指定。如 ASSUME CS:code,DS:data,ES:data,SS:stack 语句中的code和data为段名。 这个语句说明: (1) CS将指向名字为code的代码段 (2) DS和ES将指向名字为data的数据段,35,注意: ASSUME伪指令只是告知汇编程序有关段寄
19、存器与段的关系,并没有给段寄存器赋予实际的初值。故下面的语句 MOVAX,data MOVDS,AX MOVES,AX MOVAX,stack MOVSS,AX 将段基址装入段寄存器。如果程序中用到堆栈段,则SS也需装入实际的初值。 代码段基地址不需要程序员装入CS寄存器,而由操作系统(OS)负责装入,36,4.2.4 过程定义伪指令PROC、ENDP,过程就是子程序。一个过程可以被其它程序所调用(用CALL指令),过程的最后一条指令一般是返回指令(RET)。 过程定义伪指令的格式为 PROC NEAR/FAR 类型 RET ENDP 注意:PROC和ENDP必须成对出现,37,4.2.5 宏
20、定义伪指令,宏指令的作用:如果需要多次使用同一个程序段,可以将这个程序段定义为一个”宏指令”,然后在需要时,可简单地用宏指令名来代替这个程序段,宏指令的格式为: MACRO 形参表 ENDM,38,4.2.6 汇编结束伪指令END,汇编语言源程序的最后,要加汇编结束伪指令END,以使汇编程序结束汇编。 格式: END 表达式 END后跟的表达式通常就是程序第一条指令的标号,指示程序的启动地址(要执行的第一条指令的地址,39,4.3 DOS系统功能调用(高级调用,DOS系统功能调用的作用:系统功能调用由操作系统OS提供的一组实现特殊功能的子程序供程序员在程序中调用,以减轻编程工作量。 系统功能调
21、用的分类:系统功能调用有两种,一种称为DOS功能调用,另一种称为BIOS功能调用。 BIOS(基本输入输出系统)功能调用包括:系统测试、初始化引导、一部分中断矢量装入程序及外部设备的服务程序,它们都固化在系统主板的ROM中。它与系统硬件直接相关。 参见P410-411附录C.1-2 系统功能调用的实现方式:用户程序在调用这些系统服务程序时,不是用CALL命令,而是采用软中断指令INT n来实现。 DOS系统功能调用都是用软中断指令INT 21H来实现的。它具有90多个子功能的中断服务程序,它们通过功能号AH来区分。它不依赖于具体的硬件系统,40,INT 2lH功能分类: 大致可以分为四个方面,
22、即为 (1)设备管理(2)目录管理(3)文件管理 (4)内存管理、存取时间、存取终端矢量、终止程序等。 参见P356-360 附录D,D0S系统功能调用的使用方法: AH功能号; 设置该功能所要求的其他入口参数; 执行INT 21H指令; 分析出口参数,41,关于数据输入和输出我们这里只讨论键盘输入和显示输出,调用系统功能需要提供入口参数及所调用的功能号,调用结束返回结果,1. DOS键盘功能调用,1) 从键盘输入一个字符(功能号=1) MOV AH,1 INT 21H,INT 21H的几个最常用的功能,42,例:程序中有时需要用户对提示做出应答。 GET_KEY: MOV AH,1;等待键入
23、字符 INT 21H;结果在AL中 CMP AL,Y ;是Y? JZ YES ;是,转YES CMP AL,N ;是N? JZ NO ;是,转NO JMP GET_KEY;否则继续等待输入 YES: NO:,43,2) 输入字符串(功能号=0AH) 此功能调用从键盘输入一串字符并把它存入用户指定的缓冲区中。 MOV AH, 0AH LEA DX, INT 21H,预留的N1个字节的存储单元,0DH,N2,N1,N1: 缓冲区长度(最大键入字符数) N2: 实际键入的字符数(不包括回车符,用户定义的输入字符串的缓冲区格式,44,若用户键入的字符数(包括回车)定义的N1,本功能调用将不再接收新的键
24、入,且光标不再向右移动。 例:设在数据段定义键盘缓冲区如下: STR1 DB 10,?,10 DUP(?) 调用DOS功能的0AH号功能的程序段为: LEA DX,STR1 MOV AH,0AH INT 21H 此程序段最多从键盘接收10个按键(包括回车,45,2. DOS显示功能调用,1) 在显示器上显示一个字符(功能号=2) MOV AH, 2 MOV DL, INT 21H 例:在显示器上显示一个字符A MOV AH, 2 MOV DL, A ;或MOV DL, 41H INT 21H,46,MOV AH, 9 LEA DX, INT 21H 注意:被显示的字符串必须以$结束,2)显示字
25、符串(功能号=9,47,例:在屏幕上显示:HELLO,WORLD! ;在数据段定义字符串: DATA SEGMENT STR1 DB HELLO,WORLD!$ DATA ENDS ;在代码段中进行显示输出 MOV AH,9 LEA DX,STR1 INT 21H 完整的程序: HELLO.ASM,48,BIOS功能调用(低级调用,定义:基本输入输出系统,是固化在EPROM中的一组实现基本输入输出功能的子程序。 功能: 系统测试程序、初始化引导程序、一部分中断矢量装入程序及外部设备的服务程序等。BIOS与系统硬件有直接的依赖关系。 调用方法:BIOS调用通过多个软中断提供,具体的调用方法为: MOV AH, INT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 培训师师资课件
- 教育中的社会心理学促进学生群体的积极互动与成长
- 儿童成长记录与教育心理学的结合
- 应急安全知识培训课件
- 企业品牌形象与智慧零售的发展策略
- 2025年中国两轮流动垃圾箱数据监测研究报告
- 从教育技术到用户体验俯卧式学习的未来趋势
- 教育革新之光区块链在学历认证的应用案例
- 学校校园电动自行车管理办法
- 全球铀矿资源分布与2025年核能产业节能减排报告
- 2025年广东高考政治试卷真题答案详解讲评(课件)
- 2025年家庭照护师职业资格考试试题及答案
- 2025年绥化市中考化学试题卷(含答案解析)
- 危重病人观察和护理要点
- 砌体工程培训课件
- GB/T 45719-2025半导体器件金属氧化物半导体(MOS)晶体管的热载流子试验
- 2025-2030中国医药商业行业盈利态势与投资潜力分析报告
- 保险公司保单管理制度
- 医药公司廉政管理制度
- (人教2024版)英语七下期末全册分单元总复习课件(新教材)
- 碳资产管理与碳金融 课件 第9章 碳资产管理案例
评论
0/150
提交评论