2012-03-28 165 views
1

我在這裏的新功能與我在裝配中的新功能相同。我希望你能幫助我開始。 我使用32位(i686)Ubuntu在程序集中使用gcc編譯器。對32位系統中的64位字進行操作

我知道通用寄存器最大爲32位(4字節),但是當我必須對64位數進行操作時呢?英特爾的說明表示,高位存儲在%edx中,並且低於%eax 好... 那麼,如何使用這個2寄存器號碼做些什麼呢?我必須將64位十進制轉換爲十六進制,然後將其保存到內存並顯示在屏幕上。

如何在.data段的程序開始時製作64bit quadword?

編輯: 當我在C中定義的全局變量LLU(很長很長的無符號),並編譯成彙編它使:

.data 
a: 
.long <low bits> 
.long <high bits> 

這是因爲參數保存在棧中向後或更多的東西?

+1

將十進制轉換爲二進制?不知何故,你在寄存器中有十進制數字? – 2012-03-28 23:32:47

+0

gosh,thx ...我不得不將dec轉換爲hex,需要編輯帖子。完全去dec - >(U2 - 二進制補碼) - >十六進制,但是我想從容易開始。 – Vilo 2012-03-28 23:41:41

+0

我相信'edx:eax'只適用於'idiv'和'imul',不適用於一般用途的64位數學。 – 2012-03-29 04:17:05

回答

3
  1. 編寫使用long long號碼(其具有在Linux/IX86 64位)一個簡單的C程序。
  2. gcc -S t.c將該程序編譯爲程序集。
  3. 研究由此產生的程序集。
  4. 修改你的程序做一些更復雜,並重復步驟2和3。

反覆幾次後,你應該有你需要的組件做什麼好手柄。

+0

偉大的解決方案!當我上學時必須檢查它。 – Vilo 2012-03-29 07:57:07

0

當我在C中定義的全局變量LLU(很長很長的無符號),並編譯成彙編它使:

.data 
a: 
.long <low bits> 
.long <high bits> 

這是因爲參數保存在棧中向後或更多的東西?

+0

請編輯原來的問題..這個答案似乎有問題裏面.. – Jayan 2012-03-30 09:23:27

相關問題