+ -
当前位置:首页 → 问答吧 → 请教一下关于汇编数组的问题 ?

请教一下关于汇编数组的问题 ?

时间:2010-12-21

来源:互联网

我正学习汇编,用masm,在数据段中定义了
  array dw 22,8,16
  然后在代码段里试着用了三种方式调用:
  mov ax,array
  mov bx,array+2
  mov dx,array+4

  mov ax,[array]
  mov bx,[array+2]
  mov dx,[array+4]

  mov ax,array
  mov bx,array[2]
  mov dx,array[4]
就是想把三个数分别挪到ax,bx,dx中,怎么都有错误,直接改为
  mov ax,22
  mov bx,8
  mov dx,16
程序是正确的,请问一下,正确的应该怎么写,错在哪儿?

作者: wintersky2009   发布时间: 2010-12-21

assume cs:code
code segment
start:
xor ax,ax
push ds
push ax
push cs
pop ds
mov bx,offset array
mov ax,[bx]
mov cx,[bx+4]
mov bx,[bx+2]
ret
code ends
array dw 22,8,16
end start

作者: va_zaixuexi   发布时间: 2010-12-21

data segment
 array dw 22,8,16
data ends
在代码段里,先 要声明DS段
mov ax,data
mov ds,ax
mov si,offset array ;指向数组首地址
mov ax,[si]
mov bx,[si+2]
mov dx,[si+4]

作者: masmaster   发布时间: 2010-12-21

引用楼主 wintersky2009 的回复:
我正学习汇编,用masm,在数据段中定义了
array dw 22,8,16
然后在代码段里试着用了三种方式调用:
mov ax,array
mov bx,array+2
mov dx,array+4

mov ax,[array]
mov bx,[array+2]
mov dx,[array+4]

mov ax,array
mov……

这三种写法都对.

但要先用assume将你的数据段关联到DS,再把段地址送给DS后。

作者: shzhfu   发布时间: 2010-12-21