過去一天左右,我一直在無緣無故地使用 Go 構(gòu)建一個匯編程序,以便我可以熟悉該語言。這是我使用 Go 的第一個真正的程序,所以我預(yù)料到了問題,但是我一次又一次地出現(xiàn)了一致的錯誤。我只是想出了在其他情況下修復(fù)它的其他hacky方法,但這次我想我需要一個答案,所以我覺得我實際上做對了?;旧?,我必須解析大量的字節(jié)值。其中一些是有符號字節(jié),所以 -1 = 0xFF 等等。在計算標(biāo)簽的地址時,我需要找到它與當(dāng)前地址的偏移量。以下代碼是我用來獲取偏移量的精簡版基本版本:// lbladdr holds the target label address// address holds current address in memory// label[x] holds the offsetif address > lbladdr { lbladdr -= address}label[x] = strconv.FormatInt(int64(lbladdr), 16)這適用于正值,但是當(dāng)我得到一個負(fù)地址(地址 > lbladr)時,我得到的是 -2,而不是像 FE 這樣的值。我不明白為什么標(biāo)準(zhǔn)庫會在十六進(jìn)制數(shù)后附加一個負(fù)號,而且我在文檔中找不到任何關(guān)于它的內(nèi)容。我已經(jīng)看了很多其他地方,但我似乎也找不到任何有同樣問題的人。我希望這只是一個簡單的修復(fù)。
2 回答

Cats萌萌
TA貢獻(xiàn)1805條經(jīng)驗 獲得超9個贊
在十六進(jìn)制數(shù)上使用負(fù)號是完全合理的。我知道在使用匯編程序時,通常使用實際的位模式作為您以十六進(jìn)制表示的寄存器來表示符號。然而,Go 并不知道你在這樣做。go 的格式化函數(shù)也不是為了支持十六進(jìn)制值而編寫的,因為它們在 CPU 寄存器中。此外,位模式將根據(jù)寄存器大?。?6 對 32 對 64 和大對小端)而有所不同。你會把它們儲存在里面。所以基地不足以按照你想要的方式打印它們。您將需要編寫自己的格式庫,該庫支持您要表示的寄存器類型的格式。
- 2 回答
- 0 關(guān)注
- 416 瀏覽
添加回答
舉報
0/150
提交
取消