鱼C论坛

 找回密码
 立即注册
查看: 3108|回复: 6

问题8.1中的不解

[复制链接]
发表于 2011-7-25 10:53:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

不是说可以直接从内存单元传递数据到寄存器中么,[0]表示的就是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:[2]
mov ax,ds:[0]
div word ptr ds:[4]

mov ds:[6],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,[2]
mov ax,[0]
div word ptr [4]

mov [6],ax

mov ax,4c00h
int 21h
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-25 12:14:51 | 显示全部楼层
还没学到那里呢:Q
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-26 15:09:34 | 显示全部楼层
请把错误提示截图出来,我在我的机器上试没有问题!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-26 15:35:36 | 显示全部楼层
那是debug里才用[0]型式,ds:[0]才是正确的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-27 18:56:56 | 显示全部楼层
第二种的错了
30.mov dx,[2]
31.mov ax,[0]
用编译器的话,运行时debug这把这段话议成.mov dx,2.
也就是说相当于在debug里运行了mov dx,2,那结果当然是错的了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-7-29 07:03:41 | 显示全部楼层
谢谢你们,我明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-29 07:44:31 | 显示全部楼层
[0]   这个在编译器和debug中是一个意思
[2]   在编译器中是 2  在debug中是[2]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-19 02:35

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表