您尚未登录。

楼主 #1 2018-09-04 16:09:29

daydayup
会员
注册时间: 2017-10-09
已发帖子: 343
积分: 343

X86 指令地址为什么没有对齐?是为了节省空间,还是有其他原因?

X86 指令地址为什么没有对齐?是为了节省空间,还是有其他原因?

离线

#2 2018-09-04 18:04:28

alexyzhov
会员
注册时间: 2018-09-04
已发帖子: 2
积分: 3

Re: X86 指令地址为什么没有对齐?是为了节省空间,还是有其他原因?

因为x86指令集在设计的时候就没有固定长度吧,印象中是这样。微架构上还需要一个译码环节,将CISC风格的机器码转换成规整的RISC风格指令执行,此时的指令应该就是定长并且对齐,方便处理器前端的取指了

离线

楼主 #3 2018-09-04 18:14:29

daydayup
会员
注册时间: 2017-10-09
已发帖子: 343
积分: 343

Re: X86 指令地址为什么没有对齐?是为了节省空间,还是有其他原因?

alexyzhov 说:

因为x86指令集在设计的时候就没有固定长度吧,印象中是这样。微架构上还需要一个译码环节,将CISC风格的机器码转换成规整的RISC风格指令执行,此时的指令应该就是定长并且对齐,方便处理器前端的取指了

那就是说 x86 带着历史包袱?
理论上如果对齐的话,效率应该更高吧?

离线

#4 2018-09-05 09:26:46

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,223
积分: 9197

Re: X86 指令地址为什么没有对齐?是为了节省空间,还是有其他原因?

http://www.formosaos.url.tw/my8051/8051_execute.html

五、指令抓取範例
8051的指令屬於複雜指令集架構(cisc),指令的長度不一定一樣。當8051抓取的指令的第一個機械碼的時候,就要解出後面還有幾個參數要抓取,並進行抓取的動作。每次指令抓取(fetch)的時間應該是2 clock,我以nop、ajmp、ljmp這3個指令來解釋8051指令的抓取與執行。

ins_exec16.jpg



指令nop是一個1 byte的無動作指令,8051必須先到 ROM中抓取指令,這個指令抓取需要2 clocks。之後,在8051裡面花10 clocks 執行該指令。這樣的過程總共需要12clocks。

指令ajmp是一個2 bytes的跳躍指令,8051必須到先到ROM中抓取指令。因為匯流排是8位元,所以必須抓兩次,需要4 clocks。之後,在8051裡面再花20 clocks執行該指令。共需要24clocks。

指令ljmp是一個3bytes的跳躍指令,8051必須到先到ROM中抓取指令。因為匯流排是8位元,所以必須抓三次,需要6 clocks。之後,在8051裡面再花20clocks執行該指令。共需要24clocks。

如果我們想要到一個ajmp可以到達的地方卻用ljmp去寫的話,雖然結果都一樣,但是ljmp會花費更多的程式碼去執行這樣的指令。





离线

#5 2019-05-07 10:05:55

凿子树
会员
注册时间: 2017-10-17
已发帖子: 19
积分: 19

Re: X86 指令地址为什么没有对齐?是为了节省空间,还是有其他原因?

daydayup 说:
alexyzhov 说:

因为x86指令集在设计的时候就没有固定长度吧,印象中是这样。微架构上还需要一个译码环节,将CISC风格的机器码转换成规整的RISC风格指令执行,此时的指令应该就是定长并且对齐,方便处理器前端的取指了

那就是说 x86 带着历史包袱?
理论上如果对齐的话,效率应该更高吧?

现代CPU是整段整段的读进CPU的,不是一条一条的读的,所以对不对齐效率都一样高。指令译码时已经指令是对齐的了。

离线

#6 2020-01-11 14:42:08

凿子树
会员
注册时间: 2017-10-17
已发帖子: 19
积分: 19

Re: X86 指令地址为什么没有对齐?是为了节省空间,还是有其他原因?

现代存储技术,指令的对齐与否不重要。
相对于主板,硬盘是块设备,相对于CPU,DDRx是块设备(CPU是整块整块的从DDR里读进的)。CPU内部,还有一个翻译器,把X86指令变成对齐的指令,其实最简单的办法就是直接填充0就可以,也可以用几条指令替换。到这里,才是真正的原始的计算机了,直接对指定地址内的指令操作(显然这小块“内存”是个滑动的窗口)。

最近编辑记录 凿子树 (2020-01-11 14:45:59)

离线

#7 2020-01-11 14:47:22

天马行空
会员
注册时间: 2019-11-12
已发帖子: 57
积分: 57

Re: X86 指令地址为什么没有对齐?是为了节省空间,还是有其他原因?

@凿子树 相当专业!

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn