首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

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

2012-02-22 
a,b,c是否可以和ds一样写为a:[0]的形式程序如下,编写code段的代码,将a段和b段中的数据依次相加,将结果存到

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

热点排行