微机原理第3章汇编语言及编程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
赋值语句: X EQU 50 Y EQU X +10 COUNT EQU $ - ARRY
等号语句: CON = 5 BASE = 200H
BASE = BASE + 10H ;重新定义BASE
韩山师范学院
3.2.2 符号定义伪指令
3-27
2. 定义符号名伪指令
格式: 符号名 LABEL 类型
指令语句中的立即操作数 基址、变址或基址加变址寻址中的位移量 伪指令语句中用于给变量赋初值
韩山师范学院
3.1.2 汇编语言的语句
3-10
(2) 变量与标号
标号是指令的符号化地址,一定在代码段,而变
量是数据的符号化地址,一般在数据段,有时也可在 代码段定义。
变量与标号有三个共同属性: 段基址:所在段的起始地址(SEG) 偏移值:相对于段基址的位移量(OFFSET) 类型:所占存储单元的字节数(TYPE)/NEAR和 FAR

韩山师范学院
END 主过程名
3-7
3.1.2 汇编语言的语句
语句是汇编语言程序的基本组成单位,用于规定汇编 语言的一个基本操作。汇编语言包含三种基本语句:
不可执行语句, 其功能由相应软
件完成,不产生 目标代码。
指令语句 伪指令语句 宏指令语句
是可执行语句,由硬件
(CPU)完成其功能,汇 编时产生目标代码 。
韩山师范学院
正确 正确
3.1.2 汇编语言的语句
3-13
3. 表达式
表达式是汇编语句操作数的基本形式,由运 算符和运算对象组成。
运算符
●算术运算符 ●逻辑运算符 ●关系运算符 ●汇编语言特定的运算符
运算对象
●常数、变量和标号 ●操作数 ●构成程序的段和偏移量

韩山师范学院
3.1.2 汇编语言的语句
ENDS 要包含初始化段寄存器的语句。
CODE SEGMENT [USE16/USE32] ;定义代码段
程回序DOS中TSAA的要SRST语包U:M句E含MMOO。VV返CS:ADXSC,,ODDAEAX,TASS:ST⑴ACK一,个DS;;源:取建程DA数立T序A据D,由S段的E若S基可:干址寻D逻A址T辑A性段
段名 ENDS

