鱼C论坛

 找回密码
 立即注册
查看: 3920|回复: 14

【汇编:在运算时默认单位都是“字节”吗】

[复制链接]
发表于 2018-3-25 11:02:28 | 显示全部楼层 |阅读模式

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

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

x
比如:ip = ip + 2
这里ip增加了【2】,这个2的单位就是【2*一个字节=2个字节】吗?由此推及汇编中所有运算,是否只要不说都是默认单位是“字节”吗??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-25 11:11:33 | 显示全部楼层
一个存储单位是8位  8位=1个字节, 1个字 = 2个字节。  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-25 11:31:17 | 显示全部楼层
汇编都是按字节为单位的,包括C语言等高级语言。
你说的 ip + 2,就是说在原 ip 指向的地址位置,被放了2字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-25 11:55:46 | 显示全部楼层
你这个理解不太对,实际IP = IP + 2,相当于是IP对应的偏移地址加2,而每个地址单元存放的是一个字节的数据

所以,如果他是相当于地址加了2,不是说2的单位就是2个字节,不知道你理解了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-25 17:27:27 | 显示全部楼层
就拿栈顶指针SP来说吧:每次PUSH一个值进栈,SP会自动减二,这里的二的单位不就是「字节」吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-26 15:29:08 | 显示全部楼层
本帖最后由 兰陵月 于 2018-3-26 15:31 编辑
ABC23 发表于 2018-3-25 17:27
就拿栈顶指针SP来说吧:每次PUSH一个值进栈,SP会自动减二,这里的二的单位不就是「字节」吗?


理解错误,减2是地址值减2,在8086汇编里,地址是20位,在32位系统里,地址是32位的。

比如当前栈顶的地址是0x00000008,减2以后,栈顶的地址变成了0x00000006.

它每次操作和运算的基本单元(除一些特殊操作指令)都是16位的、或者32位的、64位的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-26 16:00:00 | 显示全部楼层
兰陵月 发表于 2018-3-26 15:29
理解错误,减2是地址值减2,在8086汇编里,地址是20位,在32位系统里,地址是32位的。

比如当前栈顶 ...

这么说减二的单位就是「int」了??
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-26 20:08:27 | 显示全部楼层
我也是初学者 我认为  (内存偏移地址默认是一个字节 )  你+2  就是把一个字的数据 给复制过去  建议你还是在看两遍教程比较好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-26 22:10:01 | 显示全部楼层
ABC23 发表于 2018-3-26 16:00
这么说减二的单位就是「int」了??

你这些表述都是不准确的,汇编里面没有int类型,它只有16位、32位、64位的说法。
32、64是16的超集。
以你说的减2为例,在32位系统里,0x00000008减2,就是0x00000008-0x00000002,这个2,就是0x00000002。教科书里表述是减2,但是作为CPU来说,虽然是一个简单的2,它仍然是一套复杂电路计算出来的。

如果你要搞懂这个问题,那就要从计算机诞生的前世今生慢慢来说,这个就内容太多了。

你要知道,ALU算出来的结果是2,但实际上就是电路信号的组合,所以它不可能仅仅是8位的2,或者16位的2,或者32位的,而是以最高数据带宽来具体定的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-26 22:12:51 | 显示全部楼层
ABC23 发表于 2018-3-26 16:00
这么说减二的单位就是「int」了??

我暂时还未弄清楚,你要明白这个为何?意义不大。

不过最关键的一点,你不能从人的常识角度(也就是平时我们学的自然数学)去看待这些问题,而是要从计算机的角度,0和1以及它们的组合这个角度去理解计算的任何一种操作。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2018-3-27 09:05:38 | 显示全部楼层
本帖最后由 ABC23 于 2018-3-27 09:16 编辑

楼上说的似乎也太把自己当回事了。学习过程中难免会有问题,有问题你又不正面解决,到现在还没弄懂只能说明你学艺不精;你自己搞不懂的问题请不要妄加于他人,以为别人都是和你一样只求一知半解,到头来只能掌握一些肤浅的东西,永远没有创新(再次请别喷,我说的是事实)。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2018-3-28 15:41:07 | 显示全部楼层
本帖最后由 兰陵月 于 2018-3-28 15:45 编辑
ABC23 发表于 2018-3-27 09:05
楼上说的似乎也太把自己当回事了。学习过程中难免会有问题,有问题你又不正面解决,到现在还没弄懂只能说明 ...


呵呵,不好意思,学艺不精,没想到会给你这个印象~

哈哈哈,看来我是一个非常愚蠢的人,自作聪明~受教了~

多谢教诲。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-30 15:46:04 | 显示全部楼层
兰陵月 发表于 2018-3-28 15:41
呵呵,不好意思,学艺不精,没想到会给你这个印象~

哈哈哈,看来我是一个非常愚蠢的人,自作聪明~受 ...

Jeep 同学只是想让楼主换个角度看问题。看来被误解了
具体汇编用多少位,我觉得一是指定,比如操作内存的时候,同样一个数,可以占用一个到n个字节,二是看寄存器的位数,取默认值。
不当之处,请多批评,共同进步
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-2 11:48:51 | 显示全部楼层
erh 发表于 2018-3-30 15:46
Jeep 同学只是想让楼主换个角度看问题。看来被误解了
具体汇编用多少位,我觉得一是指定,比如 ...

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-5 16:52:20 | 显示全部楼层
我觉得你的理解没错啊,寻址的时候寻到的都是一个字节,读写操作也都是以字节为单位,这些连续的字节排在内存中,编上连续的号,ip从从一个字节指向另一个字节,编号不断的改变。没毛病啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-12-29 04:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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