這個問題在這里已經有了答案: 匯編 x86 暫存器有符號或無符號 2 個答案 在程式集中識別有符號和無符號值 3 個答案 匯編代碼如何知道一個值是有符號的還是無符號的? (3 個回答) 匯編中的無符號整數 1 個答案 12 天前關閉。
int main() {
int64_t di = -10;
uint64_t ui = UINT64_MAX - 9;
return 0;
}
當我反匯編main它給我這個輸出:
Dump of assembler code for function main:
0x0000000000001119 < 0>: push rbp
0x000000000000111a < 1>: mov rbp,rsp
0x000000000000111d < 4>: mov QWORD PTR [rbp-0x10],0xfffffffffffffff6
0x0000000000001125 < 12>: mov QWORD PTR [rbp-0x8],0xfffffffffffffff6
0x000000000000112d < 20>: mov eax,0x0
0x0000000000001132 < 25>: pop rbp
0x0000000000001133 < 26>: ret
我知道有0xfffffffffffffff6符號變數中的一點是確定它的符號,但它如何知道它是有符號變數還是無符號變數。也許它設定了一些標志 idk
uj5u.com熱心網友回復:
在這種處理器架構中,通常在當今的處理器中,沒有指示暫存器中的位是有符號整數、無符號整數、地址還是其他東西。沒有與暫存器相關的型別資訊;它只是一個位元序列。
當您撰寫額外的 C 代碼來使用資料時,例如 test if (di < 3) …,編譯器將生成取決于資料型別的指令。例如,有一條比較指令產生幾個位來描述兩個數字之間的關系,還有一些分支指令使用這些位來執行分支,例如“如果第一個數字小于第二個數字,則使用有符號解釋進行分支。 ” 因此,型別資訊被內置到使用資料的匯編指令中。
uj5u.com熱心網友回復:
匯編器不知道存盤的是有符號值還是無符號值。如何解釋該值取決于編譯器將生成哪些機器指令來處理該值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/459730.html