告说诉明链:接程序本段与其它指模定块段中同起名点段的的边组界合连类接型关:系:
(PS1UT)BALCSIKECGM连连EN接接T到到/E同同ND一一S个个是物物一理理BW对YO堆段TR段栈中ED((定段字字中义,节)语并)句给S,S一:E个SP赋逻值辑段从SEGMENT
语(句CMA2OET开)MM表MO始段达ORNY式,名产到是生E用一ND户个S定语覆盖义句段结的。DP束段WAOR。的RA(D标(节识双)符字,)用于指明段的基址。
ARRAY_B DW 200 DUP(?) DSEG ENDS SSEG SEGMENT STACK
DW 50 DUP(?) SSEG ENDS CSEG SEGMENT PUBLIC
CSEG ENDS
END
CSEG
DSEG (共400字节)
SSEG (共200字节)
模块1代码 模块2代码 模块1数据
MOV ES,AX
组成。一;般建一立个E源S段程的序可具寻有址数性
MOV INT
… AH,4CH 21H
⑸以源E据代N程D段码伪序、段指(附;令模;;但加结块核返只数束)心回有据程D代段O序S码、操段段堆作系是栈统必段不和 可少的。
CODE ENDS
韩山师范学院 END START
3.1.1 汇编语言源程序结构
韩山师范学院
用户定义的新指令,汇编 时产生相应的目标代码。
3.1.2 汇编语言的语句
3-8
1. 语句格式
指令语句: [标号:] 助记符 [操作数] [;注释] 伪指令语句: [名字] 定义符 [操作数] [;注释]
标号和名字——分别是给指令单元和伪指令起的符 号名称,统称为标识符。(注意组成的语法规则)
功能:将紧跟在本伪指令后的标号、操作码、过程或变 量建立新的符号名,并刷新其类型,但它并不为新指定 的变量或标号分配存储空间。
例如: SUB_FAR LABEL FAR SUB_NEAR: MOV AL,[SI]
;远调用入口 ;近调用入口
两个标号SUB_FAR和SUB_NEAR均指向同一条 指令,前者为远标号,后者为近标号。
助记符和定义符——分别用于规定指令语句的操作 性质和伪指令语句的伪操作功能,统称操作符。
操作数——操作数允许有多个,这时各操作数之间 要用逗号“,”隔开。
韩山师范学院
3.1.2 汇编语言的语句
3-9
2. 数 据
汇编语言中使用的数据有常数、变量和标号。 (1) 常数
常数是指那些在汇编过程中已有确定数值的 量,分为数值常数和字符串常数两类。主要用作:
韩山师范学院
3-25
3.2.2 符号定义伪指令
1. 符号常数定义伪指令 格式:
赋值语句:符号名 EQU 表达式 等号语句:符号名 = 表达式
功能: 都是用符号名代替表达式的值。但赋值 语句定义的符号名不能重新定义,而等号语句
允许。
韩山师范学院
3.2.2 符号定义伪指令
3-26
例3.2 赋值语句与等号语句举例。.2.1 3.2.2 3.2.3 3.2.4 3.2.5
程序结构伪指令语句 符号定义伪指令 数据定义伪指令 过程与宏定义伪指令 结构定义伪指令
韩山师范学院
3-17
3.2.1 程序结构伪指令语句
这类语句是与程序结构紧密相关的基本伪指令语 句,用于说明CPU的类型、逻辑段结构、源程序(或模 块)起止信息和段内存的安排等。主要包括:
韩山师范学院
3.1.2 汇编语言的语句
3-11
变量与标号区别
标号可以用作转移控制类指令的操作数,但
变量不能。
变量可以用作基址、变址或基址加变址寻址 的位移量,但标号不能。
韩山师范学院
3.1.2 汇编语言的语句
3-12
例3.1 假设VAR1和VAR2为字变量,LAB为程序中
的一个标号,判断下列指错令,是不允否许正存确储,器若变错量误间请直指接出传数 错误之处:
3-1
第三章 汇编语言及编程
3.1 汇编语言程序结构与汇编语句 3.2 伪指令语句 3.3 汇编语言编程环境 3.4 DOS/BIOS功能调用 3.5 三种基本结构程序的设计 3.6 子程序设计与调用
韩山师范学院
3-2
3.1 汇编语言程序结构与汇编语句
3.1.1 汇编语言源程序结构 3.1.2 汇编语言的语句
3-5
2.返回DOS状态的方法
(1) 使用DOS的4CH号功能调用
这种方法是在代码段结束前加调用语句:
MOV AH,4CH ;功能号4CH→AH
INT 21H
;中断调用
(2) 使用20H号软功能调用
调用方式是在代码段结束前加调用语句: INT 20H
(3) 使用DOS的0号功能调用
调用方式是在代码段结束前加调用语句: MOV AH,0 INT 21H
韩山师范学院
3.1.2 汇编语言的语句
3-15
地址表达式
其值表示存储器地址,一般都是段内的偏移地 址。与变量一样,地址表达式也具有段值、偏移值 和类型属性。地址表达式主要用来表示指令语句中 的操作数,例如:
MOV AX,BASE[EAX][EBX] JMP BASE[EAX] LEA BX,BASE+12
DW 50 DUP(?) SSEG ENDS CSEG SEGMENT PUBLIC
ASSUME CS:CSEG,DS:DSEG,SS:SSEG START: MOV AX,DSEG
MOV DS,AX
CSEG ENDS END START
模块2(从模块): DSEG SEGMENT COMMON
韩山师范学院
3.2.1 程序结构伪指令语句
定义段中使用的偏移地址和寄存器的字长
3-20
USE16 ── 表示该段字长为16位
⑴ 段定义US语E3句2 ── 表示该段字长为32位
格式:
段名 SEGMENT [定位类型 ][,组合类型][,字字长长选选择择][,‘类别’]
段体
;由指令、伪指令和宏指令语句组成
韩山师范学院
3-3
3.1.1 汇编语言源程序结构
80X86/Pentium系列MPU汇编语言都是以逻 辑段为基础,按段的概念来组织代码和数据的。 因此,源程序结构与逻辑段的定义方法密切相 关,而宏汇编语言MASM 5.0以上的版本中,逻
辑段既可用完整段定义,又可用简化段定义。
韩山师范学院
3.1.1 汇编语言源程序结构
3-14
表达式又分为数值表达式和地址表达式:
数值表达式
指在汇编过程中能够由汇编程序计算出数值的表 达式。可作为指令中的立即操作数和数据区中的初值 使用。例如:
MOV BX,0FFF0H AND 0B234H MOV AL,4CH EQ 2 MOV AH,4CH GT 1 MOV AX,SEG LABLE
错,源与目的操作数
① ADD VAR1,VAR2
类型不一致
② SUB AL,VAR1 ③ JNZ VAR1
错,变量不能用作条 件转移指令的操作数
④ JMP LAB[SI] ⑤ JMP NEAR LAB
错,标号不能用作变 址寻址的位移量
⑥ MOV AX,VAR1[BX] 错,缺PTR运算符
⑦ JMP VAR2[BX]
韩山师范学院
3.2.1 程序结构伪指令语句
3-24
4. 模块定义伪指令
模块定义伪指令包括模块开始和模块结束语句。
(1) 模块开始语句(NAME)
格式:NAME [模块名] 功能:指示源程序开始,并指出该源程序的模块名。
(2) 模块结束语句(END)
格式:END [标号/过程名] 功能:模块结束语句表示源程序到此结束。
方式选择伪指令 完整段定义伪指令 指定地址伪指令 模块定义伪指令
韩山师范学院
3.2.1 程序结构伪指令语句
3-18
1. 方式选择伪指令
方式选择伪指令用于通知汇编程序,当前的 源程序指令是哪一种CPU指令,经过汇编链接之后 生成的目标程序在哪一种CPU机型上运行。不属于
选定CPU的指令均为非法指令。所以,方式选择伪 指令本质上也就是指令集选择伪指令。
(3) 4个可选参数用于为PA源GE程(序页的)汇编、连接提供必要的信
息,特别是模块化程序,各个模块如何定位,彼此之间如何连
接,将较多地涉及到定位类型和组合类型的选择。
韩山师范学院
3.2.1 程序结构伪指令语句
3-21
组合连接举例:
模块1(主模块): DSEG SEGMENT COMMON
ARRAY_A DW 100 DUP(?) DSEG ENDS SSEG SEGMENT STACK
模块1堆栈 模块2堆栈
模块2 数据
韩山师范学院
逻辑段组合示意图
3.2.1 程序结构伪指令语句
3-22
⑵ 段寄存器说明语句 格式:
ASSUME 段寄存器:段名[,段寄存器:段名,…]
功能: 说明源程序中定义的段由那个段寄存器去寻址。
说明:
⑴ CS只能用于包含有程序的段,反之含有程序的段也 只能以CS作为段寄存器。SS也一样,只能与堆栈段对应。
韩山师范学院
3.1.1 汇编语言源程序结构
3-6
(4) 将主程序定义为远过程
也称为“标准序”方法。这种方法是在代码段开始
处按下述方式定义主程序:
CODE
… SEGMENT … ASSUME …
主过程名 PROC FAR
PUSH DS
SUB AX,AX
;标准序
PUSH AX

