Я пишу код, который печатает второй аргумент программы. Я понимаю, что ebp+8
содержит количество аргументов, ebp+12
имеет адрес имени программы и т. Д. До сих пор у меня есть:Печать 2 аргумент командной строки
%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 нужно добавить, чтобы перейти к следующему элементу. Для начала нужно было иметь правильный указатель. –
@ Я добавил раздел, касающийся использования масштабированной адресной адресации, которую вы, возможно, сочтете полезной позже. –