tmlnsc 发表于 2011-7-25 10:53:03

问题8.1中的不解

本帖最后由 weixianlang 于 2011-7-26 15:06 编辑

不是说可以直接从内存单元传递数据到寄存器中么,表示的就是ds段中偏移地址为0的单元中的内容么?那么下面两段代码的作用应该是一样的啊,但是,实际上结果大不相同,要完成8.1的任务就只能用第一种形式,加上段前缀,第二种没加段前缀就出错了,这是为什么呢?
第一种形式:
assume cs:code,ds:data
data segment
dd 100001
dw 100
dw 0
data ends
code segment
start: mov ax,data
mov ds,ax
mov dx,ds:
mov ax,ds:
div word ptr ds:

mov ds:,ax

mov ax,4c00h
int 21h
code ends
end start
第二种形式:
assume cs:code,ds:data
data segment
dd 100001
dw 100
dw 0
data ends
code segment
start: mov ax,data
mov ds,ax
mov dx,
mov ax,
div word ptr

mov ,ax

mov ax,4c00h
int 21h
code ends
end start

tcwz 发表于 2011-7-25 12:14:51

还没学到那里呢:Q

weixianlang 发表于 2011-7-26 15:09:34

请把错误提示截图出来,我在我的机器上试没有问题!

死亡请帖 发表于 2011-7-26 15:35:36

那是debug里才用型式,ds:才是正确的。

??? 发表于 2011-7-27 18:56:56

第二种的错了
30.mov dx,
31.mov ax,
用编译器的话,运行时debug这把这段话议成.mov dx,2.
也就是说相当于在debug里运行了mov dx,2,那结果当然是错的了

tmlnsc 发表于 2011-7-29 07:03:41

谢谢你们,我明白了

Be_envious 发表于 2011-7-29 07:44:31

   这个在编译器和debug中是一个意思
   在编译器中是 2在debug中是
页: [1]
查看完整版本: 问题8.1中的不解