鱼C论坛

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

问题8.1中的不解

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

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

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

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

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

  13. mov ds:[6],ax

  14. mov ax,4c00h
  15. int 21h
  16. code ends
  17. end start
  18. 第二种形式:
  19. assume cs:code,ds:data
  20. data segment
  21. dd 100001
  22. dw 100
  23. dw 0
  24. data ends
  25. code segment
  26. start: mov ax,data
  27. mov ds,ax
  28. mov dx,[2]
  29. mov ax,[0]
  30. div word ptr [4]

  31. mov [6],ax

  32. mov ax,4c00h
  33. int 21h
  34. code ends
  35. 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-4-25 19:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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