为什么assume了DS以后,在代码里面还要再次mov ax,data;mov ds,ax呢?

hjklasdfgl 2011-04-20 12:56:19
感觉assume了以后,就不再需要去mov这个DS寄存器的值了吧。
为什么代码里面我还是常常看到:

STACK SEGMENT STACK
DB 64 DUP(?)
STACK ENDS
DATA SEGMENT
DB 06H,12H,88H,82H,90H,22H,33H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,SS:STACK,DS:DATA
START:MOV AX,DATA
MOV DS,AX
MOV DI,0000H
MOV CL,[DI]
XOR CH,CH
MOV BL,CH
INC DI
A1: MOV AL,[DI]
TEST AL,80H
JE A2
INC BL
A2: INC DI
LOOP A1
MOV [DI],BL
MOV AX,4C00H
INT 21H
CODE ENDS
END START

...全文
696 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzkgzanst 2011-12-24
  • 打赏
  • 举报
回复 2
MOV AX,DATA
这句指令中是把什么东西赋给了AX呢???
xiaoD 2011-04-20
  • 打赏
  • 举报
回复 2
嗯 楼上说的对。汇编语言有三类指令:(1)汇编指令,如mov ax,0等,有对应的机器码;(2)伪指令,如assume,db等,由编译器执行,计算机并不执行,没有对应机器码;(3)其他符号,如+、-等,由编译器识别,没有对应机器码。所以,assume只是给编译器一个信息,告诉编译器相关段寄存器和段的联系。但是,计算机并不执行它,要想真正将段地址存放到相关段寄存器中,需要用汇编指令来完成。
zara 2011-04-20
  • 打赏
  • 举报
回复 2
这里的 assume 语句是告诉编译器各个段是由哪个段寄存器指向的,这样编译器就可以根据所设定的条件在需要时加上段前缀指令;它并不生成对段寄存器进行设置的指令,这个是需要程序自己来做的。所以,就有了 assume 语句之后,代码里自己设置相应的段寄存器。

21,499

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