前面我们用db和dw定义字节型数据和字型数据。dd是用来定义dword(doubleword,双字)型数据的。比如:
data segment db 1 dw 1 dd 1 data ends
在data段中定义了3个数据:
第一个数据为01H,在data:0处,占1个字节;
第二个数据为0001 H,在data: l处,占1个字;
第三个数据为00000001H,在data:3处,占2个字。
问题
用div计算data段中第一个数据除以第二个数据后的结果,商存在第三个数据的存储单元中。
data segment dd 100001 dw 100 dw 0 data ends
分析
data段中的第一个数据是被除数,为dword(双字)型,32位,所以在做除法之前,用dx和ax存储。应将data:0字单元中的低16位存储在ax中,data:2字单元中的高16位存储在dx中。程序如下。
mov ax,data mov ds,ax mov ax,ds:[0] ;ds:0字单元中的低16位存储在ax中 mov dx,ds:[2] ;ds:2字单元中的高16位存储在dx中 div word ptr ds:p4] ;用dx:ax中的32位数据除以ds:4字单元中的数据 mov ds:[6],ax ;将商存储在ds:6字单元中
;用div计算data段中第一个数据除以第二个数据后,商存放到第三个数据的存储单元中. ;余数存储到第四个存储单元中. assume cs:codesg,ds:datasg datasg segment ;储存 0B60:0 F A1 86 01 00 64 00 00 00 00 00 dd 100001 dw 100 dw 0 dw 0 datasg ends codesg segment start: mov ax,datasg mov ds,ax mov ax,ds:[0] ;ax存储低16位 mov dx,ds:[2] ;dx存储高16位 div word ptr ds:[4] ;计算除法 mov ds:[6],ax ;商存储第3个单元 mov ds:[8],dx ;余数存储第4个单元 mov ax,4c00h int 21h codesg ends end start
汇编伪指令db,dw,dd
db
db定义字节类型变量,一个字节数据占1个字节单元,读完一个,偏移量加1
dw
dw定义字类型变量,一个字数据占2个字节单元,读完一个,偏移量加2
dd
dd定义双字类型变量,一个双字数据占4个字节单元,读完一个,偏移量加4