3
我正在嘗試編寫一個程序,它從文本文件中獲取二進制輸入並將其作爲參數發送給彙編函數。該彙編函數必須將這個二進制輸入打印到屏幕上。輸入通過地址從c代碼發送到彙編代碼。操作碼和操作數錯誤的組合無效
當我嘗試組裝我的asm文件時,在mov msg, [esp+8]
行上出現「操作碼和操作數的無效組合」錯誤。我想將我的char
arg從堆棧複製到我的靜態變量。爲什麼這不是一個有效的指令?
完整的代碼是:
segment .data
len equ 31
segment .bss
msg resb 0
segment .text
global sequence_generator
sequence_generator:
push ebp
mov ebp, esp
mov msg, [esp+8]
mov eax,4
mov ebx,1
mov ecx,msg
mov edx,len
int 80h
pop ebp
ret
'mov msg,[esp + 8]'你認爲這是在做什麼?這個'味精resb 0'?並且'edx'等於31是否意味着?那麼C代碼將總是發送31個以上的字符? – Ped7g
順便說一句,如果它是真正的二進制數據,它將包含不可打印的字符,這在Linux中不起作用,所以可能你可能想對它們做一些處理以將不可打印的值更改爲「'。」或打印十六進制值而不是字節本身。 (所以從數據'''''(三倍空間)你將打印'「20 20 20」') – Ped7g