我试图在nasm中循环一个字符串并将其打印回来,每个字符之间有一个空格,并将小于9的任何数字递增1.
所以例如;如果我输入命令行;
str1 Hello8
str1 1234
str1 9
输出应该是;
H e l l o 9
1 2 3 4
9
我设法打印出前两个论点;
%include "asm_io.inc"
global asm_main
section .data
section .bss
section .text
asm_main:
enter 0, 0
pusha
mov eax, dword [ebp+8] ; argc
call print_int ; display argc
call print_nl
mov ebx, dword [ebp+12] ; address of argv[]
mov eax, dword [ebx] ; get argv[0] argument -- ptr to string
call print_string ; display argv[0] arg
call print_nl
mov eax, dword [ebx+4] ; get argv[1] argument -- ptr to string
call print_string ; display argv[1] arg
call print_nl
mov eax, dword [ebx+8] ; get argv[2] argument -- ptr to string
call print_string ; display argv[1] arg
call print_nl
popa
leave
ret
感谢您的时间和支持。
答案 0 :(得分:1)
假设print_char
中有asm_io.inc
打印al
:
mov ebx, dword [ebp+12] ; address of argv[]
mov esi, dword [ebx+4] ; get argv[1] argument -- ptr to string
l: lodsb ; al = [esi++]
or al, al ; if 0 we reached end of string
jz end
; check if al is a digit
cmp al, '0'
jb continue
cmp al, '9'
jae continue
inc al ; al was '0'..'8', now '1'..'9'
continue:
call print_char ; print the char
mov al, ' '
call print_char ; print the space
jmp l
end:
call print_nl