2013-03-15 54 views
0

我很抱歉打擾了我的導師。過去幾天我發佈了幾個疑問,並且他們伸出了手來幫助我。 通過在x86機器上通過Ubuntu11.04中的NASM進行工作,最近我發現了另一個工作混亂。這是「我如何打印8位值」? 假設的代碼片斷的礦山樣子:如何打印NASM中的8位值

section .data 
     var db "string" 
    section .text 
     global main 
    main: 
     nop 
     xor ebx,ebx 

     mov dl,byte[var+ebx] 
     mov al, dl ; setting to AL the ASCII character to write 
     mov bh, 0 ; setting the page number to 0 (all in the same page) 
     mov bl, 7 ; setting to bl the foreground pixel color 
     mov ah, 0xE ; INT10 E sub mode --> Write Text in Teletype Mode 
     int 10  ; "calling" to the interrupt. 

     nop 

現在,我想只打印DL。上面的代碼使用了@Shyil The Cat的提示。並引發分段錯誤。我們如何解決這個問題?

謝謝您提前。

+0

你可以使用C運行時功能嗎? – 2013-03-15 09:19:38

+0

@ShmilTheCat:不,我不能用這裏PUSH DL cmmand。爲此,我正在尋求幫助 – sabu 2013-03-15 09:27:00

+0

@AntoineMathys:您好,先生!我在任何一個工作或窗戶都工作。我正在研究Ubuntu 11.04。 – sabu 2013-03-15 11:10:44

回答

1

在Linux上可以使用的putchar:

 global main 
     extern putchar 

     section .data 
     var db "string" 

     section .text 
main: 
     mov ebx, 0 ; index 
     mov dl, [var + ebx] 
     push edx 
     call putchar 
     add esp, 4 
     ret 

要調用需要你把整個單詞一個字符的功能。該函數將使用最低有效字節。

+0

我認爲問題的一部分不是使用C運行時功能......請參閱上面的註釋 – 2013-03-15 11:30:50

+0

@Antoine Mathys:非常感謝你,導師。它解決了我的問題。我真的很感謝你 – sabu 2013-03-15 12:02:19