鱼C论坛

 找回密码
 立即注册
查看: 2697|回复: 4

鱼C老师和各位鱼友进,关于实验5,我代码哪里错了

[复制链接]
发表于 2011-12-23 09:39:10 | 显示全部楼层 |阅读模式

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

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

x
assume cs:code

a segment
  db 1,2,3,4,5,6,7,8
a ends

b segment
  db 1,2,3,4,5,6,7,8
b ends

c segment
  db 0,0,0,0,0,0,0,0
c ends

code segment
start: mov ax,a
       mov ds,ax
           mov ax,c
           mov es,ax
           mov bx,0
           mov cx,8
        s: mov es:[bx],[bx]
       inc bx
       loop s

       mov ax,b
       mov ds,ax
       mov bx,0
       mov cx,8
   s1: add es:[bx],[bx]
       inc bx
       loop s1

       mov ax,4d00H
       int 21H          
code ends

end start


编译的时候就报错,我看了蛮久,都没看出哪里错了,请鱼友们指点下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-23 09:40:15 | 显示全部楼层
代码段是我按实验5,第5小题的题目要求补充的,但他在C那段就报错,我试着换了一个名字,改成D,就没事,但第22行,和第30行还是报错,不知道是怎么回事,请指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-12-23 15:41:47 | 显示全部楼层
那个段名叫C的,我知道了,是编译器的问题,但对于s: mov es:[bx],[bx]
出错,我也知道了,应该先把[bx]放入通用寄存器中,然后在把通用寄存器里的值送给es:[bx],但为什么要这样做呢? es:[bx]这也叫段寄存器,不能直接放入数据?也很害羞???我以为es才是段寄存器,es:[bx]已经属于一个具体的物理内存单元了。请指教,求解惑!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-23 19:54:52 | 显示全部楼层
这是指令规则的问题,关於mov指令的规则,当初我也是很纠结,
後来看到互联网上有一个简单的归纳,就比较少出现这样的困扰:

mov指令可以把东西:

1.从内存移到寄存器
2.从寄存器移到内存
3.从寄存器移到寄存器

但是不能从内存移到内存.

mov es:[bx],[bx]指令代表什麽呢?
因为[bx]预设关联段为ds,因此就是
mov es:[bx],ds:[bx]
也就是把位在ds:bx指向的内存移到es:bx指向的内存
因此编译器会报错.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-12-23 21:53:11 | 显示全部楼层
楼上正解!我学到那里的时候也遇到这个问题了

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-22 08:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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