簡體   English   中英

使用NASM匯編輸出整數

[英]Printing integers in assembly with NASM

我正在嘗試使用帶有nasm的匯編中的printf打印'12345'。 保持印刷時代。 我以實驗室為基礎,在該實驗室中我們打印了一個計數器數字(僅一個數字),並且它起作用了。

我必須使用除以10的方法還是與設置打印'12345'的方法接近?

    bits 64
    global main
    extern printf




    section .text
main:
    ;function setup
    push    rbp
    mov     rbp, rsp
    sub     rsp, 32
    ;
    lea     rdi, [rel message]
    mov     al, 0
    call    printf

;mov    rdi,format
;push count
;push format    
mov rax, 12345
push rax
push format 
;mov    al,0
call    printf
;add esp,8  
;ret


    ; function return
    mov     eax, 0
    add     rsp, 32
    pop     rbp
    ret

    section .data
message: db      'Lab 3 - Modified hello program',0x0D,0x0a,'COSC2425 - Pentium assembly language',0x0D,0x0a,'Processed with NASM and GNU gcc',0x0D,0x0a

count   dq  12345

format  db  '%d',10,0

答案取決於操作系統。 在Windows x64程序集中,您可以使用某些寄存器,而不是將參數傳遞給堆棧。 將第一個參數format移至rcx,將第二個參數rax移至rdx。 在Linux中,使用rdi代替rcx,使用rsi代替rdx。

您是否只是想在終端上打印12345。 也許我錯過了一些東西。

section .data
        fmt:    db      `%d\n`
section .text
        global main
        extern printf
main:
        ;  x86_64 rdi rsi rdx rcx r8 r9
        mov rsi, 12345
        call _write

_exit:
        mov rax, 60
        xor rdi, rdi
        syscall

_write:
        push rbp
        mov rbp, rsp
        lea rdi, [fmt]
        xor rax, rax
        call printf
        xor rax, rax
        leave
        ret           

輸出:

$ ./user3866044_001
12345

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM