[英]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.