第四章:汇编语言程序格式
发布时间:2024-11-04
发布时间:2024-11-04
第四章4.1
汇编语言程序格式
汇编程序功能
编辑程序
PROGRAM.ASM
汇编程序
PROGRAM.OBJ
连接程序PROGRAM.EXE
4.2
伪操作
伪操作是汇编程序对源程序进行汇编时处理的操作,完 成数据定义、分配存储区、指示程序开始结束等功能。 数据定义及存储器分配伪操作 格式:[变量] 助记符 操作数 [ , 操作数 , … ] [ ; 注释] 助记符:DB DW DD DQ DT
DATA_WORD DATA_BYTE MESS1 MESS2
DW DB DB DW
100, 100H 100 DUP (?) ‘AB’ ‘AB’
MESS1 A
B MESS2 B
A 2
例: OPER1 DB ?, ? OPER2 DW ?, ? … MOV OPER1, 0 ; 字节指令 MOV OPER2, 0 ; 字指令例: OPER1 DB 1, 2 OPER2 DW 1234H, 5678H … MOV AX, OPER1+1 × MOV AL, OPER2 × 类型不匹配 MOV AX, WORD PTR OPER1+1 MOV AL, BYTE PTR OPER2
OPER1 OPER2
01 02 34 12 78 56
(AX)=3402H
(AL)=34H
变量和标号:所有的变量和标号都有三种属性
段值(SEG)偏移量(OFFSET) 类型(TYPE):变量(字节/字/双字/四字/十字节)
标号(NEAR / FAR)例: BYTE_ARRAY LABEL BYTEWORD_ARRAY DW 50 DUP (?)BYTE_ARRAY WORD_ARRAY
表达式赋值伪操作EQU(不占存储单元) 格式:表达式名 EQU 表达式 CONSTANT EQU 256 ALPHA EQU 7 BETA EQU ALPHA-2
“=”伪操作 (允许重复定义) 格式:变量=表达式 … EMP=7 … EMP=EMP+1 …5
段定义伪操作 格式: 段名 SEGMENT [定位类型, 组合类型, 类别] …… 段名 ENDS例:定义用户堆栈 stack_seg segment dw 40H dup (?) tos label word stack_seg ends code_seg segment …… mov ax, stack_seg mov ss, ax mov sp, offset tos …… code_seg ends
STACK(SS)
40H
(SP)6
例:
data_seg1 … data_seg1 data_seg2 … data_seg2
segment ends segment ends ; 定义数据段
; 定义附加段
code_seg segment assume cs:code_seg, ds:data_seg1, es:data_seg2 start: mov ax, data_seg1 mov ds, ax mov ax, data_seg2 mov es, ax ; 段地址 段寄存器 … code_seg ends end start7
程序开始和结束伪操作 格式:TITLE 程序名 END [程序首地址标号] 对准伪操作 EVEN ;使下一地址从偶地址开始 A DB morning EVEN B DW 2 DUP (?)
ORG 常数表达式 ;使下一地址是常数表达式的值 ORG 100H START: …...8
$ 地址计数器:保存当前正在汇编的指令的地址 例: ORG $+8 ; 跳过8个字节的存储区 JNE $+6 ; 转向地址是JNE的首址+6 例:$用在伪操作的参数字段——表示地址计数器的当前值 ARRAY DW 1, 2 , $+4 , 3 , 4 , $+4ARRAY
01 00 02 00 7C 00 03 00 04 00 82 00
0074
0078
007E
基数控制伪操作 格式:.RADIX 表达式 (2,8,10,16) ;规定无标记数的基数
例:.RADIX 16 MOV BX, 0FF MOV BX, 178D
4.3
汇编语言程序格式[符号地址] 变量 标号 操作 指令 伪指令 宏指令 操作数 寄存器 标号 变量 常数 表达式 [; 注释] 说明程序或语句 的功能
表达式:数字表达式 地址表达式11
表达式操作符(5类)(1)算
术操作符: , , , , mod 例: ADD AX, A+2; ; 符号地址 常数有意义 时意义不明确
MOV AX, BX+1 ;
(2)逻辑操作符:AND, OR, XOR, NOT 例: OPR1 EQU 25 OPR2 EQU 7 …… AND AX, 112
汇编
AND AX, OPR1 AND OPR2
(3)关系操作符:EQ, NE, LT, LE, GT, GE 计算结果为逻辑值:真 0FFFFH
假 0000H例:MOV FID, (OFFSET Y - OFFSET X) LE 128 X: …… …… Y: …… 若 128(真) 若 128(假) 汇编结果 MOV FID, -1 汇编结果 MOV FID, 013
(4)数值回送操作符: OFFSET / SEG 变量(或标号)
功能:回送变量或标号的偏址 / 段址例:MOV BX, OFFSET X MOV DX, SEG X
TYPE 变量(或标号)变量:DB DW DD DQ DT 值: 1 2 4 8 10 LENGTH 变量 功能:回送由DUP定义的变量的单元数,其它情况回送1 SIZE 变量 功能:LENGTH*TYPE14
标号:NEAR FAR -1 -2
例:ARRAY DW 100 DUP (?) TABLE DB ABCD
ADD SI, TYPE ARRAYADD SI, TYPE TABLE MOV CX, LENGTH ARRAY MOV CX, LENGTH TABLE MOV CX, SIZE ARRAY
; ADD SI, 2; ADD SI, 1 ; MOV CX, 100 ; MOV CX, 1 ; MOV CX, 200
MOV CX, SIZE TABLE
; MOV CX, 1
(5)属性操作符:
类型 PTR 表达式段操作符 SHORT 标号
例: MOV WORD PTR [BX], 5例: MOV ES: [BX], AL 例: JMP SHORT NEXT
THIS 类型
例: TA EQU THIS BYTETB DW 100 DUP (?) NEXT EQU THIS FAR MOV CX, 100
字节分离操作符 HIGH LOW
例: CONS EQU 1234H MOV AH, HIGH CONS MOV AL, LOW CONS16
上一篇:教案全球性大气环流