注册 登录
编程论坛 汇编论坛

[求助]求教有一道简单的编程题不知问题是出在哪里

syb8888 发布于 2006-07-30 08:49, 653 次点击

data1 segment
aa DB dup(10)
data1 ends

stack segment stack
db 100 dup(0)
stack ends

code segment
assume cs:code;ds:data1;ss:stack
start:
mov ax,data1
mov ds,ax
xor ax,ax
mov bx,ax
mov cx,10
don: mov al,[aa+bx]
inc bx
loop don
code ends
end start
在编译时一直有错

3 回复
#2
yuki2006-07-30 10:04
以下是引用syb8888在2006-7-30 8:49:54的发言:

data1 segment
aa DB dup(10) ;这里没有指定aa的大小,或许可以改为aa db 10 dup(0)
data1 ends

stack segment stack ;这里会发生警告原因是stack是编译器的保留字
db 100 dup(0) ;16位程序,栈的每个单元是2个字节,也就是一个字吧,最好定义成dw类型
stack ends

code segment
assume cs:code;ds:data1;ss:stack ;语法问题,不要用分号隔开,用逗号
start:
mov ax,data1
mov ds,ax
xor ax,ax ;上面错误改正后可以编译,但我觉得程序上有问题,可能会崩溃,ax到这里应该存放的是ds的段地址吧,那么取个异或变成0000H那么移入bx后再用间接访问内存好像会有问题。
mov bx,ax
mov cx,10
don: mov al,[aa+bx]
inc bx
loop don
code ends
end start
在编译时一直有错

[此贴子已经被作者于2006-7-30 10:25:43编辑过]

#3
syb88882006-07-30 10:22

谢谢

#4
rodney2006-07-30 15:44
堆栈定义有问题,况且你还要把堆栈赋值给ss段.不然可以不用定义的.
堆栈定义:
[CODE]
stack segment stack
dw 100 dup(0)
tos label word
stack ends
[/CODE]
代码段可以这样写:
[CODE]
code segment
assume cs:code;ds:data1;ss:stack
start:
mov ax,stack
mov ss,ax
lea sp,tos
push ds
xor ax,ax
push ax
mov ax,data1
mov ds,ax
mov bx,ax
mov cx,10
don: mov al,[aa+bx]
inc bx
loop don
ret
code ends
end start
[/CODE]
1