CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  其他开发语言 >  汇编语言

简单小问题

楼主wangshuaiws(宇智波.鼬)2006-03-15 09:06:29 在 其他开发语言 / 汇编语言 提问

为什么我下面的代码从有不在同一段的错误,我是用masm611编译的,同一代码,我用一个集成的编译环境编译就没错,是不是我的masm611有问题,谢谢大家帮忙!  
  0000 data   segment  
    0000   61   73   64   66   6B   20 str   db   'asdfk   lio   op'  
                6C   69   6F   20   6F   70  
    000C   =   $-str len   equ   $-str  
    000C data   ends  
    0000 code   segment  
  assume   cs:code,ds:data  
    0000 start   proc   far  
    0000     B8   ----   R mov   ax,data  
    0003     8E   D8 mov   ds,ax  
    0005 mov   cx,len  
  aaa.asm(10):   error   A2025:   operands   must   be   in   same   segment  
    0005     BE   FFFF mov   si,-1  
    0008     B0   20 mov   al,20h  
    0015 next:  
    0015     46 inc   si  
    0016     3A   84   0000   R cmp   al,str[si]  
    001A     E0   F9 loopne   next  
    001C     75   08 jne   nfind  
    001E     B2   79 mov   dl,'y'  
    0020     B4   02 mov   ah,2  
    0022     CD   21 int   21h  
    0024     EB   06 jmp   exit  
    0026 nfind:  
    0026     B2   6E mov   dl,'n'  
    0028     B4   02 mov   ah,2  
    002A     CD   21 int   21h  
    002C exit:  
    002C     B4   4C mov   ah,4ch  
    002E     CD   21 int   21h  
    0030     CB ret  
    0031 start   endp  
    0031 code   ends  
  end   start 问题点数:20、回复次数:6Top

1 楼zara(Kyrie eleison)回复于 2006-03-15 12:47:17 得分 15

将   len   equ   $-str   改为   len   =   $-str   试试Top

2 楼wangshuaiws(宇智波.鼬)回复于 2006-03-15 21:08:35 得分 0

高手很强,果然成功了,但我还是不太明白,这个程序是一本书上的,类似的把数组和字符串长度用   len   equ   $-str   的用法我在其他书上也见过,而且在初始化阶段我已经用mov   ax,data   mov   ds,ax   把段地址附好了,你怎么这样改就没错了呢?我真的想不通。Top

3 楼zara(Kyrie eleison)回复于 2006-03-15 21:46:00 得分 0

具体实际的原因我也不太清楚.   从表现来看,   可能是不同版本的编译器对   equ   和   =   后面表达式的计算时机不同.   比如在这里,   用   Masm6   的话,   equ   是在   mov   时计算的,   这样   $   在代码段,   而str   却是在数据段,   所以出现不同段的错误;   而   =   应该是在   len   被定义时就已经计算完成了,   那时   $   和   str   都是在数据段中的Top

4 楼fhb13(游途道标)回复于 2006-03-15 21:57:24 得分 5

编译器问题吧,楼主用6.14试试.  
  或是用  
  len   equ   ($-str)  
  试试  
   
  你的编译器是这样编译的  
  mov   cx,len  
  转换成如下这个样子  
  mov   cx,$-str  
  而不是  
  mov   cx,str的数目  
  Top

5 楼fhb13(游途道标)回复于 2006-03-15 22:00:39 得分 0

我用6.14编译这类的代码没问题  
  我记得要用equ替换字符是如下这个样子  
  标号   equ   <字符串>Top

6 楼wangshuaiws(宇智波.鼬)回复于 2006-03-15 22:52:12 得分 0

我试了len   equ   ($-str),还是不行,非常谢谢两位,我会继续好好学汇编的,希望有一天也能象你们一样帮助其他汇编学习者,谢谢!  
  Top

相关问题

  • 简单小问题..........
  • 简单小程序!
  • 简单小问题
  • 简单小问题~~~~
  • 简单小问题!
  • 简单小问题
  • 简单小问题,
  • 简单的小问题
  • 简单的小问题
  • 简单的小问题啊!

关键词

  • 编译器
  • 代码
  • ds
  • start
  • code
  • equ
  • mov
  • 试试
  • 谢谢
  • masm

得分解答快速导航

  • 帖主:wangshuaiws
  • zara
  • fhb13

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo