回 帖 发 新 帖 刷新版面

主题:[讨论]汇编初学者的提问,麻烦各位高手进来看看咯!!

初学汇编,最近发现了个问题,想请教高手:
DATA SEGMENT
....
DATA ENDS
.....
START:MOV AX,DATA
      MOV DS,AX

MOV操作里面的DATA和程序开始时候的DATA是一个概念么?如过是的话是不是代表数据段的起始地址,也就是一个立即数.如果不是的话,那它们各自代表的含义是什么呢?

回复列表 (共1个回复)

沙发

取得数据段段地址,装填数据段寄存器DS,程序对数据段的访问都要以其为基址,而变量名则是偏移。
MOV AX,DATA    ;取数据段基址,DATA就是上面的数据段段名,必须一致
MOV DS,AX      ;装填DS寄存器
例如:
MyData Segment
a dw 0201h
MyData Ends
...
start: mov ax,MyData
       mov ds,ax      ;告诉CPU寻址数据时的段基址
       mov es,ax      ;告诉CPU寻址附加数据时的段基址
       lea si,a       ;取得a数据的偏移,装填si
       lea di,a       ;取得a数据的偏移,装填di
       lodsw          ;注意:该指令读取DS:[SI]的数据,要是之前不告诉CPU数据所在段?
       ...
       stosw          ;注意:写ES:{DI},假如之前没装填ES,会写到哪里去?
       ...
你仔细体会上面一段程序。

我来回复

您尚未登录,请登录后再回复。点此登录或注册