2016-08-04 62 views
2

我試圖將4位二進制序列初始化爲裝配程序。裝配。數據初始化4位值

.data 
x: .byte 00001111 

我相信這應該爲我的問題的工作,但我不知道是否有一種方法來限制它只是作爲4個最低顯著位。

是否只有4位的特定數據類型?

+0

我不認爲你可以使用半字節作爲4位值被調用。大多數處理器具有最小8位字節。問題是爲什麼你需要使用少於4位。在計算之前/之後,你總是可以在一個字節中存儲2×4位(如果你有很多的話,否則可能沒有必要)。 –

+0

我認爲這取決於處理器,但我假設您使用現代處理器,所以它不可能,因爲字節是您可以聲明的最小尺寸。爲什麼約束? – rcd

+1

@MaartenBodewes和rcd:這是一個彙編器設計決策。你可以很容易地設計一個彙編程序,以比特方式運行,組裝比特流。不過,你說得對,它是由具有字節尋址內存的CPU驅動的。 –

回答

6

任何東西的最小尺寸是1個字節。沒有辦法編寫兩個單獨的彙編指令組合成單個字節。您正在使用GNU as語法,但是這適用於所有彙編器:它們將字節彙編到輸出中。

彙編器的當前輸出位置(在GNU語法中爲.,在NASM語法中爲$)始終爲整數個字節,而不是N個字節+ M個位。沒有.nibble.bit指令。

這個彙編程序設計決定與現代硬件中的字節尋址但不可位尋址的內存分離(但涉及)。 (即如果你想要一點點,你必須加載包含的字節並將其掩碼+)。


如果要打包兩個獨立的半字節成一個字節,你需要把它們混合起來作爲參數傳遞給.byte指令與表達(或。長或其他)。例如

x: .byte 0bABCD <<4 | 0bEFGH 

產生ABCDEFGH作爲位串。請注意,00001111an octal constant (because of the leading 0 and no radix character),不是二進制。你需要0b

一些彙編程序,如NASM,接受010101b(後綴)以及一些彙編程序僅支持後綴形式