鱼C论坛

 找回密码
 立即注册
查看: 2120|回复: 10

百思不得其解错在哪里的汇编

[复制链接]
发表于 2012-8-19 18:48:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
编译时 竟然第一句就错了


assume cs:code,ds:data,ss:stack  
data segment
      dw  1,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:[bx]
                  add bx,2
                  loop s
   code ends
   end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-19 21:17:22 | 显示全部楼层
应该是mov ax,data
          mov ds,ax
          mov ax,stack
          mov ss,ax   吧
怎没会是a,b呢?你也没有标号啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-20 14:58:41 | 显示全部楼层

谢谢你,是我疏忽了。但是我改过之后,编译还是报错。第一段就提示错误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-20 15:31:06 | 显示全部楼层
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:[bx]
     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,怕你不明白,
                        特地配张图,那样更能直观的表现出来,图:

                               
登录/注册后可看大图

好,我们继续向下分析。
mov ax,a      我又纳闷了,不知道你这个a是哪来的。我猜你是想设置数据段的是不?
                     应该改成   mov ax,data就好了
mov bx,0       这句没问题
mov cx,8       设置循环次数为8,但你前面数据段有9个数字,次数不够,所以应该改为
                     mov cx,9
s:    push ds:[bx]
                    add bx,2
                    loop s          这几句都没问题。
好了,总结如下。你应该对什么是标号和标号是干什么的可能没有理解。
下面是我修改后的代码,你用debug单步调试看看,注意用d ss:12和d ds:0 命令来查看栈中的数据和数据段中的数据。
assume cs:code,ds:data,ss:stack  
data segment 
      dw  1,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:[bx]
          add bx,2
          loop s
code ends
end start 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2012-8-20 17:03:36 | 显示全部楼层
xuechong 发表于 2012-8-20 14:58
谢谢你,是我疏忽了。但是我改过之后,编译还是报错。第一段就提示错误

C:\Users\ZLM\Desktop\1.png
我在虚拟机上编译通过了,而且就算sp有错误也不会影响编译通过啊!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-21 08:47:06 | 显示全部楼层
augustus 发表于 2012-8-20 17:03
我在虚拟机上编译通过了,而且就算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[bx]       ;
       mov 16[bx],ax      ;把(ds:si)放进(ds:(16+si))中
           add bx,2           ;每次路过此处,si递增2
           loop s
           mov 4c00H
           int 21H
code ends
end start      
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-21 08:58:30 | 显示全部楼层
如果。。。 发表于 2012-8-20 15:31
start:  mov ax,b
           mov ss,ax
     mov sp,009H

非常感谢,你猜的一点都没错。是我太粗心了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-21 08:59:06 | 显示全部楼层
augustus 发表于 2012-8-19 21:17
应该是mov ax,data
          mov ds,ax
          mov ax,stack

是我太粗心了,其实是code和data 谢谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-21 09:00:14 | 显示全部楼层
如果。。。 发表于 2012-8-20 15:31
start:  mov ax,b
           mov ss,ax
     mov sp,009H

非常感谢,你猜的一点都没错。是我太粗心了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-21 09:54:03 | 显示全部楼层
augustus 发表于 2012-8-19 21:17
应该是mov ax,data
          mov ds,ax
          mov ax,stack

嘿嘿 是的。我粗心了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2012-8-21 09:54:53 | 显示全部楼层
augustus 发表于 2012-8-20 17:03
我在虚拟机上编译通过了,而且就算sp有错误也不会影响编译通过啊!

问题解决了。谢谢你们
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-26 11:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表