RET
主过程名 ENDP
3-4
1. 标准的单模块源程序框架
[.586]
DATA SEGMENT [USE16/USE32] ;定义数据段
DATA STACK
STACK
ESNEDGSMENT… [USE16/U⑵中SE定采32义]用的完S逻T;整A辑C数段K 段据定定,;义义要定时伪说义,指堆明对令栈逻程序段辑序列 ⑶对数…据段(有段时与还段有寄堆存栈;器段数的)据,定寻程义址序伪关中指系令。序列
⑵ CS所对应的段名必须在该语句之前有定义。
⑶ 该语句是说明性语句。
韩山师范学院
3.2.1 程序结构伪指令语句
3-23
3. 指定地址伪指令
格式: ORG 偏移地址 ORG $ + 偏移地址
功能: 该伪指令以其指定的偏移地址或由$ 给出的 当前地址加上指定的偏移地址作为当前开始分配和 使用的偏移地址。
通常,方式选择伪指令放在程序的头部,作为 源程序的第一条语句。缺省时默认8086指令集。
韩山师范学院
3.2.1 程序结构伪指令语句
3-19
2. 完整段定义伪指令
采用完整段定义伪指令可具体控制汇编程序 (MASM)和链接程序(LINK)在内存中组织代码 和数据的方式。
主要包括段定义语句和段寄存器说明语句。
相关文档
最新文档