сборка для меня нова, и у меня проблемы с программой, которую я пытаюсь создать. Программа должна отображать количество аргументов, заданных пользователем, и каждый из аргументов, введенных пользователем. Он также должен отображать сообщение, когда аргумент не задан (не считая программу, вызывающую оператор в качестве аргумента). У меня возникают проблемы с выяснением того, как l oop аргументы, чтобы программа отображала все аргументы, независимо от того, сколько задано пользователем. Кто-нибудь знает, как я могу решить эту проблему? Спасибо!
Вот код:
%include "CPsub64.inc"
global main ;entry point for assembly
extern puts
section .text
main:
push rdi ;save to stack
push rsi ;save to stack
;show # of arguments
mov rax, rdi
call WriteDec
;put blank line
mov rdi, blankline
call puts
;if more than 1 argument is given then jump to great
mov rcx, 1
cmp rcx, rdi
jg great
jmp less
;return original values
great:
pop rsi
pop rdi
loop:
;show items
push rdi ;save to stack
push rsi
sub rsp, 8 ;align stack boundary
add rsi, 8 ;move address to next item
mov rdi, [rsi] ;argument from command line
call puts
cmp rsi, rdi
jne loop
add rsp, 8 ;realign boundary
pop rsi ;restore registers
pop rdi
jmp skip
less:
pop rsi
pop rdi
;display noarg message
mov rax, 1
mov rsi, noarg
mov rdx, noarglength
syscall
jmp end
skip:
end:
;display end message
mov rax, 1
mov rsi, endmessage
mov rdx, endmessagelength
syscall
ret ;close C functions
section .data
blankline: db " ",0
noarg: db 'No arguments found.',0,0ah
noarglength: equ ($-noarg)
endmessage: db 'The program is completed',0,0ah
endmessagelength: equ ($-endmessage)