Другие языки программирования и технологии

Как вывести информацию на экран, assembler

► Всем доброго времени суток)
начал я изучать ассемблер
научился вот чему

section .data
msg: db "бла бла бла",10
.len: equ $ - msg
l_byte: db 4
h_byte: db 12

section .text
global _start
_start:

mov al,[l_byte]
mov bl,[h_byte]
add al,bl

mov eax, 4
mov ebx, 1
mov ecx, msg
mov edx, msg.len

int 0x80
mov eax, 1
mov ebx, 0
int 0x80
как вывести на экран значение регистров? в консоль! а не "gdb, print $al"
у меня Ubuntu 12.04 !!!NASM !!!
extern printf; Импорт функции printf

section .data
msg: db "бла бла бла",10
.len: equ $ - msg
tReax: db "eax = %i",10,0

l_byte: db 4
h_byte: db 12

section .bss
buff: resb 11

section .text
global main

;Макрос, для сокращения текста программы, чтобы каждый раз
;не писать загрузку регистров для системного вызова 4
%macro write 2
    mov eax,4
    mov ebx,1
    mov ecx,%1
    mov edx,%2
    int 80h
%endmacro

main:
    write msg, msg.len

    mov al,[l_byte]
    mov bl,[h_byte]
    add al,bl

;Вывод содержимого регистра eax в десятичной системе
;c помощью системного вызова
    pusha
    mov edi,buff+10
    mov ebx,10
    mov [edi+1],bl
    mov ecx,1
    std
Repeat:
    xor edx,edx
    div ebx
    add dl,30h
    xchg al,dl
    stosb
    xchg dl,al
    inc ecx
    test eax,eax
    jnz Repeat
    inc edi
    push ecx
    push edi
    write tReax, 6
    pop ecx
    pop edx
    write ecx, edx
    popa

;Вывод содержимого регистра eax в десятичной системе
;c помощью внешней функции из библиотеки Си
    push eax
    push dword tReax
    call printf
    add esp,8

    mov eax, 1
    mov ebx, 0
    int 0x80

Компиляция, сборка и запуск:
ВИ
Владимир Истомин
51 590
Лучший ответ

Похожие вопросы