【发布时间】:2015-09-16 05:51:36
【问题描述】:
我正在尝试在带有 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
【问题讨论】:
-
64 位调用约定不使用堆栈来传递前几个参数。
-
还请记住,使用 C 调用约定,您是负责在调用后从堆栈中删除最终参数的人。
标签: assembly integer printf nasm