我正在編寫打印出程序的第二個參數的代碼。據瞭解,ebp+8
保存了參數編號,ebp+12
包含了程序名稱地址等。到目前爲止,我有:打印第二個命令行參數
%include "asm_io.inc"
SECTION .data
err1: db "Incorrect number of command line arguments",10,0
SECTION .text
global asm_main
asm_main:
enter 0,0
pusha
mov eax, dword [ebp+8]
cmp eax, dword 2
jne ERR1
mov eax, dword [ebp+16] ; prints 1st letter of 2nd argument
mov al, byte[eax]
call print_string
jmp asm_main_end
ERR1:
mov eax, err1
call print_string
jmp asm_main_end
asm_main_end:
call print_nl
popa ; restore all registers
leave
ret
可執行文件叫lynarr。當我執行lynarr abcd
時,我可以打印程序名稱(即lynarr),但我不知道如何打印第二個參數。我正在使用redhat-linux和nasm 2.10.07。有任何想法嗎?
謝謝!我正試圖直接跳到'ebp + 16',現在我可以看到它是錯誤的。另外,我並不知道'print_string'不能用於打印AL。非常感謝! – Sally
是的,我看到了。你只需先取消引用[ebp + 12],然後再添加4.你知道必須添加4才能進入下一個元素。你只需要有正確的指針開始。 –
@Sally我已經添加了一段關於使用縮放索引尋址的內容,您稍後可能會發現它很有用。 –