语法
汇编语言常量表达
1. 常量
- 常量是程序中使用的一个确定数值
- 在汇编阶段就可以确定,直接编码于指令代码中
- 在程序运行过程中不会改变(不是变量)
- 不是保存在存储器中的可变的变量
- 汇编语言支持多种常量表达式
- 常数:直接给出数值本身
- 字符和字符串:使用ASCII码值
- 符号常量:用标识符替代数值
- 数值表达式:经过运算得到的数值
- 字符和字符串
- 单引号或双引号括起来的单个或多个字符
- 每个字符的数值是对应的ASCII码值
- 字符带单引号时,需用双引号将字符或字符串括起来
- 字符和字符串没有本质的区别
数据表达式
-
汇编语言将数值用16进制进行保存
- const1 db 100,100d,01100100b,64h,‘d’`
- 以上指令都是用16进制的64将数值写入内存

-
数值的存储分为 有符号数 和 无符号数
- 负数是将补码写入内存

- 负数是将补码写入内存
-
mov ax,offset const- 将const的偏移地址赋值给ax(ax指向const变量的起始位置)
变量(Variable)
1. 解释
-
变量
- 变量随着程序运行会发送变化的数据
- 保存在可读可写的主存空间
-
变量的实质是主存单元的数据,所以可以改变
- 变量需要事先定义才能使用
- 变量具有属性方便应用
变量的定义
- 变量定义是申请存储空间
- 同时还可以进行存储单元
- 即用初值表赋予变量初值
- 初值表可以有一个或多个参数,多个参数用逗号分隔
- 使用 “?” 表示初值不确定,即未赋初值
- 使用复制操作符 “DUP” 表示多个同样数值
存储
- 按字节存储
bvar5 db 10 dup(0),10 dup(10,?)
- "?"默认数值为0

2. a db dup(2,3,2dup(4))`

- 按字存储
wvar1 dw 0,32768,65535,-32768,0,32767


-
按双子存储
dvar1 dd 0,80000000h,0ffffffffh


-
字量数据的存储顺序
-
wvar6 dw 3139h,3832h

-
小端存储方式(高对高,低对低)
- 高字节数据保存在高地址存储单元
- 低字节数据保存在低地址存储单元
-
大端存储方式(高对低,低对高)
-
高字节数据保存在低地址存储单元
-
低字节数据保存在高地址存储单元

注意:以上为小端存储方式(8086就是为小端存储方式)
-
-
变量的地址属性
-
变量的地址属性指所在存储单元的逻辑地址
- 含有 段基地址 和 偏移地址
-
通过 地址操作符 获得变量的地址属性
符号 作用 [ ] 括起的表达式作为存储器地址指针 $ 返回当前偏移地址 OFFSET 变量名 返回变量名所在段的偏移地址 SEG 变量名 返回段基地址(实地址存储模型) -
org指定当前地址bvar db 12h,34h org $+10 array dw 1,2,3,4,5,6,7,8,9,10
-
代码段使用变量名,代表其首个数据(变量值);变量名加减常量,指向首个数据的前后单元;
- al = 12h,ah = 34h
- mov al, bvar 相当于 mov al, [bvar]
- mov ah, bvar+1 相当于 mov ah, [bvar+1 ]

-
DATAS SEGMENT wvar dw 5678h dvar dd 9abcdef0h ;此处输入数据段代码 DATAS ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOV AX,DATAS MOV DS,AX mov bx,wvar[2] ;此处输入代码段代码 MOV AH,4CH INT 21H CODES ENDS END STARTmov bx, wvar[2]相当于wvar+2,同时bx又是16位寄存器,所以要顺延取两个字节的数据,即DEF0
-
在变量前加上offset表示获取变量的偏移地址
mov esi, offset dvar
-
mov si,offset dvar ; 将dvar的偏移地址赋给si mov di,[si] ; 将si这个地址的值赋给di mov bp,dvar ; 直接获取dvar变量值
获取变量的类型属性
| 变量名 | 作用 |
|---|---|
| PTR | 将变量名按照指定的类型使用 |
| TYPE | 返回占用字节空间的字量数值 |
| LENGTHOF | 返回整个变量的数据项数 |
| SIZEOF | 返回整个变量占用的字节数 |
1. type
type就是判断数据为什么类型的数据,1表示字节数据,2表示字数据,4表示双字数据
DATAS SEGMENT
bvar db 12h ; 字节数据,type为1
wvar dw 5678h ; 字数据,占用两个字节,type为2
dvar dd 12345678h ; 双字数据,占用四个字节,type为4
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,type bvar ; 0001h
mov bx,type wvar ; 0002h
mov cx,type dvar ; 0004h
;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START

2. lengthof
lengthof就是输出变量的数据个数(项数)
DATAS SEGMENT
array dw 1,2,3,4,5,6,7,8,9,10 ; array中共有10个数据
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,lengthof array ; 将array中的数据个数赋给ax,ax输出10
;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START

3. sizeof
sizeof就是获取变量一共占用了多少存储空间
DATAS SEGMENT
array dw 1,2,3,4,5,6,7,8,9,10 ; array中共有10个数据
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
mov ax,lengthof array ; 将array中的数据个数赋给ax,ax输出10
mov bx,sizeof array ; 将array中数据的大小赋给bx,bx输出14h,因为array是以字存储,所以占用内存大小为20个字节
;此处输入代码段代码
MOV AH,4CH
INT 21H
CODES ENDS
END START

本文介绍了汇编语言中的常量表达、数据表达式、变量及其属性。常量包括直接数值、字符和字符串,而变量是可变数据,存储在主存中。变量的定义涉及存储空间的申请,可以通过变量的地址属性和类型属性来操作。存储方面,汇编语言按字节存储数据,遵循小端存储方式。地址属性包括段基址和偏移地址,可通过特定操作符获取。
1082

被折叠的 条评论
为什么被折叠?



