[英]Printing a number in assembly NASM using printf
我一直在嘗試將其打印12345。 誰能提供我應該做什么的提示? 它將打印三行文本,然后在第四行上打印“ age”,我猜這是第二行中堆棧中的剩余內容。
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
;above code correctly prints message
;where the issue lies
push rbp
mov rbp, rsp
;sub rsp, 32
mov rax, 12345
;push rax
mov al,0
call printf
; 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
顯然,您甚至都不知道printf
工作方式,這使得很難從匯編中調用它。
要打印數字, printf
需要兩個參數,即格式字符串和要打印的數字。 示例: printf("%d\\n", 12345)
。
現在要將其轉換為匯編,您顯然需要聲明該格式字符串,然后使用適當的約定傳遞兩個參數。
由於您似乎正在使用sysv abi,因此這意味着前兩個參數分別進入rdi
和rsi
。 您似乎已經知道必須將al
設為零以指示未使用SSE寄存器。 因此,相關部分可能如下所示:
lea rdi, [rel fmt]
mov rsi, 12345 ; or mov rsi, [count]
mov al, 0
call printf
...
fmt: db "%d", 0x0a, 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.