鱼C老师和各位鱼友进,关于实验5,我代码哪里错了
assume cs:codea 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
编译的时候就报错,我看了蛮久,都没看出哪里错了,请鱼友们指点下 代码段是我按实验5,第5小题的题目要求补充的,但他在C那段就报错,我试着换了一个名字,改成D,就没事,但第22行,和第30行还是报错,不知道是怎么回事,请指教 那个段名叫C的,我知道了,是编译器的问题,但对于s: mov es:,
出错,我也知道了,应该先把放入通用寄存器中,然后在把通用寄存器里的值送给es:,但为什么要这样做呢? es:这也叫段寄存器,不能直接放入数据?也很害羞???我以为es才是段寄存器,es:已经属于一个具体的物理内存单元了。请指教,求解惑! 这是指令规则的问题,关於mov指令的规则,当初我也是很纠结,
後来看到互联网上有一个简单的归纳,就比较少出现这样的困扰:
mov指令可以把东西:
1.从内存移到寄存器
2.从寄存器移到内存
3.从寄存器移到寄存器
但是不能从内存移到内存.
mov es:,指令代表什麽呢?
因为预设关联段为ds,因此就是
mov es:,ds:
也就是把位在ds:bx指向的内存移到es:bx指向的内存
因此编译器会报错. 楼上正解!我学到那里的时候也遇到这个问题了
谢谢
页:
[1]