以下是引用小兵打将在2011-8-27 16:42:50的发言:
我要把a中的数据与b中的数据相加后赋值给d中的数据,,代码如下,哪里出错了
assume cs:code,ds:a,ss:b,es:d
a segment
    dw 1,2,3,4,5,6,7,8
a ends
b segment 
    dw 2,3,4,4,5,6,7,8
b ends
d segment
    dw 0,0,0,0,0,0,0,0
d ends
code segment
start: 
       mov bx,0
       mov cx,8
     s:mov ax,ds:
       add ax,ss:
       add es:,ax
       add bx,2
       loop s
       mov ax,4c00h
       int 21h
code ends
end start
       
assume cs:code,ds:a,ss:b,es:d
a segment
    dw 1,2,3,4,5,6,7,8
a ends
b segment 
    dw 2,3,4,4,5,6,7,8
b ends
d segment
    dw 0,0,0,0,0,0,0,0
d ends
code segment
【assume cs:code,ds:a,ss:b,es:d】这句的意思是 假设 CS是code
  ds是a ss是b es是d
  假设的不可信
 
  而且
这些是伪指令
  CPU认不出来。 A DW定义的1,2,3,4,5,6,7,8定义到什么地方 我们不知道
  编译器知道
     编译器会把A翻译成一个段地址 偏移为0 顺序存放这些数据 这道题目是让你把A定义的1,2,3,4,5,6,7,8 + B DW2,3,4,4,5,6,7,8 这是数据相加 那么肯定是用DS指向这里
既然编译器会把A翻译成一个段地址 你把这个地址先给mov ax,a 然后mov ds,ax 那么DS和A就相等了
  他们指向同一个地址
   这样那个A 定义的DW 12345678 就能正确的找到了
  就可以++ --了
我才学到第7章
  以个人的理解 只能帮到这些了
 
[
 本帖最后由 ganbikai 于 2011-8-27 23:34 编辑 ]