-2
每次我嘗試編譯我的NASM,那裏是一個「流行」的代碼錯誤(「流行人」在這種情況下),它給了我一個錯誤。NASM(英特爾)ASM上彈出
20: error: invalid combination of opcode and operands
在第20行,我有
pop al
什麼問題?
每次我嘗試編譯我的NASM,那裏是一個「流行」的代碼錯誤(「流行人」在這種情況下),它給了我一個錯誤。NASM(英特爾)ASM上彈出
20: error: invalid combination of opcode and operands
在第20行,我有
pop al
什麼問題?
問題實際上是彙編程序提供的錯誤信息:「操作碼和操作數的無效組合」。指令POP
沒有POP r8
編碼可能。換句話說,可以不彈出一個8位的值從堆棧
最接近的等效將pop ax
,它使用一個POP r16
編碼彈出一個16位的值從堆棧入ax
寄存器。然而,這是不完全一樣的代碼,因爲它會修改這兩個低8位的一半(al
)和16位ax
寄存器的高8位的一半(ah
)。
另一種方法是直接從堆棧加載值,使用類似mov al, BYTE PTR [(r/e)sp]
。因爲這不會改變堆棧指針,所以您需要手動調整它。
下一次,請同時指定您的目標平臺是什麼。這很重要,因爲與32位和64位保護模式相比,16位實模式尋址模式的可能性非常有限。如果您沒有指定您定位的模式,那麼您得到的答案可能不適合您。喜歡這裏,我不知道該mov
指令是否應該使用rsp
(64位),esp
(32位),或sp
(16位)。
你甚至閱讀使用手冊嗎?即使是謙卑的8086(從「al」假設)也可以「推」或「彈出」一個8位寄存器。 –
我建議你谷歌爲「8086指令集」,尤其是對「adressing器官功能障礙綜合徵」,並試圖瞭解這一切'R32,R/m32'等東西手段 – Tommylee2k