编程新手 发表于 2011-12-23 09:39:10

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

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:,
       inc bx
       loop s

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

       mov ax,4d00H
       int 21H          
code ends

end start


编译的时候就报错,我看了蛮久,都没看出哪里错了,请鱼友们指点下

编程新手 发表于 2011-12-23 09:40:15

代码段是我按实验5,第5小题的题目要求补充的,但他在C那段就报错,我试着换了一个名字,改成D,就没事,但第22行,和第30行还是报错,不知道是怎么回事,请指教

编程新手 发表于 2011-12-23 15:41:47

那个段名叫C的,我知道了,是编译器的问题,但对于s: mov es:,
出错,我也知道了,应该先把放入通用寄存器中,然后在把通用寄存器里的值送给es:,但为什么要这样做呢? es:这也叫段寄存器,不能直接放入数据?也很害羞???我以为es才是段寄存器,es:已经属于一个具体的物理内存单元了。请指教,求解惑!

ytrfamli 发表于 2011-12-23 19:54:52

这是指令规则的问题,关於mov指令的规则,当初我也是很纠结,
後来看到互联网上有一个简单的归纳,就比较少出现这样的困扰:

mov指令可以把东西:

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

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

mov es:,指令代表什麽呢?
因为预设关联段为ds,因此就是
mov es:,ds:
也就是把位在ds:bx指向的内存移到es:bx指向的内存
因此编译器会报错.

D.调dē哗丽 发表于 2011-12-23 21:53:11

楼上正解!我学到那里的时候也遇到这个问题了

谢谢
页: [1]
查看完整版本: 鱼C老师和各位鱼友进,关于实验5,我代码哪里错了