- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
.model small .data …… .code start: mov ax, @data mov ds, ax …… mov ax, 4c00h int 21h end start
9
段组定义伪操作
dseg1 dseg1 dseg2 dseg2 segment …… ends segment …… ends word public ‘data’
DATA_BYTE DATA_WORD
DB DW
10,4,10H,? 100,100H,-5,?
14
ARRAY
DB DB DW
‘HELLO’ ‘AB’ ‘AB’
ARRAY
48H 45H 4CH
4CH
4FH 41H 42H 42H 41H
PAR1 PAR2 ADDR_TABLE
DW DW DW
100,200 300,400 PAR1,PAR2
.STARTUP .EXIT [ return_value ]
13
数据定义及存储器分配伪操作:
[变量] 助记符 操作数 [ , 操作数 , … ] [ ; 注释] 助记符:DB DW DD DF DQ DT
DATA_BYTE 0AH 04H
10H
DATA_WORD 64H 00H 00H 01H FBH FFH -
12 ; (bx)=0 ; (bx)=2 ; (bx)=2
?
datagroup group data1,data2
code segment assume cs:code, ds:datagroup
; (bx)=0
程序开始和结束伪操作:
TITLE text
NAME module_name
END [ label ]
(1) MODEL 伪操作
.MODEL 存储模式 [,语言类型] [,操作系统类型] [,堆栈选项] 存储模式:tiny
huge small flat medium compact large
.model small .stack 100H .data …… .code .startup …… .exit 0 end
23
表达式操作:
(1) 算术操作符: 、 、、 、mod
MOV DX, BLOCK+(6-1)*2
ARRAY ARYEND
DW DW MOV
1,2,3,4,5,6,7 ? CX, (ARYEND-ARRAY)/2
; 符号地址常数 有意义 ; 时意义不明确 ;
ADD MOV
AX, BLOCK+2 AX, BX+1
VAR
DB DB
100 DUP (?) 2 DUP (0,2 DUP(1,2),3)
15
OPER1 OPER2
DB ?, ? DW ?, ? …… MOV OPER1, 0 MOV OPER2, 0
;字节指令 ;字指令
OPER1 OPER2
DB 1, 2 DW 1234H, 5678H …… MOV AX, OPER1+1 MOV AL, OPER2 MOV MOV AX, WORD PTR AL, BYTE PTR
LABEL
0064H
17
表达式赋值伪操作:
表达式名 EQU 表达式
B ALPHA BETA EQU EQU EQU [BP+8] 9 ALPHA+18
“ = ” 伪操作 (允许重复定义)
…… EMP = 7 …… EMP = EMP+1 ……
18
地址计数器与对准伪操作:
地址计数器 $ :保存当前正在汇编的指令的地址
3
处理器选择伪操作:
.8086 选择 8086 指令系统
.286 .386 .486 .586 选择 80286 指令系统 选择 80386 指令系统 选择 80486 指令系统 选择 Pentium 指令系统 .286P 选择保护模式下的 80286 指令系统 .386P 选择保护模式下的 80386 指令系统 .486P 选择保护模式下的 80486 指令系统 .586P 选择保护模式下的 Pentium 指令系统
25
(3) 关系操作符: EQ、NE、LT、LE、GT、GE
计算结果为逻辑值:真 0FFFFH 假 0000H MOV FID, (OFFSET Y - OFFSET X) LE 128
X: …… …… Y: …… FID, -1
若 128 (真) 汇编结果: MOV
若 128 (假) 汇编结果: MOV
word
public
‘data’
datagroup
cseg start:
group
dseg1, dseg2
segment assume
para public ‘code’ cs:cseg, ds:datagroup
cseg
mov mov …… mov int ends end
ax, datagroup ds, ax
(1) 定位类型 align_type
PARA BYTE WORD DWORD PAGE
(2) 组合类型 combine_type
PRIVATE PUBLIC COMMON STACK AT exp
(3) 使用类型 use_type
USE16 USE32
(4) 类别 ‘class’
7
存储模式与简化段定义伪操作
第四章
汇编语言程序格式
汇编程序功能
伪操作
汇编语言程序格式
汇编语言程序的上机过程
1
1. 汇编程序功能
编辑程序
program.asm
汇编程序
program.obj
连接程序
program.exe
汇编程序的主要功能:
• 检查源程序,给出出错信息。
• 产生目标文件(.obj)和列表文件(.lst)。 • 展开宏指令。
ax, 4c00h 21h start
10
data1 segment word const1 dw 100 data1 ends
data2 segment word var1 dw ? data2 ends
start: mov ax, datagroup mov ds, ax mov ax, const1 mov var1, ax mov bx, offset var1 mov bx, offset data1 mov bx, offset data2 assume ds:data2 mov ax, data2 mov ds, ax mov ax, var1 mov bx, offset var1 mov ax, 4c00h int 21h code ends end start
0074
0078
007E
19
ORG 伪操作:
SEG1 SEGMENT ORG 10 VAR1 DW 1234H ORG 20 VAR2 DW 5678H ORG $+8 VAR3 DW 1357H ENDS LABEL ORG BUFFER ORG …… BYTE $+8 DB 8 DUP (?)
24
(2) 逻辑和移位操作符: AND、OR、XOR、NOT、
SHL、SHR OPR1 OPR2 EQU EQU AND AX, 25 7 AX, OPR1 AND OPR2 0FFFFH SHL 2
; AND AX,1
MOV
; MOV AX,0FFFCH
IN OUT
AL, PORT_VAL PORT_VAL AND 0FEH, AL
; 定义代码段 ds:data, es:extra
PSP
start:
; 段地址 段寄存器
code
start
EXE程序的内存映象图
5
…… code main
segment proc far assume …… start: push ds mov ax, 0 push ax …… ret main endp code ends end start
(2) 简化的段定义伪操作
.code [name] .data .data? .fardata [name] .fardata? [name] .const .stack [size]
8
.model small .data …… .code .startup …… .exit 0 end .model small .const …… .data …… .code start: mov ax, DGROUP mov ds, ax …… mov ax, 4c00h int 21h end start
100
start: mov ax, datagroup mov ds, ax mov ax, const1 mov var1, ax mov bx, offset var1 mov bx, offset data1 mov bx, offset data2 assume ds:data2 mov ax, data2 mov ds, ax mov ax, var1 mov bx, offset var1 mov ax, 4c00h int 21h code ends end start
× ×
类型不匹配
OPER1+1 OPER2
(AX)=3402H
(AL)=34H
16
LABEL 伪操作: name
LABEL
type
BYTE_ARRAY WORD_ARRAY
BYTE_ARRAY WORD_ARRAY tos
LABEL DW 50
BYTE DUP (?) WORD
tos
50字