搜索
编程论坛
→
开发语言
→
『 汇编论坛 』
→ 新学汇编,问个问题
标题:
新学汇编,问个问题
只看楼主
assassion123
等 级:
论坛游民
帖 子:11
专家分:11
注 册:2012-11-14
结帖率:
100%
楼主
已结贴
√
问题点数:20 回复次数:7
新学汇编,问个问题
sub ax,ax的机器码为2个字节
mov ax,0的机器码为3个字节
能解释下么?
2012-11-14 10:44
zklhp
来 自:china
等 级:
贵宾
威 望:
254
帖 子:11485
专家分:33241
注 册:2007-7-10
第
2
楼
得分:20
以下是引用
assassion123
在2012-11-14 10:44:23的发言:
sub ax,ax的机器码为2个字节
mov ax,0的机器码为3个字节
能解释下么?
-a
0B9F:0100 sub ax,ax
0B9F:0102 mov ax,0
0B9F:0105
-u
0B9F:0100 29C0 SUB AX,AX
0B9F:0102 B80000 MOV AX,0000
以上是最好的解释
为啥呢 因为这里mov ax, 0实际要和ax大小一致 所以实际是mov ax, 0000 所以反而大
2012-11-14 10:54
assassion123
等 级:
论坛游民
帖 子:11
专家分:11
注 册:2012-11-14
第
3
楼
得分:0
回复 2楼 zklhp
"因为这里mov ax, 0实际要和ax大小一致 所以实际是mov ax, 0000 所以反而大"
在下愚钝,这句话不是很理解,还有是不是用"mov"时cs:ip的跳转为间隔是3,"sub"时间隔是2?
[
本帖最后由 assassion123 于 2012-11-15 13:08 编辑
]
2012-11-15 09:41
lyloog
等 级:
新手上路
帖 子:3
专家分:0
注 册:2012-11-15
第
4
楼
得分:0
时间间隔要看指令的而执行时间的
2012-11-15 13:20
hu9jj
来 自:红土地
等 级:
贵宾
威 望:
396
帖 子:11713
专家分:43267
注 册:2006-5-13
第
5
楼
得分:0
这是CPU指令系统设计的时候确定的,指令的字节长度不完全一样,有双字节指令,也有大于双字节的指令。
sub ax,ax 是寄存器内的数据运算,所以两个字节就可以表示。
mov ax,0 是立即数与寄存器两者之间的数据运算(赋值运算),因为还需要两个字节来存放立即数0,所以指令的长度会大于2.
活到老,学到老! http://www. E-mail:hu-jj@
2012-11-15 14:24
有容就大
来 自:东土大唐
等 级:
版主
威 望:
74
帖 子:9048
专家分:14309
注 册:2011-11-11
第
6
楼
得分:0
回复 5楼 hu9jj
mov al, 0呢?
梅尚程荀
马谭杨奚
2012-11-16 00:03
assassion123
等 级:
论坛游民
帖 子:11
专家分:11
注 册:2012-11-14
第
7
楼
得分:0
回复 5楼 hu9jj
对啊,那为什么“mov al,0”Ip的变化是2不是3呢?
2012-11-16 08:33
小石汇编
等 级:
新手上路
帖 子:3
专家分:7
注 册:2012-11-5
第
8
楼
得分:0
红土地:这是CPU指令系统设计的时候确定的,指令的字节长度不完全一样,有双字节指令,也有大于双字节的指令。
sub ax,ax 是寄存器内的数据运算,所以两个字节就可以表示。
mov ax,0 是立即数与寄存器两者之间的数据运算(赋值运算),因为还需要两个字节来存放立即数0,所以指令的长度会大于2.
*******
ax是两个字节,从而硬性的规定了mov ax,0中的0是双字节了,
同时mov al,0的al是单字节,那么mov al,0中的0是单字节。
2012-11-21 18:19
8
1/1页
1
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-387003-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 0.106445 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved