我正在尝试使用printf在使用nasm的程序集中打印'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
答案 0 :(得分:1)
答案取决于操作系统。在Windows x64程序集中,您可以使用某些寄存器,而不是将参数传递给堆栈。将第一个参数format格式化为rcx,并将第二个参数rax移动到rdx。使用Linux,使用rdi而不是rcx和rsi而不是rdx。
答案 1 :(得分:0)
您是否只是尝试将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