汇编语言 第四章

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2012-8-12 29
例:有如下数据段定义: VARW DW 1234H,5678H VARB DB 3,4 VARD DD 12345678H BUFF DB 10 DUP(?) MESS DB ‘HELLO’ 设:变量VARW的逻辑地址为2000H:0100H 1)SEG VARW=2000H 2)OFFSET VARW=0100H,OFFSET VARB=0104H 3)TYPE VARW=2,TYPE VARB=1 TYPE VARD=4 4)LENGTH VARW=1,LENGTH BUFF=10 LENGTH MESS=1 5)SIZE VARW=2,SIZE BUFF=10,SIZE MESS=1
2012-8-12 22
4.3 汇编语言程序格式
二、变量和标号 1、变量和标号代表存储单元的符号地址。 2、变量表示的存储单元中存放数值,在除代码段以外的其 他段中定义,后面不跟冒号,经常出现在操作数字段。 3、标号表示的存储单元中存放指令代码,在代码段中定义, 后面跟冒号,经常在转移指令或CALL指令使用。 4、属性 1)段值:变量或标号对应存储单元所在段的段值; 2)偏移:变量或标号对应存储单元的起始地址的段内偏移; 2)类型:变量类型有BYTE,WORD,DWORD;标号类型有NEAR,FAR

2012-8-12 14
ຫໍສະໝຸດ Baidu
4.2 伪指令
四.表达式赋值伪操作 1.等价语句EQU 格式:符号名 EQU 表达式 1)用符号代表常数或数值表达式. 2)用符号代表一个字符串. 3)重新定义关键字或指令助记符. 注意:等价语句不分配存储单元,在同一个源程序中不能用 EQU定义同名符号,不能重新定义. 2.等号语句= 格式:符号名=数值表达式 作用:用符号表示一个常数 注意:允许重复定义。
2012-8-12 11
4.2 伪指令
三.数据定义及存储器分配伪操作 1.数据定义语句 5)定义没有初值的数据项 用?表示不预置对应变量的初值,仅仅给变量分配存储单 元. 例:INBUFF DB 5,?,?,8 6)定义字符串 使用DB定义字符串,用单引号或双引号括起来字符串.指 令把各个字符的ASCII码值依次存放在相应的单元中. 例:MESS DB ‘HELLO’ MESS DB ‘H’,’E’,”HELLO”
2012-8-12 6
例1: DSEG1 DSEG1 DSEG2 DSEG2 CSEG
START:
CSEG
SEGMENT …….. ENDS SEGMENT …… ENDS SEGMENT ASSUME CS:CSEG,DS:DSEG1,SS:SSEG2 MOV AX,DSEG1 MOV DS,AX MOV AX,DSEG2 MOV SS,AX ……. ENDS END START
2012-8-12
19
4.3 汇编语言程序格式
一.语句的种类和格式
1.语句的种类 1)指令语句:汇编是被翻译成机器指令,每条指令语句都有 与其对应的机器指令. 2)伪指令语句:没有对应的机器指令,不被机器执行,只是指 示汇编程序如何汇编源程序. 3)宏指令语句:在宏汇编语言中,把一个程序片段定义为一 宏指令.当宏指令在语句中出现是,该语句被称为宏指令 语句. 一个完整程序
目标程序 .OBJ
可执行程序 .EXE
2012-8-12 2
4.1汇编程序功能
汇编语言源程序的运行步骤:
1、用编辑程序建立ASM文件;
2、用ASM程序把ASM文件转换成OBJ文件; 3、用LINK程序把OBJ文件转换成EXE文件; 4、用DOS命令直接键入文件名执行程序。
2012-8-12
3
4.2 伪指令
2012-8-12 13
DATAB 例: DATAB DB 18H,-1,30 DATAW DATAW DW 18H,2A45H DATAD DD 18H,2F3A124BH DATAD 在内存中的存储情况如图所示。
18 FF 1E 18 00 45 2A 18 00 00 00 4B 12 3A 2F
27
4.3 汇编语言程序格式
6.析值操作符:数值回送操作符 1) SEG:返回变量所在段的段值 格式:SEG 变量名或符号 2)OFFSET:返回变量或标号的偏移 格式:OFFSET 变量名或标号
2012-8-12
28
4.3 汇编语言程序格式
6.析值操作符:数值回送操作符 3)TYPE:返回变量或标号的类型 格式:TYPE 变量名或标号 其中:BYTE WORD DWORD NEAR FAR 1 2 4 -1 -2 4)LENGTH:返回利用DUP定义的数组中元素的个数, 亦即count值. 格式: LENGTH 变量名 5)SIZE:返回用DUP定义的数组占用的字节数. 即:SIZE 变量=(LENGTH 变量)*(TYPE 变量) 格式:SIZE 变量名
2012-8-12
7
4.2 伪指令
3.SEGMENT伪操作可增加说明 格式:段名 SEGMENT [定位类型][组合类型][使用类 型][类别] …….. 段名 ENDS 1)当需要连接程序把本程序与其他程序模块连接时,需 要使用这些说明。 2)定位类型:说明段的起始地址应有怎样的边界值。 3)组合类型:说明程序连接时的段合并方法。 4)使用类型:说明是16位或32位寻址方式。 5)类别:在引号中给出连接时组成段组的类别。
2012-8-12

15
4.2 伪指令
五、地址计数器与ORG语句 1、地址计数器$ 在汇编程序对源程序汇编的过程中,使用地址计数 器来保存正在汇编的指令的偏移地址。开始汇编时,地 址计数器为0,以后每处理一条指令,地址计数器增加一 个值,为该指令的字节数。符号$表示地址计数器的值. 允许在指令和伪指令中直接用$引用当前地址计数器的值. 例:JMP $+6;$表示本条指令第一字节的地址偏移 ARRAY DW 1,$+4;$表示地址计数器当前值 2、ORG语句 格式:ORG 数值表达式 作用:ORG语句设置当前地址计数器的值.
2012-8-12 17
4.2 伪指令
六、过程定义伪指令 可以把具有独立功能的程序段定义为过程 (相当于高级语言中的子程序),供其它程序 调用。 过程定义的语法格式为: <过程名> PROC [NEAR]/FAR ┆ RET <过程名> ENDP
2012-8-12 18
4.3 汇编语言程序格式
语句的种类和格式 表达式的表示
伪操作:又称伪指令,在程序运行期间不被执行, 只是在汇编程序对源程序汇编期间由汇编程序 处理的操作,他们可以完成如定义程序模式、 定义数据、分配存储区、指示程序结束等功能。
2012-8-12
4
4.2 伪指令
一.段定义伪操作 1.段开始和结束语句 格式:段名 SEGMENT …….. 段名 ENDS 1)段开始语句中的段名与结束语句中的段名要相同; 2)删节号部分,对于数据段、附加段和堆栈段来说, 一般是存储单元的定义、分配等伪指令,对于代 码段是指令及伪指令。
2012-8-12 20
该程序的功能是完成两个字节数据相加。 DATA SEGMENT ;段定义开始(DATA段) BUF1 DB 34H ;第1个加数 BUF2 DB 2AH ;第2个加数 SUM DB ? ;准备用来存放和数的单元 伪指令语句 DATA ENDS ;段定义结束(DATA段) CODE SEGMENT ;段定义开始(CODE段) ASSUME CS:CODE,DS:DATA ;规定DATA、CODE分别为数据段和代码段 START: MOV AX,DATA MOV DS,AX ;给数据段寄存器DS赋值 MOV AL,BUF1 ;取第1个加数 ADD AL,BUF2 ;和第2个加数相加 指令语句 MOV SUM,AL ;存放结果 MOV AH,4CH ; INT 21H ;返回DOS状态 CODE ENDS ;段定义结束(CODE段) END START ;整个源程序结束
2012-8-12 12
4.2 伪指令
7)定义其他类型数据项DQ,DT DQ定义8字节数据项 DT定义10字节数据项 2.重复操作符DUP 格式:count DUP (表达式[,表达式…]) 1)可以用来定义数组,定义数据缓冲区; 2)count是重复次数; 3)允许嵌套; 例:BUF DB 3 DUP(0);BUF DB 0,0,0 例:BUF1 DB 3,2,5 DUP(1,2,2 DUP(0))
2012-8-12
25
4.3 汇编语言程序格式
4.逻辑运算符 1)运算符包括AND(与)、OR(或)、XOR(异或)、 NOT(非)、SHL(左移位)、SHR(右移位) 2)运算结果是数值。 例:MOV AX,1 SHL 3 MOV CX,3 AND 47H 相当于 MOV AX,8 MOV CX,3
2012-8-12 10
4.2 伪指令
三.数据定义及存储器分配伪操作 1.数据定义语句 3)定义字数据项DW 每一字数据项占用两个字节存储单元 例:FLAG DW 2FCDH,1024,-1 VECT DW 0 DW 2047 4)定义双字数据项DD 每一双字数据项要占用四个字节存储单元 例:VECTOR DD 4 FARPTR DD 12345678H,0
2012-8-12
23
4.3 汇编语言程序格式
三、操作数项 操作数项可以是由标号,变量,常数和表达式组成. 1.常数 1)十进制、十六进制、二进制、八进制数 D、H、B、Q 2)字符串常数 用引号括起来的一个或多个字符,只是包括在引号中的字 符的ASCII代码值。 例:‘A’的值是41H,’ab’的值是6162H 2.算术运算符 有+、-、*、/、MOD(模)、+(正)、-(负),意义和高 级语言中同样运算符的意义相似。 例:ADD AX,-3*3+32H/5
第四章 汇编语言程序格式
本章重点:1、汇编语言语句格式 2、伪指令 3、源程序结构形式 本章作业: P155 4.1 4.5 4.11 4.13 4.14 4.16
2012-8-12 1
4.1汇编程序功能
汇编源程序 .ASM 编辑程序 如:全屏幕编辑工具 EDIT 汇编程序 如:宏汇编程序 MASM 连接程序 如:连接程序LINK
2012-8-12 21
4.3 汇编语言程序格式
2.语句的格式 1)指令语句的格式: [标号:]助记符 [操作数[,操作数]] [;注释] 伪指令语句格式: [名字] 伪指令定义符 [参数,..参数] [;注释] 2)标号和名字命名规则: 有字母、数字及规定的特殊字符(?@_$)等组成,不能用 数字开头,最多有31个字符; 不区分大小写; 不能使用保留字; 3)一个语句一行,各组成部分间有分隔符。
2012-8-12
26
4.3 汇编语言程序格式
5.HIGH和LOW运算符 1)HIGH 表达式:数值表达式的高8位 2)LOW 表达式:数值表达式的低8位 例: MOV AX,HIGH 1234H MOV AX,LOW (1234H+5) 相当于 MOV AX,12H MOV AX,39H
2012-8-12
2012-8-12 24
4.3 汇编语言程序格式
3.关系运算符 1) 运算符包括EQ、NE、LT、GT、LE、GE。 2)运算结果为一个数字值。关系成立结果为0FFFFH,结 果不成立结果为0。 例:MOV AX,1234H GT 1024H MOV BX,0LT0 相当于 MOV AX,0FFFFH MOV BX,0
2012-8-12
8
4.2 伪指令
二、程序结束伪操作 格式:END [标号] 1)告诉汇编程序源程序到此为止,不再对其后的 任何语句进行汇编; 2)标号是一个已在程序中定义过的标号,表示程 序要从标号所对应的指令开始执行; 3)源程序必须有一个END语句.
2012-8-12
9
4.2 伪指令
三.数据定义及存储器分配伪操作 1.数据定义语句 1)格式:[变量名] 数据定义符 表达式[,表达式…] ; 注释 变量名代表该语句所定义若干数据项中的第一个数据 项. 变量名和注释都可缺省。 2)定义字节数据项DB 每一字节数据项占用一个字节存储单元 例:COUNT DB 100 DB 0DH,0AH,’$’ TABLE DB 0,2,3
2012-8-12 5
4.2 伪指令
2.段使用设定语句 格式:ASSUME 段寄存器名:段名[,段寄存器名: 段名..] 1)ASSUME语句说明段寄存器与程序段的对应关系; 2)段名必须是由SEGMENT定义的段中的段名。 3)ASSUME语句是伪指令语句,它不能把段地址装 入段寄存器,在代码段中还需要通过指令语句 来给段寄存器赋值.但代码段不需要这么做。 4) ASSUME NOTHING,可取消前面由ASSUME所指定 的段寄存器。
相关文档
最新文档