Почему новая линия не печатает? - PullRequest
0 голосов
/ 16 апреля 2020

Я пытаюсь напечатать

Enter Number:5
1
12
123
1234
12345

asm:

        global _start:

extern print_string
extern print_uint64
extern get_uint64

section .data
      i db 1
      j db 1
    num db 0
     LF db 10,0
    msg db "Enter Number:",0
section .text
_start:

    mov  rdi,msg
    call print_string
    mov  rdi,num
    call get_uint64

    mov  [i],byte 1
outloop:
    xor  rax,rax
    mov  al ,[i]
    cmp  al ,[num]
    jg   endoutloop

    mov  [j],byte 1
inloop:
    xor  rax,rax
    mov  al,[j]
    cmp  al,[i]
    jg   endinloop
    movzx rdi,byte [j]
    call  print_uint64
    inc  byte [j]
    jmp  inloop
endinloop:

    xor  rdi,rdi  
    mov  rdi,LF
    call print_string

    inc  byte [i]
    jmp  outloop
endoutloop:

    mov rax,60
    mov rdi,0
    syscall

print_string:

    global print_string
section .text
print_string:
                mov     rax         ,       1 
                mov     rsi         ,       rdi
                xor     rdx         ,       rdx
        pswhile:
                cmp     [rdi]       ,       byte 0
                je      endpswhile
                inc     rdx
                inc     rdi
                jmp     pswhile
        endpswhile:
                mov     rdi         ,       1
                syscall

                mov     rax         ,       rdx
                ret

эта функция в объектном файле с именем basic_io, а basic_io содержит другие функции также

выход:

srilakshmikanthanp@HP-245-G5-SRI-LAKSHMI-KANTHAN-PC:/mnt/d/Source Code/Learn/Assembly/Temp$ nasm -f elf64 a.asm
srilakshmikanthanp@HP-245-G5-SRI-LAKSHMI-KANTHAN-PC:/mnt/d/Source Code/Learn/Assembly/Temp$ ld -g -o a a.o basic_io.o
srilakshmikanthanp@HP-245-G5-SRI-LAKSHMI-KANTHAN-PC:/mnt/d/Source Code/Learn/Assembly/Temp$ ./a
Enter Number:5
112123123412345srilakshmikanthanp@HP-245-G5-SRI-LAKSHMI-KANTHAN-PC:/mnt/d/Source Code/Learn/Assembly/Temp$
...