伪指令dd
db:define byte 定义字节型数据 —— 八位数据
dw:define word 定义字型数据 —— 十六位数据
dd:double word 定义双字型数据 —— 三十二位数据
比如:
data segment
dd 1
dw 1
db 1
data ends
可以用debug观察内存分配情况
问题:用div计算data段中第一个数据除以第二个数据后的结果,商存放在第三个数据的存储单元中
data segment
dd 100001; 100001B=186A1H,超过了ax所能存储的最大值
dw 100
dw 0
data ends
分析:data段的第一个数据是 被除数,为dword(双字)型,32位,所以在做除法之前用DX存放高16位,用AX存放低16位(将data:0字单元中低16位存储在ax,data:2字单元中高16位存储在dx)
完整代码如下:
data segment
dd 100001; 100001B=186A1H,超过了ax所能存储的最大值
dw 100
dw 0
data ends
mov ax,data
mov ds,ax
mov ax,ds:[0] ;ds:0字单元中低16位存储在ax中
mov dx,ds:[0] ;ds:2字单元中高16位存储在dx中
div word ptr ds:[4];用dx:ax中的32位数据除以ds:4字单元中数据
mov ds:[6],ax ;将商存放在ds:6字单元中
;ax存放商,dx存放系数
操作符dup
dup是一个操作符,在汇编语言中同dw、db、dd等一样,也是由编译器识别处理的符号。它是和db、dd、dw等数据定义伪指令配合使用的,用来进行数据的重复。
db 3 dup (0) ;定义了三个字节,相当于db 0,0,0 这个0有多大是通过前面的db确定
db 3 dup (0,1,2) ;定义了九个字节,相当于db 0,1,2,0,1,2,0,1,2
db 100 dup ('12') ;重复了100个‘12’
db 3 dup (‘123’,‘abc’)
dup使用格式如下:
dd 重复的次数 dup (重复的双字型数据)
dw 重复的次数 dup (重复的字型数据)
db 重复的次数 dup (重复的字节型数据)