当前位置:文档之家› 项目2:知识点2汇编语言

项目2:知识点2汇编语言


DATA6
54 48 49 53 20 49 53 20 41 20 45 58 41 4D 50 4C 45
T H I S I S
A
E X A M P L E
DS
(3) 段定义语句
在段定义中,SEGMENT和ENDS总是成对使用的,它们将数据和程序
分为多个段,如数据段、栈段和代码段。 ASSUME是汇编时进行操作的,它用于在汇编时告诉汇编器,哪个是数 据段,哪个是代码段,哪个是栈段。 ORG用于指定目标程序存放单元的起始偏移地址,通常写在第一条源 程序的前面,用于指定这段程序的首地址。如使用了: ORG 100 则程序执行时就从CS:100处开始执行其后面的程序。
运算符包括算术、逻辑、关系、分析、综合五类运算符。
① 算术运算符 包括 + 、-、*、/ 、MOD 参加运算的内容可以是数据,也可以是地址,但在一个算术运算符
的两边不能都是地址。
② 逻辑运算符 包括 AND、OR、NOT、XOR ③ 关系运算符 包括 相等 :EQ 大于:GT
不等:NE
小于:LT
小于或等于:LE
汇编语言
一、汇编语言程序格式 二、汇编语言程序设计基础
三பைடு நூலகம்直线程序
四、分支程序 五、循环程序 六、码转换程序设计 七、有关序列的操作 八、DOS 功能调用 九、子程序设计
一、 汇编语言程序格式
my_data segment again: Mov al,[si]
CS
array1 db 05,a2H,00,10H,85H
2000:1500
DS
DW 100 DUP (?) AX=2
定义了100个字单元,则 MOV AX, TYPE DATA1
MOV AX, SIZE DATA1
MOV AX, LENGTH DATA1
AX=200
AX=100
⑤ 综合运算符 综合运算符包括两个地址操作符 PTR和THIS。 PRT—— 改变存储器地址操作数的操作类型,但其段地址和偏移地址不变。 如: DATA1 DW 100 DUP(?) MOV AL, DATA1
M1 M2 M3 M4 58 00 2A 01
DS
MOV BX, OFFSET M1 MOV AX, [BX] MOV DX, 0 MOV BX, OFFSET M2 MUL [BX] MOV BX, OFFSET M3 MOV [BX], AX MOV BX, OFFSET M4 MOV [BX], DX MOV AH, 4CH INT 21H DOCE_SEG ENDS END START
或与其它部分的关系,一般写在某语句的后面或某段的开始处,注释的
前面由“;”前导,表示后面的内容为注释。如果一行写不下,换行后 也要使用“;”前导。
(2) 符号
在8086/8088汇编语言的源程序中为了使程序有很好的可读性和易修改 性,通常使用有一定意义的符号来代替某些单元、数据或表达式。符号可 分为四类:寄存器、变量、标号、数。如SUM、DATA1。
n equ 5 array2 db n dup(?) my_data ends my_code segment assume cs:my_code assume ds:my_data
Inc si
Cmp al, 50 Jbe next Mov [di], al Inc di next: dec cx jnz again
程序是由多个段组成
的, 一个可执行的汇 编程序一般至少有一 S_NAME1 S_NAME2
个代码段,其中包含
可执行的语句。其基 本格式如图: S_NAME2 S_NAME3
S_NAME3
SEGMENT 语句 … 语句 ENDS SEGMENT 语句 … 语句 ENDS SEGMENT 语句 … 语句 ENDS END
4. 常量 常量就是指令中的一些不变的数据。它可以用二进制、十六进制、十进 制和八进制表示,也可以用引号引起来的字串。例如: 二进制:00011101B 十六进制:0C5AAH 十进制:9856D 八进制:237O 字串:’The 2X means 2 multiple X’ 其中的B、H、D和O为数制的结尾符。 5. 注释 注释是用于使程序易于理解的句子,用来表示某行或某段语句的作用
例:求出两个16位数M1和M2的积 DATA_SEG SEGMENT M1 DW 0058H M2 DW 012AH M3 DW ? M4 DW ? DATA_SEG ENDS STACK_SEG SEGMENT S_DATA DB 100 DUP(?) TOP EQU LENGTH S_DATA STACK_SEG ENDS CODE_SEG SEGMENT ASSUME CS:CODE_SEG, DS:DATA_SEG, SS:STACK_SEG START: MOV AX, DATA_SEG MOV DS, AX MOV AX, STACK_SEG MOV SS, AX MOV AX, TOP MOV SP, AX
例: DATA1 DB ? DATA2 DW 1000H DATA3 DD 3000A455H DATA4 DW 4 DUP(0) DATA5 DW 0120H, 0240H, 0360H
DATA1 DATA2 DATA3
DATA4
DATA5
随机 00 10 55 A4 00 30 00 00 00 00 20 01 40 02 60 03
‘ = ’
号操作
对符号的赋值还可使用“=”操作,它与EQU的区别是“=”操作可以重复 定义,而EQU则不能重复定义。如: X=3 Y=6 Y=Y*Y-X …… MOV AX, Y
通过上述操作,最后使Y=33,后面的MOV语句中,当生成目标代码时将用33取代Y。即
MOV AX, 21H (33D)
(2) 数据定义语句 数据定义语句用于为数据分配相应的存储单元。用一个符号名代表一个 或一些单元,并可为这个或这些单元提供初始值。定义数据的操作符有:
符号 例如: PORT EQU 3F8H 在程序中可使用 MOV DX, PORT 对DX进行赋值,实际上PORT就是一个常量。 EQU 表达式
还可在语句中进行运算,如:
DATA_PORT EQU 3F8H STAT_PORT EQU 3F8H+2 SEED FUNC EQU 10 EQU SEED*SEED+2*SEED+1
3. 标号 标号实际上是用符号表示的地址,因此它也是由段、偏移地址和类型组
成,其类型分为段内(NEAR)和段间(FAR)两种,通过
SEG 标号 OFFSET 标号
可以分别得到标号的段地址和偏移地址。
如果是 NEAR 类型,在程序执行时,只取标号的偏移地址,例如在过 程调用(CALL)时,只取IP,而对于FAR类型,则要取段地址和偏移地址,
BUFFER
12 34 00 91 85
WBUFFER
DS
3. 伪指令
在 8086/8088汇编语言中伪指令是用于诸如数据定义、存储区分配 等功能。所谓伪指令是非机器指令,它是在汇编期间进行操作的。 (1) 符号定义语句 EQU
为了使程序便于阅读和修改,我们有时使用一个符号来代表一个值, 而符号代表了一定的意义,在程序中使用一个符号代表一个值进行操作, 其格式为:
AL=05
DATA1
可将DATA1中的数传送到AL中, MOV AX, SEG DATA1
可将DATA1的所在段地址传到AX中,AX=2000

