打印带空格的字符串

时间:2015-11-27 21:08:39

标签: nasm

我试图在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

感谢您的时间和支持。

1 个答案:

答案 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