百思不得其解错在哪里的汇编
编译时 竟然第一句就错了assume cs:code,ds:data,ss:stack
data segment
dw1,2,3,4,5,6,7,8,9
data ends
stack segment
dw 0,0,0,0,0,0,0,0,0
stack ends
code segment
start:mov ax,b
mov ss,ax
mov sp,009H
mov ax,a
mov ds,ax
mov bx,0
mov cx,8
s: push ds:
add bx,2
loop s
code ends
end start 应该是mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax 吧
怎没会是a,b呢?你也没有标号啊 augustus 发表于 2012-8-19 21:17 static/image/common/back.gif
应该是mov ax,data
mov ds,ax
mov ax,stack
谢谢你,是我疏忽了。但是我改过之后,编译还是报错。第一段就提示错误 start:mov ax,b
mov ss,ax
mov sp,009H
mov ax,a
mov ds,ax
mov bx,0
mov cx,8
s: push ds:
add bx,2
loop s
让我们来分析分析你的代码。首先,从程序开始处start:
mov ax,b 我不知道你这个b是哪来的,我猜你是想设置栈段是不?,所以应该改成mov ax,stack
mov ss,ax 这句没错
mov sp,009h 这句应该是设置栈顶,可你指错地方了,根据你前面的内容,你把栈设置成了18个字节,也就是你所写的9个0
我不知道你为什么要写9个0,可能是手误多打了一个0,那么既然是9个0,sp就应该指向12h,怕你不明白,
特地配张图,那样更能直观的表现出来,图:http://ww1.sinaimg.cn/mw690/92c7cb9bgw1dw36dy2oegj.jpg
好,我们继续向下分析。
mov ax,a 我又纳闷了,不知道你这个a是哪来的。我猜你是想设置数据段的是不?
应该改成 mov ax,data就好了
mov bx,0 这句没问题
mov cx,8 设置循环次数为8,但你前面数据段有9个数字,次数不够,所以应该改为
mov cx,9
s: push ds:
add bx,2
loop s 这几句都没问题。
好了,总结如下。你应该对什么是标号和标号是干什么的可能没有理解。
下面是我修改后的代码,你用debug单步调试看看,注意用d ss:12和d ds:0 命令来查看栈中的数据和数据段中的数据。
assume cs:code,ds:data,ss:stack
data segment
dw1,2,3,4,5,6,7,8,9
data ends
stack segment
dw 0,0,0,0,0,0,0,0,0
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,0012H ;设置栈段
mov ax,data
mov ds,ax
mov bx,0 ;设置数据段
mov cx,9 ;循环9次
s: push ds:
add bx,2
loop s
code ends
end start
xuechong 发表于 2012-8-20 14:58 static/image/common/back.gif
谢谢你,是我疏忽了。但是我改过之后,编译还是报错。第一段就提示错误
C:\Users\ZLM\Desktop\1.png
我在虚拟机上编译通过了,而且就算sp有错误也不会影响编译通过啊! augustus 发表于 2012-8-20 17:03 static/image/common/back.gif
我在虚拟机上编译通过了,而且就算sp有错误也不会影响编译通过啊!
你在试试这个呢,难道我的编译器出错了
assume cs:code,ds:data
data segment
db 'welcome tomasm!' ;声明地址所存放的数据
db '................' ;将要存放的目标地址
data ends
code segment
start: mov ax,data ;
mov ds,ax ;把段地址设为data
mov bx,0 ;偏移地址si设为0
mov cx,8 ;循环次数8
s: mov ax,0 ;
mov 16,ax ;把(ds:si)放进(ds:(16+si))中
add bx,2 ;每次路过此处,si递增2
loop s
mov 4c00H
int 21H
code ends
end start
如果。。。 发表于 2012-8-20 15:31 static/image/common/back.gif
start:mov ax,b
mov ss,ax
mov sp,009H
非常感谢,你猜的一点都没错。是我太粗心了 augustus 发表于 2012-8-19 21:17 static/image/common/back.gif
应该是mov ax,data
mov ds,ax
mov ax,stack
是我太粗心了,其实是code和data 谢谢你 如果。。。 发表于 2012-8-20 15:31 static/image/common/back.gif
start:mov ax,b
mov ss,ax
mov sp,009H
非常感谢,你猜的一点都没错。是我太粗心了 augustus 发表于 2012-8-19 21:17 static/image/common/back.gif
应该是mov ax,data
mov ds,ax
mov ax,stack
嘿嘿 是的。我粗心了 augustus 发表于 2012-8-20 17:03 static/image/common/back.gif
我在虚拟机上编译通过了,而且就算sp有错误也不会影响编译通过啊!
问题解决了。谢谢你们
页:
[1]