汇编学习之路之DS

CPU要读读写一个内存单元的时候, 必须先给出这个内存单元的地址,在8086PC中,内存地址由段地址和偏移地址组成, 8086CPU中有一个DS寄存器,通常用来存放将要访问数据的段地址 。 比如,我们要读取内存单元为: 1000H中的内容, 可以用下面的程序段进行:

mov bx, 1000H
mov ds, bx
move al, [0]
以上的 三天平指令是将1000H(1000:0)中的数据独到al 中。

下面是指令的含义:

mov al, [0]
mov 指令可以:

1, 将数据直接送入寄存器,

2,讲一个寄存器中的内容送入另一个寄存器。

也可以用mov指令讲一个内存单元中的内容传送入一个寄存器中,从哪个内存安源送到哪一个寄存器中呢?在指令中必须指明。寄存器用寄存器名来指明,内存单元则需用内存单元的地址来指明,显然,此时mov指令的格式应该是:

mov 寄存器名,内存单元地址 

“[...]”表示一个内存单元,“[...]” 中的0 表示内存单元的便宜地址。只有偏移地址是不能定位一个内存单元的,那么,内存单元的段地址是多少呢、。指令执行时,8086CPU 自动取ds中的数据为内存单元的段地址。

用 mov 指令从1000H中读取数据。1000H用段地址和偏移地址表示为1000:0。先将段地址1000H放入ds,然后用mov al, [0] 完成传送。mov指令中的[] 操作对象是一个内存单元。[]中的0 说明这个内存单元的偏移地址是0,他的段地址默认是放在ds中的,指令执行时,8086CPU会自动从ds中取出。

mov bx, 1000H
mov ds, bx

若要用 mov al,[0] 完成数据从1000 : 0 单元到al 的传送,这条指令执行时,ds 中的内容应为段地址1000H,所以在这条指令前应该将1000H送入ds。


8086CPU不支持数据直接送入段寄存器的操作。若要讲一个数据送入寄存器,比如 将上面的1000H 送入ds, 只好用那个一个寄存器来进行中转,现将1000H送入一般的寄存器,如ax, 再将ax 中的内容送入ds。

至于8086 CPU 为什么不能支持将数据直接送入段寄存器中? 这属于8086 CPU硬件设计的问题了。

你可能感兴趣的:(汇编学习之路之DS)