2015-04-06 115 views
-1

我一直在嘗試使用Hacking:Art of Deception書來學習彙編和編程。它有一個很棒的編程部分,可以讓你更好地理解程序的內部工作原理,並讓你更好地理解程序設計的重要性。不過,我一直都很難接受,因爲本書使用32位示例,我使用的是64位系統。我知道如何使用gcc編譯爲32位,或者我也調整到隨本書提供的32位光盤,但我想我寧願學習64位,因爲它可能比32位系統更相關(或變得越來越相關? )。所以基本上我想問的是,如果我甚至打算使用本書來計算64位彙編,因爲我聽說它有很大的不同,或者我應該找到其他材料來分別學習64位彙編。如果有任何關於64位英特爾彙編的易於理解的書籍,我將很感激您的參考。從32位指令學習64位彙編

+0

所以文本,我們正在談論x86和x64這裏?可能是?如果是這樣,他們真的沒有那麼不同。基本上是一樣的,真​​的。少於16bit到32bit的變化。 – harold

+0

我不認爲這個論壇是正確的地方這個問題 –

+1

這是基於意見的,但我的意見是,如果你已經有一本書來學習32位程序集,你不是一個龐大的程序集,值得學習。然後學習64位,你會理解和更多的差異。它將全面豐富您的體驗。但是你不能使用32位彙編手冊來學習64位彙編語言。 – lurker

回答

1

像Lurker說的在上面的評論。由於你有一本32位的書,學習它。 32位仍然非常相關。

一旦你瞭解了32位的工作方式,那麼64位添加的內容將變得輕而易舉。

寄存器的數量增加了一倍至16

所有寄存器都是64位長。 IA32寄存器的64位擴展名爲%rax,%rcx,%rdx,%rbx,%rsi,%rdi,%rsp和%rbp。新的寄存器名爲%r8-%r15。

每個寄存器的低32位可以直接訪問。這給了我們熟悉的IA32寄存器:%eax,%ecx,%edx,%ebx,%esi,%edi,%esp和%ebp,以及八個新的32位寄存器:%r8d-%r15d。

每個寄存器的低16位可以直接訪問,就像IA32的情況一樣。新寄存器的字大小版本被命名爲%r8w-%r15w。

每個寄存器的低8位可以直接訪問。在IA32中,只有前四個寄存器(%al,%cl,%dl,%bl)纔是這種情況。其他IA32寄存器的字節大小版本命名爲%sil,%dil,%spl和%bpl。新寄存器的字節大小版本被命名爲%r8b-%r15b。

爲了向後兼容,可以通過具有單字節操作數的指令直接訪問寄存器%rax,%rcx,%rdx和%rbx的第二個字節。

Computer Systems A Programmer’s Perspective