以下是引用小兵打将在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 编辑 ]