当前位置: 代码迷 >> 汇编语言 >> 请教:为什么有时访问存储单元时,要加段,而有时又不加,比如mov ds:[1000], ax ,mov [1000], ax
  详细解决方案

请教:为什么有时访问存储单元时,要加段,而有时又不加,比如mov ds:[1000], ax ,mov [1000], ax

热度:1482   发布时间:2013-02-26 00:00:00.0
请问:为什么有时访问存储单元时,要加段,而有时又不加,比如mov ds:[1000], ax ,mov [1000], ax
mov   ds:[1000],   ax  
mov   [1000],   ax

------解决方案--------------------------------------------------------
LZ说的是段前缀

CUP要读写一个内存单元的时候,必须先给出这个内存单元的地址,在8086PC中, 内存地址由段地址偏移地址组成,DS段寄存器通常用来存放要访问数据的段地址,比如我们要读取10000H单元的内容,可以用如下的程序段进行:
mov bx, 1000h
mov ds, bx
mov al,[0]
[0]表示一个内存单元,其中0表示内存单元的偏移地址,那么内存单元的段地址是多少呢?指令执行时,CPU自动取DS中的数据为内存单元的段地址.

我们可以在访问内存单元的指令中显式地给出内在单元的段地址所在的段寄存器.比如:
mov ax, cs:[bx]
表示将一个内在单元的内容送入ax,偏移地址在bx中,段地址在cs中

这些出现在访问内存单元的指令中,用于显式地指明内在单元的段地址的DS,CS,ES或SS,在汇编语言中称为段前缀

初学不对之处请原谅!!!
  相关解决方案