当前位置: 代码迷 >> 汇编语言 >> a,b,c是否可以和ds一样写为a:[0]的形式,该如何处理
  详细解决方案

a,b,c是否可以和ds一样写为a:[0]的形式,该如何处理

热度:5513   发布时间:2013-02-26 00:00:00.0
a,b,c是否可以和ds一样写为a:[0]的形式
程序如下,编写code段的代码,将a段和b段中的数据依次相加,将结果存到c段中

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   1,2,3,4,5,6,7,8
c   ends
我是一个初学者,又是在自学!

------解决方案--------------------------------------------------------
do like this:

mov ax,a
mov ds,ax ;init DS seg for segment a

... ...
------解决方案--------------------------------------------------------
请参考:
.model small
.stack
.data
x dw 1,2,3,4,5,6,7,8
y dw 1,2,3,4,5,6,7,8
z dw 1,2,3,4,5,6,7,8
w dw ?
.code
.startup
mov ax,x
add ax,y
add ax,z
mov w,ax
.exit 0
end
------解决方案--------------------------------------------------------
我也是个自学者,以下是我的拙见,请指正!
因为系统默认数据在DS所指向的数据段中,如过写成MOV AX, a[0]则系统认为变量的物理地址为DS[a+0],可是这里的a不是偏移地址,所以我觉得这样是不行的。
------解决方案--------------------------------------------------------
a:[0]的形式至少在MASM下是不行的,我不知道楼主为什么要这么指定数据。
在8086中内存地址的指定都是段地址:偏移地址的形式,你的a:[0]形式中这个a一定要有相应的段寄存器,mydo老兄跟你说的也就是这个意思。
楼主完全可以以数组的形式指定数据,就像BAYNPU老兄所说的,比如
data segment
a db 1,2
b db 1,2
c db 0,0
data ends

code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov bx,0
mov cx,2
aa:
mov al,a[bx]
add al,b[bx]
mov c[0],al
inc bx
loop aa
mov ax,4c00h
int 21h
code ends

end start
  相关解决方案