Форум программистов, компьютерный форум, киберфорум
Assembler: Linux
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/100: Рейтинг темы: голосов - 100, средняя оценка - 4.56
esnalver
1

[NASM] Вывод на экран

08.11.2011, 02:04. Показов 20684. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
здравствуйте читающие эту тему.
Решил приступить к изучению Ассемблера, документации нашел кучу, но не вся она хороша в плане учебной, и тем более совсем уж узко сведена к DOS и Windows использованию. Этап Hello world был пройден, благо по нему найти код не составит труда на любом языке даже машинном, но вот дальше возникли уже проблемы. Следующим этапом стала задача вывода числа (или просто любого другого символа, строки) на экран. ДА есть примеры, но в них трудно разобраться что к чему, да и писаны все в основном под DOS, а у меня Linux и NASM. долгими мучениями пришел к такому варианту, но не работающему...

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
_start:;Начало программы
    add eax,'p' ; положили символ (его бинарный код) в регистр
    push eax ;  записали в стек, для того что бы потом передать ссылку на стек в функцию
 
    mov eax,4 ;вызов функции ssize_t write(int fd, const void *buf, size_t count)
    mov ebx,1 ;int fd - стандартный поток вывода
    mov edx,esp;const void *buf - ссылка на строку
    mov edx,1;size_t count - сколько символов в строке
 
    int 0x80; прерывание и ниже вызов функции завершения программы
    mov eax,1
    xor ebx,ebx
    int 0x80
программа конечно ничего не выводит, только мне не понятно почему... вроде бы ESP это ссылка на стек, в котором хранится значение (проверил дебагером оно изменилось когда в него положил EAX) и должно было вывести, но не тут то было.

Хочу узнать почему ничего не выводится? (может в синтаксисе что то не дописал)

Как все же в ассемблере работать с данными (числами хотя бы), для них нужно объявлять стороннюю переменную?

желательно расписать подробно.

П.С. к сожалению знакомых знающих или хотя бы изучающих ассемблер нет, и где сейчас живу нет даже высшего учебного заведения, так что уровень знаний здешних людей не велик...
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.11.2011, 02:04
Ответы с готовыми решениями:

[NASM] Вывод значения регистра
GNU nano 2.2.6 Файл: asmlab_1_4.asm SECTION .data s...

[NASM] Ввод 2-х чисел, их сложение, умножение и их вывод
Сразу говорю гуглил- не нашел. Нужна прога (пример для меня) Ввод 2-х чисел, их сложение,...

[NASM] Вывод звука при помощи escape последовательности
Доброго времени суток! Пишу проигрыватель для азбуки морзе на ассемблере (nasm под ubuntu)....

[NASM] Вывод на экран
Есть код(NASM) global _start section .text _start: mov eax,3 add eax,2 Как: 1) вывести в...

4
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
08.11.2011, 09:50 2
Первая программа
1
esnalver
09.11.2011, 05:00 3
все, поковырялся в коде и понял как это должно было быть.
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
section .text
global _start
_start:                         ;Начало программы
    mov edi,_str        ; определяем EDI массивом данных типа _str (EDI _str[])
    mov eax,'w'         ; символ который мы хотим вывести
    
    push edi             ; записываем массив в стек
        stosb                  ; записываем в массив EDI который находится в стеке значение EAX и сдвигаем курсор(EDI[i]=EAX , i++) 
    mov al,0xa         ;'0' ,код конца строки (в С известен как '\n')
    stosb                  ; записываем в массив EDI который находится в стеке значение EAX и сдвигаем курсор(EDI[i]=EAX , i++) 
    pop edi               ;возвращаем в EDI наш массив
    
    xor edx, edx       ; обнуляем edx
    add edx,2           ;увеличиваем его на 2 так как у нас в EDI 2 символа 'w' и символ конца строки '0'
    
    
    mov eax,4
    mov ebx,1
    mov ecx,edi
    int 0x80
 
    mov eax,1
    xor ebx,ebx
    int 0x80
 
section .data
_str db 0
вот такая простая программа получилась в итоге, надеюсь кому то она пригодится.
238 / 235 / 43
Регистрация: 16.03.2011
Сообщений: 750
09.11.2011, 10:26 4
Вот книгу загрузил там по nasm, с тебя плюс))
Кстати прекрасно понимаю тебя я тоже с села, книг не реально купить, только в интернете заказать.
Вложения
Тип файла: pdf assembler_na_primeraxbazovyy_kurs_rudolf_marek.pdf (1.88 Мб, 841 просмотров)
3
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
09.11.2011, 11:02 5
esnalver, по поводу ассемблера в Linux/UNIX
1. номера системных вызовов для прерывания int 80h для LINUX http://int80h.org/ - FreeBSD A... e Tutorial
2. Примеры в архиве unixwasmfaq.zip
3. Очень полезный линк по теме http://asm.sourceforge.net//resources.html
4. Программирование на ассемблере под Unix и родственные системы -- ссылка на форум WASM.RU раздел UNIX
5. ссылка на форум vingrad.ru раздел Asm для Linux/Unix
PS для модераторов прямой ссылки нет -- нарушения тоже нет
Вложения
Тип файла: zip unixwasmfaq.zip (4.2 Кб, 109 просмотров)
1
09.11.2011, 11:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.11.2011, 11:02
Помогаю со студенческими работами здесь

[NASM+DOS+COM] Вывод десятичного числа
Еще один вопросик, в похожей программе, не получается вывести заданное число, тупо не выводит...

[NASM+DOS+COM] Вывод двухзначного шестнадцатеричного числа
Народ выручайте, в коде вроде все правильно и по идее должен вывести 3f а выводит 33, может кто...

[NASM] Ошибка "nasm error more than one input file specified type"
Начал изучать ассемблер сделал все как в методичке и зашел в тупик значит скачал я от сюда инстал...

Не могу понять как делать вывод на экран структуры STUDENT на заполнение и вывод данных на экран
Добрый вечер. Вот задание и мой код программы на C++ Не выходит нормально реализовать 3е...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru