|
发表于 2013-8-6 14:20:36
|
显示全部楼层
数据存放在内存中,要访问这个数据就要知道这个数所在的内存地址。每个内存单元编有一个地址,每个内存单元是8位。
一个数据较小,存放在内存中只占据一个内存单元,而一个较大的数据则可能占据多个连续的内存单元。
访问一个数据,用到的这个数据址,是这个数据所占据的一个或多个内存单元的起始地址。
mov ax,0ffffh
mov ds,ax
mov al,ds:[0] ;把以FFFF:0为起始地址的连续一个或多个内存单元的值传送到al, al只有8位,所以al装下的是FFFF:0这个内存单元的值。
mov ax,ds:[0] ;AX有16位,所以AX装下了FFFF:0和FFFF:1,其中AL装下FFFF:0中的值,AH装下了FFFF:1
立即数没有长度(8位或16)这个属性,但通过换算成2进制形式可知它至少要多少个内存单元才能存放得下。代码中给出的一个内存地址也没有其对应的数据的长度这个属性,它作为一个起始地址使用,长度不确定。
mov al,1 ; al的值为 0000 0001 (2进制)
mov ax,1 ;ax的值为 0000 0000 0000 0001 (高字节填充0)
mov al, 1 0000 0000b ;出错,放不下。
mov ds:[0],1 ;FFFF:0 中存放 0000 0001 ?错,两者都没有长度属性,不知道怎么存放。
mov btye prt ds:[0],1 ;对头,btye prt ds:[0] 指明只使用以ds:[0]为起始的一个字节。FFFF:0 中存放 0000 0001
mov word prt ds:[0],1 ;指明只使用以ds:[0]为起始的两个字节。FFFF:0 和FFFF:1分别存放0000 0001和0000 0000
|
|