|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
3.1节 内存中字的存储
一个字节占一个存储单元,一个字占两个储存单元(一存储单元的大小为8bit)
存放一个字的时候高八位放高字节,低八位放低字节
如右图:
(1)0地址单元存放的的字节型数据:20H;
(2)0地址单元存放的的字型数据:4E20H;
(3)2地址单元存放的的字节型数据:12H;
(4)2地址单元存放的的字型数据:0012H;
(5)1地址单元存放的的字型数据:124EH。
从中可以看出任意两个连续的内存单元,N号和N+1号单元,可以将它们看成两个内存单元,它们为字节型单元,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元。
3.2节 DS和【address】
DS称之为数据段寄存器
有如下的汇编指令:
mov bx, 1000H
mov ds, bx
mov al, [0]
mov bx, 1000H表示将1000H放在bx中,mov ds, bx表示将bx的数据放在ds中。
mov ds, bx和mov al, [0]表示将放在10000H内存中的数据放去al中
10000H如何来的呢?[0]表示偏移地址为0,而它的段地址来自ds中,因为mov ds, bx已经将1000H放在ds中
当要执行mov al, [0]时,CPU将自动将ds中的数据当作段地址
注意:不能做mov ds 1000H这样的,只能mov ds 某一寄存器或者内存地址 8086CPU不支持将数值直接放在ds中(这是硬件问题)
3.3节 字的传送
只要在mov指令中给出16位的寄存器就可以进行16位的数据传输了
如: mov ax [0]
mov [0] ax
3.4节 mov、add、sub指令
我们知道,mov有如下的指令:
mov ax, 8;
mov ax, bx;
mov ds ax;
mov [0], ax;
mov ax, [0]。
那应该也有 mov ax, ds也是成立的
mov ds [0]也是成立的
mov [0] ds 也是成立的
对于add指令和sub指令同mov一样
如:
add ax,8
add ax,bx
add ax, [0]
add [0] ax
sub ax, 8
sub ax, bx
sub ax, [0]
sub [0], ax
以上都是成立的
可是add ds,ax不成立
3.5节 数据段
我们将一组长度为N(N<=60KB)、地址连续、起始地址为16的倍数的内存单元当作专门的存储空间来放数据,这样称之为数据段
下面将讨论如何访问数据段中的数据
如有123B0H~123B9H的内存单元定义为数据段,有如下代码:
mov ax, 123BH
mov ds, ax
mov al, 0
add al, [0]
add al, [1]
add al, [2]
这样将访问到数据段的数据,将它们累加到al中
总结:
(1)[address]地址单元可根据指令中的寄存器的所指向的位数,决定[address]中是一个字节还是两个字节
(2)字要用两个连续的内存单元来存放,字的高位字节方存放在高位地址,字的低位字节存放在低位地址
(3)mov指令访问内存单元时,在[address]给出偏移地址,段地址存放在ds中,在访问内存单元时CPU会自动使用ds中的段地址
(4)注意到add ds, ax不成立
(5)mov、add、sub为两个操作对象的指令,jmp为一个操作对象指令 |
评分
-
查看全部评分
|