gongheng 发表于 2011-9-25 11:50:19

实验5编程求助

本帖最后由 gongheng 于 2011-9-27 00:01 编辑

下面是我编写的课本136页(5)的编程题,但是编译通不过,给出了这样的错误提示:
s6.asm(10) : error A2008: syntax error : c
s6.asm(11) : error A2034: must be in segment block
s6.asm(12) : error A2008: syntax error : c
s6.asm(21) : error A2070: invalid instruction operands
s6.asm(24) : error A2008: syntax error : c
s6.asm(28) : error A2070: invalid instruction operands
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,b
      mov es,ax
      mov bx,0
      mov cx,8
s:      add ds:,es:
      inc bx
      loop s
      
      mov ax,c
      mov es,ax
      mov bx,0
      mov cx,8
s0:      mov es:,ds:
      inc bx
      loop s0
      mov ax,4c00h
      int 21h
      
code ends
end start

kmjstv 发表于 2011-9-25 13:16:02

偶还没看到,你看的好快

cqy55555 发表于 2011-9-25 13:20:33

add ds:,es:
mov es:,ds:
两个操作数不能全部是存储器操作数

gongheng 发表于 2011-9-25 14:29:50

哦,对哈,谢谢cqy55555!还有前面第10行哪里有问题呢?

topcookie 发表于 2011-9-25 15:46:24

你定义的C段没有用啊,另外应该加上assume cs:code ds:a es:b
C段你是想定义堆栈段的吧,程序中不是一定要有堆栈段,像你这个程序就没有用到堆栈完全不必定义

gongheng 发表于 2011-9-26 14:00:13

先谢谢topcookie的回答,我是想把a段和b段相加,然后把结果放到c段中去,但是编译器说我语法错误,不知道是怎么回事!

topcookie 发表于 2011-9-26 14:49:13

因为你的C段没有分配空间啊,要用assume伪指令,另外说下你现在的那两个循环完全可以放在一个循环体内完成,作完相加运算后直接放回C空间中,不必要有两个循环体,这样程序编译后文件本身占空间较多,再者执行效率不高

tsembrace 发表于 2011-9-26 15:49:18

除了上面所说的,另外你C段的名称换一下,换成d或其他
好像段名称设成c会有这样的问题。

gongheng 发表于 2011-9-26 22:06:38

谢谢楼上两位的指点,我感觉用汇编怎么就比用c要别扭,再次谢谢你们的解答,我再看看前面的知识,感觉掌握的不好!
页: [1]
查看完整版本: 实验5编程求助