我正在编写打印出程序的第二个参数的代码。据了解,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我已经添加了一段关于使用缩放索引寻址的内容,您稍后可能会发现它很有用。 –