2016-09-29 50 views
0

我正在学习Assembly,对于我来说能够输出一个数字到屏幕而不是一串文本会很好。我知道如何使用mov eax, 1来打印字符,但这对DWords不起作用。如何在组件中打印DWord?

我正在使用64位Ubuntu。

的Makefile:

all: 
    nasm -f elf64 asm.s -o asm.o 
    ld asm.o -o asm 
    rm asm.o 
+2

生成文件不会帮助任何人没有看到你的代码。向我们展示您已经撰写的内容,并具体描述您收到的错误以及您尝试解决错误的方式。 –

+0

嗨,我没有任何代码,我只是想知道如何打印出一个dword而不是一个ascii字符串。我很抱歉发布makefile,我认为这对汇编器和配置的知道会很有用。我的错。 –

+3

你必须编写一个函数/代码将数字(如双字值)转换为字符串,然后用系统调用打印字符串。更简单的方法是使用_GCC_进行链接,使用函数'main'而不是'_start',然后调用_c_库函数,如'printf'来打印格式化文本。本教程/代码可能有所帮助:https://www.csee.umbc.edu/portal/help/nasm/sample_64.shtml#printf1_64.asm –

回答

1

一个简单的方法来打印的东西将只使用printf,你问如何打印DWORD,很简单:

extern _printf 

SECTION .data 
    msg:  db "Printing a dword: %d",10,0 
    number: dd 123456789 

SECTION .text 
    global start 

start: 
    push dword [number] 
    push dword msg 
    call _printf 
    add esp, 8 
    mov eax, 0 
    ret