| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付赛孚耐:软件保护加密专家
身份认证令牌USB KEY   
共有 968 人关注过本帖
标题:汇编中的一个小问题
收藏  订阅  推荐  打印 
dinglxlove520
Rank: 1
等级:新手上路
帖子:1
积分:112
注册:2007-11-26
汇编中的一个小问题

各位大吓们,小弟刚学汇编很难懂,有些问题在此请教下,望各位别笑话我。
   在汇编一个程序时有这样的报错,cmp [si],'$' 有报错后来我改了一下,cmp byte ptr [si],'$'就没错了。
我不懂为什么要这样修改后才可以呢。还有 cmp [si],bx 为什么就可以呢,怎么不用加byte prt.
搜索更多相关主题的帖子: 笑话  汇编  cmp  prt  byte  
2007-11-26 18:25
wubizao
Rank: 3Rank: 3
来自:荆州长大电信
等级:中级会员
帖子:223
积分:3410
注册:2006-6-24

'$'占一个字节
而si是16位的,两个字节   //8086
cmp [si],'$'
不指明比较的数据的长度,就不知道怎么比较了
而cmp [si],bx中
si,bx都是一样位数的
不需要指明

在路上走,看见了C,从此爱上了她
2007-11-26 18:34
永夜的极光
Rank: 12Rank: 12Rank: 12
等级:版主
威望:26
帖子:2710
积分:35264
注册:2007-10-9

楼上的解释是错误的,跟si是多少位的没有关系

cmp [si],'$'
[si]指的是si指向的地址里面保存的值,因为地址都是连续的,所以你可以从这个地址读取8个字节,作为byte,也可以读取16个字节,作为word,也可以读取32个字节,作为dword
'$'这个其实等价于24H($的ASCII码),可以作为byte理解,是24H,也可以作为word理解,是0024H,也可以作为dword,是00000024H(对于常数,编译器会自动根据需要在前面补0或者截取一部分)
发现了吗,这一个语句,没办法确切的表明,你是意图用byte,word,dword这三种类型中的哪一种来操作,所以编译器会给你提示错误,用这三种类型来解释出来的机器码不同,编译器不知道选那种.

cmp byte ptr [si],'$'
这样显式的指明了要用byte方式来处理这两个操作数,那编译器就懂了

cmp [si],bx
这个不需要指明,因为编译器知道,bx是16位的,也就是word类型,那么[si]也被解释为word类型,进行比较.

[[italic] 本帖最后由 永夜的极光 于 2007-11-26 20:54 编辑 [/italic]]

从BFS(Breadth First Study)到DFS(Depth First Study)
学习VIM中,欢迎访问我的blog  http://hi.baidu.com/newkedison
严重鄙视一切把论坛当成作业生成器和人肉搜索引擎的人
2007-11-26 20:52
wubizao
Rank: 3Rank: 3
来自:荆州长大电信
等级:中级会员
帖子:223
积分:3410
注册:2006-6-24

看来俺基础不扎实,要继续努力

在路上走,看见了C,从此爱上了她
2007-11-27 08:11
kr^zHaYj
Rank: 2
等级:注册会员
帖子:41
积分:610
注册:2007-11-25

受益良多
2007-11-27 10:12
hejinjiang
Rank: 2
等级:注册会员
帖子:88
积分:1022
注册:2007-5-15

好象只要涉及内存单元之间的比较.都要加byte,word,dword这些来限制吧?
我也是刚学..

<.不怕默默无闻,就怕碌碌无为.,}
2007-11-27 11:11
dinglxlove
Rank: 1
等级:新手上路
帖子:9
积分:242
注册:2007-9-25

是不是cmp 指令 的两操作数的宽度必须一致呢。
    不然cmp [si],bx怎么就不用写成cmp word ptr [si],bx
2007-11-27 12:05
jfjfgz
Rank: 2
等级:注册会员
帖子:99
积分:1194
注册:2007-11-21

2007-11-27 14:11
永夜的极光
Rank: 12Rank: 12Rank: 12
等级:版主
威望:26
帖子:2710
积分:35264
注册:2007-10-9

原帖由 [bold][underline]hejinjiang[/underline][/bold] 于 2007-11-27 11:11 发表 [url=http://bbs.bc-cn.net/redirect.php?goto=findpost&pid=1116851&ptid=188559][/url]
好象只要涉及内存单元之间的比较.都要加byte,word,dword这些来限制吧?
我也是刚学..
我记得只有byte ptr 和word ptr这两种,没有dword ptr的

从BFS(Breadth First Study)到DFS(Depth First Study)
学习VIM中,欢迎访问我的blog  http://hi.baidu.com/newkedison
严重鄙视一切把论坛当成作业生成器和人肉搜索引擎的人
2007-11-27 18:11
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.065751 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved