汇编语言基础伪指令
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
00H
MOV AL,M ADD AL,N
20H
MOV SUM,AL
…
CODE ENDS
END START
2000H:0000H 2000H:0001H 2000H:0002H 2000H:0003H
2000H:000FH 2001H:0000H
22
要点归纳: 1、定义段的伪指令
段名 SEGMENT ┇
DATA ENDS
2000H:000FH
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
MOV DS,AX
在代码段开头必须用
MOV AL,M ADD AL,N MOV SUM,AL
… CODE ENDS
段名DAATSAS代UM表E指数定据各段段的的段段地寄址存值器,: 用变引户量用应CDE名变完SSSEN表量成代数附DS征名D码据加S代变访的段段段码量问初段段段段的变始寄寄寄结偏量化存存存束移—,器器器地—方,,, 址直法接固寻定址。方式
8
允许使用一些简单的常量表达式
如:MOV AL,3+5 MOV AL,16/2 MOV AL,8
等价
9
二、汇编语言语句格式 1. CPU指令语句格式:
[标号:] 助记符 [操作数][,操作数] [ ;注释]
操作码 不可缺省
注释前加分号
[]表示可选项
根据不同的指令
指令的符号地址, 标号后要有冒号
可有可无,可多可少
0004H 07H
写出指令把DL的中的数据存入M1的首单元 0005H 00H
MOV M1,DL
写出指令把DX中的数据存入M2的首单元
MOV M2,DX
28
课堂作业1
D1 SEGMENT
画出下列变量 占用内存空间的示意图。
DATA_BYTE DB 10,10H,2*16,255
DATA_WORD DW 100,250H
M DB 10H N DB 25H SUM DB 0
DATA ENDS
DATA 是程序员指定的数据段段1F名F;F1H
SEGMENT 段的定义伪指X0令 1FFF2H
定段义名字可节以变空是着量:不D用ATA2 D1 D2 等
ENDS 数据段结束
1FFFFH
由系统自动为段分配内存,
且起始地址一定为××××0H
内存
D1 ENDS
****H:0000H
****H:0001H
0002H
0003H
0004H
0005H
0006H
0007H
~~~
29
课堂作业1
D1 SEGMENT
画出下列变量 占用内存空间的示意图。
DATA_BYTE DB 10,10H,2*16,255
DATA_WORD DW 100,250H
内存
14
1、定义段的伪指令
段名 SEGMENT [定位类型] [组合类型] [‘类别’ ]
┇
段名 ENDS
说明段的起始位置,
缺省,则起始地址为
说明
段的 结束
××××0H (段的起始地址能被16 整除)
‘类别’相同者, 组合时连续存放, 不组合时应缺省
说明不同模块中同名段的连接方式
缺省,不组合(同名段在逻辑上相互独立1)5
12
三、伪指令
CPU不执行,而由汇编程序执行的语句
指示汇编程序(MASM.EXE)要完成的操作。 ➢用于定义变量、分配存储区、 ➢定义逻辑段、指示程序开始和结束等
汇编语言源程序 ——. ASM
汇编程序
机器语言 目标程序
13
重点掌握: 伪指令的格式及实现的操作 伪指令的应用 1、定义段的伪指令 2、定义数据的伪指令 3、变量的属性及属性操作符 4、定义字符串 5、问号?及DUP在DB和DW的应用
END START
21
分析程序的运行结果?
DATA SEGMENT M DB 10H N DB 25H
SUM DB 0 DATA ENDS
SUM=?
M 10H N 25H SUM 3050H
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
OP
MOV DS,AX
设DS已初始化,写出指令把M1的第一个数据元素存入AL
MOV AL,M1 ;直接寻址方式
写出指令把M1的第二个数据元素存入BH
MOV BH,M1+1 ;直接寻址,M1+1 称为地址表达式 26
例2
画出变量在内存中的存放示意图
不再关心段地址的具体数值
内存
D1 SEGMENT M1 DB 1,2 M2 DW 3456H,7
如 L1:MOV AL,BL ;数据传送 10
L1:MOV AL,BL 标号由下列字符组成: 1. A~Z 或 a~z
字母数字串, 大小写不分, 不要用保留字
2. @ ? _ .
3. 0~9 但0~9不能作为第一个字符
合法的标号 L1: L2—1: NEXT: LOOP2:
EXIT
again:
非法的标号 1L: 2—1L: $NEXT: LOOP:
24
例2
画出变量在内存中的存放示意图
不再关心段地址的具体数值
内存
D1 SEGMENT M1 DB 1,2 M2 DW 3456H,7
D1 ENDS
****H:0000H 01 M1
****H:0001H 02 0002H 56H M2
0003H 34H
0004H 07H
0005H 00H
第一个变量的偏移地址一定是0000H 其他数据按顺序分配内存
20000H 20001H 20002H
数据由此开始!!!
17
例1
定义数据段DATA, 其中包含3个变量M,N和SUM 内存
DATA SEGMENT
M DB 10H
N DB 25H SUM DB 0
X0
DATA ENDS
由系统自动为段分配内存空间,
且起始地址一定为××××0H
M N SUM
10H 25H 00H
MOV AL,[0000H]
ADD AL,N
ADD AL,[0001H]
MOV SUM,AL
MOV [0002H],AL
…
…
CODE ENDS
CODE ENDS
END START
END START
由于地址是由系统自动分配的,故:
一律用段名代表段地址值,完成DS的初始化 用变量名访问变量——直接寻址方式
§3.3 汇编语言基础(P111)
序言——计算机语言发展简介 一﹑常量及其数制 二、汇编语言语句格式 三、伪指令 ***(重点﹑难点)
西安电子科技大学 冯育长
1
计算机语言发展简介
高级语言
汇编语言 汇编语言
机机器器语语言言 硬硬件件
高级语言 汇编语言 机器语言
硬件
继续
2
汇编语言与机器语言的关系
用汇编语言编写的程序称为汇编语言源程序
段名 ENDS
定义段的伪指令, 必须成对出现 必须有段名
ASSUME CS:CODE,DS:DATA
;用在代码段首行,指定段寄存器
段的起始地址由系统自动安排 段的起始地址能被16整除
(段的起始地址一定为××××0H) CS:IP 会自动初始化 用户应完成其它段寄存器和偏移地址寄存器的初始化
23
2000H:000FH
CODE SEGMENT ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
OP 2001H:0000H
00H
20H
MOV DS,AX MOV AL,M
CS:IP 会自动初始化
ADD AL,N
2001H :0000H
MOV SUM,AL
…
CODE ENDS
数据段由此开始
实现 M+N→SUM
DATA SEGMENT
M 10H 2000H:0000H
CODE 是程序员指定的代N 码25段H 段20名00;H:0001H
M DB 10H N DB 25H
SEGMENT 段的定义伪S指UM令 00 2000H:0002H
2000H:0003H
SUM DB 0
20
定义代码段CODE,
数据段由此开始
实现 M+N→SUM
DATA SEGMENT M DB 10H
请问:
M 10H 2000H:0000H N 25H 2000H:0001H SUM 00 2000H:0002H
N DB 25H
2000H:0003H
SUM DB 0 DATA ENDS
代码段的起始地址?
要点:
➢ 段的起始地址能被16整除 ➢ 每个段最大为64KB ➢ 最小视需要而定
设系统占用
00000H 1FFF1H
1FFF2H
1FFFFH
2000H:0000H 2000H:0001H 2000H:0002H 2000H:0003H
2000H:000FH 2001H:0000H
18
定义代码段CODE,
MOV BX,M2+2 ;直接寻址,M2+2 称为地址表达式 27
画出变量在内存中的存放示意图
不再关心段地址的具体数值
内存
D1 SEGMENT M1 DB 1,2 M2 DW 3456H,7
D1 ENDS
****H:0000H D0L1 M1 ****H:0001H 02
0002H 5D6LH M2 0003H 3D4HH
11
1. CPU指令语句格式: 2.伪指令语句格式:
[变量名] 助记符 [操作数][,操作数] [ ;注释]
伪指令助记符 不可缺省
变量的符号地址, 后无冒号
汇编语言源程序 ——. ASM
指示汇编程序要完成的操作。 用来定义变量,分配存储单元, 指示程序开始和结束等
汇编程序
MASM.EXE
机器语言 目标程序
归纳: 2、定义数据的伪指令
DB 定义字节数据 Defin Byte 一般格式:
[变量名] DB 数1[,数2,… ][;注释]
其它几个定义数据的伪指令:
DB DW DD DQ DT
定义字节数据 Defin Byte,一个数据占1个字节 定义字数据 Defin Word, 一个数据占2个字节 定义双字数据 Defin Double word,一个数据占4个字节 定义的数据为4字型(8字节) 定义的数据为10字节型
25
例2
画出变量在内存中的存放示意图
不再关心段地址的具体数值
内存
D1 SEGMENT M1 DB 1,2 M2 DW 3456H,7
D1 ENDS
****H:0000H 01 M1 ****H:0001H 02
0002H 56H M2 0003H 34H
请问:变量M1的字节长度=?
2
0004H 07H 0005H 00H
2000H:0003H
2000H:000FH
CODE SEGMENT
CODE SEGMENT
ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATA
START:MOV AX,DATA
Baidu Nhomakorabea
START:MOV AX,2000H
MOV DS,AX
MOV DS,AX
MOV AL,M
汇编语言源程序 ——. ASM
汇编程序
机器语言 目标程序
汇编语言的两种语句类型
1.CPU指令
MASM.EXE 系统软件
CPU执行的语句,如 MOV ,ADD 等
能够生成目标代码 2.伪指令(指示性语句)
➢ CPU不执行,而由汇编程序执行的语句,不生成目标 代码.
➢ 定义逻辑段、指示程序开始和结束等.
D1 ENDS
****H:0000H 0AH DATA_BYTE
****H:0001H 10H
0002H 20H
0003H FFH
7
一、汇编语言的常量及其数制
用后缀表示常数的数制
B
二进制数
D(或缺省) 十进制数
H
十六进制数
‘A’
单引号表示ASCII码(字符串常量)
如:MOV AL,0110 0100B MOV AL,64H MOV AL,100
等价
MOV AL,‘1’ ;(AL)=31H
MOV AL,0ABH
以A~F开头的数,加前导0
D1 ENDS
****H:0000H 01 M1 ****H:0001H 02
0002H 56H M2 0003H 34H
请问:变量M2的字节长度=?
4
0004H 07H 0005H 00H
写出指令把M2的第一个数据元素存入AX
MOV AX,M2 ;直接寻址方式
写出指令把M2的第二个数据元素存入BX
2 、定义数据的伪指令
用于定义数据区中变量的类型 ① DB 定义字节数据 Defin Byte
指令格式: [变量名] DB 数1[,数2 …] [;注释]
可省略
可有多个 数据项
可选 16
例1
定义数据段DATA, 其中包含3个变量M,N和SUM 内存 设系统占用
DATA SEGMENT
00000H
END START
SSEN堆D 栈源段程段序寄结存束器,
注一意般语在法E格ND式之后是第一条指令的标号
19
定义代码段CODE,
实现 M+N→SUM
DATA SEGMENT M DB 10H N DB 25H
SUM DB 0 DATA ENDS
设已知地址如图 示,则等价于:
数据段由此开始
M 10H 2000H:0000H N 25H 2000H:0001H SUM 00 2000H:0002H