LinuxでNASM

今回、息抜きとしてLinuxにNASMを入れてみました。Perlをのぞけばはじめての開発環境!
簡単にmakefileの書き方も調べてとりあえずhello, world。
いや、なんかアセンブラ随分久しぶりなんでどうかなーと思ったけど普通にかけてよかったです。分岐ジャンプ忘れてたけど(汗
それで、とりあえずメモリ確保するためにmmap2を使おうと思ったのですが、なんかうまくいかない。
仕方ないからeaxを表示するルーチンとか起こしてみたけど、そもそもエラーメッセージを見つけてない・・・
資料はどこにあるんだー><って感じですねw
今日はもう寝てまた後日調べようと思います。勉強しないといけないしw
一応今参考にしているURL貼っておきます。
http://www.lxhp.in-berlin.de/lhpsysc4.html#mmap2


本日のソース:
数字を変換する箇所はesiを8からはじめたらもうちょっときれいに書けた気はするんだけど。
あとローカルラベルの性質わすれたからラベルは汚いです。そのうち調べてなんとかします。

section .text
global _start

ALLOC_SIZE      equ     10 * 1024

;start programs
_start:
        ;init
        mov     ebp, esp

        mov     eax, 192        ;mmap2
        mov     ebx, 0          ;address -  null
        mov     ecx, ALLOC_SIZE ;length
        mov     edx, 0x03       ;page mode
        mov     esi, 0x22       ;map flags - anonymous & private
        mov     edi, -1         ;map descriptor - nothing
        int     0x80
        cmp     eax, 0
        je      end

        xor     esi, esi
loop:
        mov     ebx, eax
        and     ebx, 0xf0000000
        shr     ebx, 4 * 7
        cmp     ebx, 0x09
        ja      not_number
        add     ebx, 0x30
Rnot_number:
        mov     byte [msg_ + esi], bl
        inc     esi
        shl     eax, 4
        cmp     esi, 8
        jne     loop

        mov     ecx, msg
        mov     edx, msglen
        mov     eax, 4
        mov     ebx, 1
        int     0x80
        mov     eax, 1
        mov     ebx, 0
        int     0x80

not_number:
        sub     ebx, 0x0a
        add     ebx, 0x61
        jmp     Rnot_number

end:
        mov     ecx, msg2
        mov     edx, msglen2
        mov     eax, 4
        mov     ebx, 1
        int     0x80
        mov     eax, 1
        mov     ebx, 0
        int     0x80


section .data
msg     db      "error - 0x"
msg_    db      "        [end]", 0x0a
msglen  equ     $ - msg

msg2    db      "ok!", 0x0a
msglen2 equ     $ - msg2