2016-09-29 105 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