MOV AX, OFFSET DATA1
AX=1500
可将DATA1的偏移地址传入AX中, 例2: 设有数据段中使用 DATA1
05 A2 00 10 85
1. 寄存器 8086/8088的寄存器是程序中最常出现的符号,它可分为字节寄存器和 字寄存器,如AX为字寄存器,而AL则为字节寄存器。只有AX、BX、CX、
DX可分为字和字节寄存器。
2. 变量 变量是存放在某些单元中的操作数,使用有一定意义的符号来代表这 些单元。所有的变量都有一个固定的地址,它由段和偏移组成;同时还有 一个类型,它可以是字节、字或双字。在程序中,变量可以使用数据定义 伪指令进行初始化,见伪指令一节中的数据定义部分。

其最大长度为31个字符。
2. 保留字
保留字是汇编语言中预先保留的特殊字串,只能用于特殊用途,所 有8086/8088的指令、伪指令和寄存器名都是保留字。如AX、MOV、DB、
INT、EQU等等。
保留字不能用作标识符
3. 界符
界符是用于一个程序或一条指令中不同部分的分隔符, 如 MOV AX, 0010H 中的“,”就是界符。其内容见下表: 8086/8088汇编语言的界符 ’ ; > < * , : [ ] + - = ( ) $ & ? . /
DS
例: DATA6 DB ‘THIS IS A EXAMPLE’ 注意: 1:数据定义语句定义的数据在存储器中占 有相应的单元,如上面语句中的第二句 在程序运行时将会以00和10占据两中存 储单元。 而EQU只是定义了一个数据,在汇编 后以实际数据的形式体现在程序中。 也就是说,EQU语句不会占有存储单 元。 2:EQU可以用在指令中,而数据定义语 句不可以。
2. 语句行构成
每个段是由语句行构成的。一个语句行的基本格式为:
标识符 操作码 操作数1 [,操作数2] ;注释
(1) 8088汇编语句中的标记
1. 标识符 标识符由一串字符构成,用于一段程序、一组(或一个)数据或一个 段的开头。使用时要注意以下3点: • 标识符可由数字、字母和下划线组成;
• 不能以数字开头,数据可用在非开头的其它位置;
字节定义——DB 字定义——DW 双字定义——DD 四字定义——DQ 十字节定义——DT
相关主题