UNIX : NASM: не выводиться значение переменной

Тема в разделе "WASM.BEGINNERS", создана пользователем VEhES, 13 окт 2007.

  1. VEhES

    VEhES New Member

    Публикаций:
    0
    Регистрация:
    13 окт 2007
    Сообщения:
    17
    Привет, сетяне!

    Подскажите пожалуйста, почему в этой проге строка выводится, а значение, которое в numer ,нет?
    Код (Text):
    1. SECTION .text
    2. global _start:
    3. _start:
    4. mov eax, 5
    5. mov [numer], eax
    6.  
    7. mov eax, 4
    8. mov ebx, 1
    9. mov ecx, numer
    10. mov edx, 2
    11. int 0x80
    12.  
    13. mov eax, 4
    14. mov ebx, 1
    15. mov ecx, hello
    16. mov edx, 6
    17. int 0x80
    18.  
    19. mov eax,1
    20. mov ebx, 0
    21. int 0x80
    22.  
    23. SECTION .data
    24.  
    25. hello db "Hello", 0xa
    26. numer db 0
    Заранее спасибо!

    P.S. для моредаторов: извините, если не в ту тему написал...
     
  2. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    почему не выводиться? выводиться. запусти программку с перенаправлением и увидишь:
    Код (Text):
    1. ./a.out | hexdump -C
    ps. так между делом стоит повнимательнее следить за размерами. затолкать в numer eax -- в один байт четыре -- это есть не совсем правильно. да и отправляя numer во write, стоит размер правильно указывать ;)
     
  3. VEhES

    VEhES New Member

    Публикаций:
    0
    Регистрация:
    13 окт 2007
    Сообщения:
    17
    Код (Text):
    1. VEhES@debian:~/CODING/ASSEMBLER/code$ nasm -felf function.asm;ld function.o -o function
    2. VEhES@debian:~/CODING/ASSEMBLER/code$ ./function
    3. Hello
    4. VEhES@debian:~/CODING/ASSEMBLER/code$
    Вот что я имел в виду :)
    Я не понимаю, почему прога выводит Hello, но не выводит 5?
    Код (Text):
    1. VEhES@debian:~/CODING/ASSEMBLER/code$ nasm -felf function.asm;ld function.o -o function
    2. VEhES@debian:~/CODING/ASSEMBLER/code$ ./function
    3. 5Hello
    4. VEhES@debian:~/CODING/ASSEMBLER/code$
     
  4. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    я понял что ты имел в виду. но совету моему запустить с перенаправлением, чтобы изучить вывод детально ты не последовал, как я понял. ещё раз, выполняешь команду:
    Код (Text):
    1. $ ./function | hexdump -C
    и медитируешь. просветление придёт.
     
  5. KiNDeR

    KiNDeR New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2003
    Сообщения:
    258
    Адрес:
    Russia
    а так попробуй
    Код (Text):
    1. mov eax, 5
    2. or eax,30h
    3. mov [numer], eax
     
  6. VEhES

    VEhES New Member

    Публикаций:
    0
    Регистрация:
    13 окт 2007
    Сообщения:
    17
    Да, получилось! Спасибо!
     
  7. redliner

    redliner New Member

    Публикаций:
    0
    Регистрация:
    27 сен 2007
    Сообщения:
    8
    если тебе надо 5 вывести то надо
    Код (Text):
    1. _start:
    2. mov eax,0x35
    3. mov numer,eax
    4.  
    5. mov eax, 4
    6. mov ebx, 1
    7. lea ecx, numer
    8. mov edx, 2
    9. int 0x80
     
  8. VEhES

    VEhES New Member

    Публикаций:
    0
    Регистрация:
    13 окт 2007
    Сообщения:
    17
    Т.е. все числа, которые я вывожу на экран, я должен представлять в ASCII символах? Т.е. добавлять у ним всегда 30h? Это же так неудобно... неужели просто нельзя вывести значение, которое в регистре или в переменной?
     
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    VEhES
    Не знаю, как под UNIX, но под DOS можно воспользоваться 11h-й функцией 10h-го прерывания и заменить ASCII-таблицу на свою, в которой первые десять символов будут 0-9.
     
  10. KiNDeR

    KiNDeR New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2003
    Сообщения:
    258
    Адрес:
    Russia
    да
    хочешь удобства переходи на Це
    или напиши свою функцию для ядра, которая буде выводить число из регистра на экран