4.2.1
变量 三重属性:1.段属性(SEGMENT) 2.偏移地址属性(OFFSET) 3.类型属性(TYPE)
例:
DATA SEGMENT
FIRST DB 5AH
SECOND DW 1122H
DATA ENDS
对变量的操作:
LEA AX,FIRST
MOV AX,SECOND
MOV AX,FIRST[DI]
标号:给指令起的名字,例:循环loop,next
4.3.1
伪指令:
变量名:DB(字节)/DW(字)/DD(双字)/DF(长字)/DQ(四字)/DT(十字节)
为变量分配xx的储存单元,并赋值。
4.3.2
1.变量名类似指针指向内容的第一个储存单位,对于数组来说其之后的[1]就像偏移量。
2. FIRST DB ? 用?来表示预留空间。
3. A1 DB 00H 01H 02H 03H 表示数组
MOV AL A1[0] ; (AL)=00H
4. N DUP(表达式)
TAB1 DB 10 DUP (0) ;十个0,十个字节
TAB3 DW 4 DUP(1,5 DUP(0)) ;占用(5*1+4)*4*2=72个字节
4.3.3
1.等值语句 :符号 EQU 表达式
功能:将表达式赋值给符号,符号不能重复。对于=赋值语句可以重复。
2.段定义指令:SEGMENT / ENDS
- 代码段
- 数据段
- 堆栈段
- 附加段
段名 SEGMENT [定位类型],[组合类型],[字长选择],[类别]
组合类型中的STACK 通常要写,不写也有别的办法三行代码
3.段分配语句:(ASSUME)
只起到分配作用,无装入作用(转到下一页)
1. DS,ES,FS,GS 的装入 MOV AX, DATA MOV DS,AX (段基址不能直接装入,需先送入通用寄存器,再传送给段寄存器)
2.SS,SP 的装入:两种情况:1.写了STACK参数项且在ASSUME中分配给SS,则自动装入。
2.未使用:STACK
4.3.4
全段指令:数据段和附加段的存放
段结束CODE ENDS,整体结束END START
4.3.5
1.LABEL 用于给以定义的变量起一个别名。
2. 定位伪指令:ORG 表达式(定义最一开始的偏移地址)AT 表达式(段地址)
用$表示当前偏移地址通常用$ - ST[0]表示里面多少个字节。