目录
源程序(.asm) -> 汇编程序ASM ->目标文件(.obj) -> 连接程序link(目标文件、库文件、其他目标文件) -> 可执行文件(.exe)
一、程序建立、处理
源程序(.asm) -> 汇编程序ASM ->目标文件(.obj) -> 连接程序link(目标文件、库文件、其他目标文件) -> 可执行文件(.exe)
二、伪操作
段定义伪操作
完整段定义
data1 segment ... data1 ends ... data2 segment ... data2 ends codes segment assmue cs:code,ds:data1,es:data2 start: mov ax,data1 mov ds,ax mov ax,data2 mov es,ax codes ends end start
储存模型与简化段定义
.model small .stack 100h .const .data ... .code start: mov ax,@data mov ds,ax ...
段组定义
dseg1 segment word public 'data' dseg1 ends dseg2 segment word public 'data' dseg2 ends datagruop group dseg1,dseg2 cseg segment para public 'code' assume cs:cseg,ds:datagroup start: mov ax,datagroup mov ds,ax ... cseg ends end start
开始伪操作
name xx ;程序将以给出的xx作为模块名(这个能干嘛啊)
title xx ;可指定列表文件的每一页上打印的标题xx(这个能干嘛啊)
结束伪操作
end [label] ;label是指示程序开始执行的起始地址
;多个程序模块相连,只有主程序需要编号(不理解,标号是什么)
;汇编程序从start开始,遇到end结束汇编
.exit [xx] ;产生退出程序并返回操作系统的代码,xx为给操作系统的数值,默认 0
.startup ;masm6中,程序中用了stratup,则end伪操作不必指定程序入口点标号
...
.exit 0
end
数据定义、储存器分配伪操作
操作格式
[xx](变量名字,可以没有) Mnemonic(助记符) Operand(操作数)
助记符Mnemonic类型
类型 db dw dd ... 大小 8bits:4c 2bites:8c 09 2words ...
其他定义:df(6bites)、dt(10bites)
dq(4words)
操作数Operand用法
a db 5ch ;直接给数字
db xx,DUP(Operand) ; xx是重复次数,dup里的括号放操作数Operand,可嵌套
;名字是可以忽略的,所以不打 a 了
db 0,?,0 ;?的作用是保留储存空间但不装入数据
变量的类型属性
·变量,名字是 xx,类型是Mnemonic,内容看Operand
·伪操作变量的值,是数据第一个数据项在当前段内第一个字节的偏移地址(例如,段定义里只有一句话:abc dw 24ac h,则可推出abc的值为 0 ,当前数据段内abc的第一个字节在段首,偏移为 0 )
·类型属性表示每个数据项的长度, db 为 1
·寄存器相对寻址,+1到下一个字节,+2到下个字
其他数据定义、储存器分配 伪操作
ptr、label 伪操作
byte /word /fword /qword /tbyte PTR xx ;指定操作数xx类型属性
xx LABEL byte /word /fword /qword /tbyte ;定义变量xx类型属性
equ 伪操作
xx equ 数值 /地址 ;把 数值 /地址在后面用 xx 代替
;数值可以为直接的256、b equ 4 代替的 b - 2
;地址可以为变量段内偏移的地址a、变址地址[bp + 8]、加段前缀的变址 ds:[...]
地址计数器与对准伪操作
地址计数器 $
·表示正在或即将汇编的指令的首地址,初始为 0 ,每处理完一条指令,$ 的值就会增加上 该指令所占的字节数
·直接用 $ 可以引用地址计数器的值
· $ 在指令中,表示该指令首地址
· $ 在伪操作的参数中,表示 $ 的当前值
ORG伪操作
设置当前地址计数器的值
datas segment
org 10
vect1 dw 47a5h ;vect1 的偏移地址为0ah
datas ends
EVEN伪操作
...
even ; 下一个变量或指令的偏移地址为偶地址
...
ALIGN伪操作
...
align 4 ;下一个变量指令的偏移地址为 4 的倍速
...
align 2 ;等价于even伪操作
...