Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
goldov
1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 40
1

Ассемблер начинающему

05.10.2013, 19:54. Просмотров 2476. Ответов 29
Метки нет (Все метки)

Привет всем, являюсь новичком в ассемблере. хотелось бы узнать 1) какой ассемблер-компилятор лучше всего подходит для windows ? - поясню свой вопрос: хотелось бы научиться программировать используя самые-самые основы (!!!!!) ассемблера, и дальше уже научиться создавать и подключать самому библиотеки, а не пользоваться готовыми библиотеками - как предлагается например в некоторых случаях при изучении языков высокого уровня, 2) конечно же в дальнейшем интересует тема написания драйверов для какого-либо определенного радиоэлектронного устройства, - наверное придется научится работать и разбираться во временных диаграммах (эпюрах), 3) конечно же, интересуюсь конкретной дополнительной литературой для конкретного (!) ассемблера - насколько мне известно, ассемблеры сильно отличаются по своему синтаксису, 4) может быть кто либо на форуме сможет в дальнейшем предложить небольшую конкретную понятную задачу для программирования на ассемблере с самых-самых основ, чтобы прочувствовать "мощь" и "взаимодействие с железом" ассемблера and to guide and to assist through процесс написания. Спасибо.
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2013, 19:54
Ответы с готовыми решениями:

Ассемблер в паскале: как загрузить массив во встроенный ассемблер и произвести над любым из его чисел сложение(вычитание).
хочу написать программу в паскале с использованием встроенного ассемблера, но прежде чем начать...

Какую книгу почитать начинающему?
Хотел почитать книгу Калашникова, но про неё говорили вещи не самые лучшие.

порекоммендуйте, пожалуйста, начинающему
Есть такой фрагмент кода на ассемблере: Уважаемые форумчане, порекоммендуйте, пожалуйста,...

Начинающему
Выбрал специальность для поступления. Узнал, что к началу обучения уже требуют хорошее знание си ++...

29
bgm123
41 / 41 / 27
Регистрация: 29.01.2013
Сообщений: 277
05.10.2013, 23:53 2
попробуйте fasm
0
sh2ezo
1126 / 260 / 9
Регистрация: 11.06.2010
Сообщений: 1,050
06.10.2013, 09:54 3
Лучший ответ Сообщение было отмечено как решение

Решение

мммм..... можно начать писать ОСь, а также графический или текстовый редактор для DOS. Графический редактор нужен с кнопочками и менюшками. А текстовый с менюшками, кнопочками, форматированием и шрифтами. Пока что-то из этого напишешь, если не сломаешься, освоишься до уровня любителя, а дальше что-нить другое можно взять.

ИМХО
2
Мотороллер
06.10.2013, 10:35
  #4

Не по теме:

sh2ezo, если под винду то троянчиками можно баловаться:jokingly:

0
Mikl___
06.10.2013, 10:40
  #5

Не по теме:

Мотороллер,
ну, да, гадостям, почему-то учатся быстро и охотно...

0
Мотороллер
06.10.2013, 10:42
  #6

Не по теме:

Mikl___, ну почему гадости. мб из него потом выйдет хороший вирусоборец, и новый антивирус Goldov. а учитывая пост sh2ezo и ось тоже :D

0
goldov
1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 40
07.10.2013, 11:07  [ТС] 7
Загрузил fasm, прочитал-просмотрел manual, ассемблер - в принципе не сложный язык - набор инструкций. однако возникли вопросы после просмотра "экзамлов" - кроме чисто ассемблеровских инструкций также имеются labels-комманды - например: "include", ".code", "invoke", "section", "start", "format", "entry" ... возможно количество таких labels-комманд много - вопрос: имеется ли документация по таким labels, то есть формат (или правила) написания этих конкретно для fasm ? Спасибо.
0
Мотороллер
434 / 245 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
Завершенные тесты: 1
07.10.2013, 12:04 8
goldov, дык руководство по фасму. или же Руслан Аблязов (название не помню).
0
goldov
1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 40
08.10.2013, 20:21  [ТС] 9
Познакомился с примером "hello" в fasm - этот пример компилируется и работает.
далее попробовал изменить немного структуру кода (так как объясняется ), чтобы начать с самых основ ассемблера (директивы ".code", ".data" ... являются искусственным упрощением введенным в современные ассеблер-компиляторы, что затрудняет процесс обучения и реального восприятия и понимания команд и директив ассемблера (любого), составляющих его основу):

Assembler
1
2
3
4
5
6
7
8
9
10
11
include 'win32ax.inc' ; you can simply switch between win32ax, win32wx, win64ax and win64wx here
; .code
;  start:
assume cs:code1
.model Large
code1 segment para private
;assume cs:code1
        invoke  MessageBox,HWND_DESKTOP,"Hi! I'm the example program!",invoke GetCommandLine,MB_OK
        invoke  ExitProcess,0
code1 ENDS
;.end start
компиляция выдает ошибку на строке(строках) "assume cs:code1" и "code1 segment para private" и т.д.
вопрос - в чем заключается ошибка ? рассчитан ли fasm на использование чисто модернизированных версий директив и команд (то есть имеется ограничение на правописание для данного компилятора) ? или в начале кода-программы пропущена какая-либо дополнительная командная или директивная строка для данного компилятора ? Спасибо.

Добавлено через 1 минуту
"code ENDS" или "code ends" - роли не играет - все-равно возникает ошибка "Illegal instruction".
1
Мотороллер
434 / 245 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
Завершенные тесты: 1
08.10.2013, 21:43 10
это tasm\masm. у Вас фасм, тут нету всяких code para public code ends. тут есть
Assembler
1
section '.code' code readable executable
0
Mikl___
Ушел с форума
Автор FAQ
13758 / 6824 / 747
Регистрация: 11.11.2010
Сообщений: 12,256
09.10.2013, 10:50 11
Цитата Сообщение от goldov Посмотреть сообщение
ли fasm на использование чисто модернизированных версий директив и команд (то есть имеется ограничение на правописание для данного компилятора)
goldov,
есть стандартные и есть упрощенные директивы сегментации, стандартные директивы сегментации это "code1 segment para private", "assume cs:code1" и бла-бла-бла. Чтобы не забивать себе голову, 40 лет назад придумали упрощенные директивы сегментации, когда указывают модель памяти одной строкой .model tiny/ small/ medium/ large/ huge/ flat и для указания сегмента кода пишут .code, данных - .data, сегмента стека и его размер - .stack 100h и в конце никаких "code1 ENDS". Для программ под Windows используют только .model flat Для FASM'а это всё не работает
0
goldov
1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 40
09.10.2013, 23:18  [ТС] 12
Насколько начинаю разбираться, ассемблеры, разработанные хотя бы для одной и той же операционной системы, сильно отличаются по синтаксису, то есть по написанию директив и команд. Такая ситуация ставит новичка в непростое положение - мне хотелось бы подойти к изучению ассемблера не с точки зрения удобства и изящества, сколько с точки зрения приближенной к ассемблерам старого поколения, то есть когда директивы и команды (определенной версии ассемблера) приближены к терминам и словам, описывающих "железо" и микропроцессорную архитектуру. поэтому, насколько мне понимается FASM представляет собой удобный и изящный ассемблер нового поколения, где слова-команды-директивы несколько завуалированно описывают "железо" и "микропроцессор".

Позволяют ли TASM/MASM писать программы, используя команды и директивы (не с точки зрения синтаксического удобства) приближенные к "микропроцессорам"-"микроэлектронике"-"железу" ?
Имеются ли другие версии ассемблера работающие в среде Windows-DOS, которые лишены изящества, но приближены к реальной архитектуре "железа" в синтаксическом смысле (слова-команды-директивы) ?
Спасибо.

Добавлено через 9 минут
Mikl, спасибо за ответ, теперь мне стало понятно, что в определенных ассемблерах используются только упрощенные и "изящные" версии команд и директив. У меня же другая цель - поближе познакомиться с "железом" и "микропроцессорной архитектурой" и поэтому использовать при написании ассемблеровских кодов синтаксис, пусть и старого поколения, но дающий и представляющий определенный смысл с точки зрения "микроэлектроники".
Надеюсь Вы понимаете меня
0
Мотороллер
434 / 245 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
Завершенные тесты: 1
09.10.2013, 23:24 13
сегменты это вообще дань операционной системе. можно в фасме создать чистый бинарник из программного кода, это и приблизит Вас к железу. а вообще фасм не лешает Вас "железности"-"процессорности", ибо все команды процессора сохранены
0
Mikl___
Ушел с форума
Автор FAQ
13758 / 6824 / 747
Регистрация: 11.11.2010
Сообщений: 12,256
10.10.2013, 04:02 14
goldov,
людям вообще свойственно упрощать свою жизнь, а у ТС тяга к обратному
Цитата Сообщение от goldov Посмотреть сообщение
У меня же другая цель - поближе познакомиться с "железом" и "микропроцессорной архитектурой" и поэтому использовать при написании ассемблеровских кодов синтаксис, пусть и старого поколения, но дающий и представляющий определенный смысл с точки зрения "микроэлектроники".
Попробуй писать в машинных кодах, но помни, что у тебя впереди еще примерно лет 50 чтобы перейти к очевидному — использовать компилятор ассемблера (MASM/FASM/HLA) со всеми "высокоуровневыми наворотами", назначение компьютера — вычислять, назначение программиста — творить, и не нужно подменять программистом компьютер — всёравно компьютер точнее, последовательнее и меньше делает ошибок из-за невнимательности
0
goldov
1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 40
10.10.2013, 22:49  [ТС] 15
Mikl и Мотороллер, спасибо за сообщения.
"...у ТС тяга к обратному..." - на самом деле это не так - наверное вы также учились в Советской или экс-Советской школе - от простого к сложному - то есть от "low level" к "high level" (или к "low level with high attributes" - hla/fasm/masm).
1) имеется ли литература по написанию программ в машинных кодах ?
2) где и в какой литературе и документации можно узнать все о машинных кодах,
конкретно для Intel-микропроцессоров и др. ?
2) можно ли открыть текстовый редактор и набрать в нем машинные коды как комбинация "1" и "0" ?
а затем записать файл с расширением ".exe" ? и затем запустить такой файл и ожидать что он будет работать правильно ?
3) отличаются ли машинные коды в рамках одного семейства компьютеров-процессоров ?
4) отличаются ли машинные коды для микропроцессоров Intels, AMD, Apples, и т.д. ?
Спасибо.
0
Mikl___
Ушел с форума
Автор FAQ
13758 / 6824 / 747
Регистрация: 11.11.2010
Сообщений: 12,256
11.10.2013, 05:08 16
Цитата Сообщение от goldov Посмотреть сообщение
имеется ли литература по написанию программ в машинных кодах ?
В Гугл спросить, конечно, не судьба?
Цитата Сообщение от goldov Посмотреть сообщение
где и в какой литературе и документации можно узнать все о машинных кодах, конкретно для Intel-микропроцессоров и др. ?
На сайте Intel
  • Intel ® 64 and IA-32 Architectures Optimization Reference Manual
  • Intel ® 64 and IA-32 Architectures Software Developer’s Manual Volume 1: Basic Architecture
  • Intel ® 64 and IA-32 Architectures Software Developer’s Manual Volume 2A: Instruction Set Reference, A-M
  • Intel ® 64 and IA-32 Architectures Software Developer’s Manual Volume 2B: Instruction Set Reference, N-Z
  • Intel ® 64 and IA-32 Architectures Software Developer’s Manual Volume 3A: System Programming Guide, Part 1
  • Intel ® 64 and IA-32 Architectures Software Developer’s Manual Volume 3B: System Programming Guide, Part 2
Цитата Сообщение от goldov Посмотреть сообщение
можно ли открыть текстовый редактор и набрать в нем машинные коды как комбинация "1" и "0", а затем записать файл с расширением ".exe" ? и затем запустить такой файл и ожидать что он будет работать правильно ?
Шутишь?
Цитата Сообщение от goldov Посмотреть сообщение
отличаются ли машинные коды в рамках одного семейства компьютеров-процессоров ?
Нет, в пределах семейства х86 не различаются
Цитата Сообщение от goldov Посмотреть сообщение
отличаются ли машинные коды для микропроцессоров Intels, AMD, Apples, и т.д. ?
Для Intel и AMD совпадают, для остальных различаются
1
goldov
1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 40
11.10.2013, 12:11  [ТС] 17
Mikl, спасибо за ответное сообщение.
0
Мотороллер
434 / 245 / 43
Регистрация: 05.08.2013
Сообщений: 1,670
Завершенные тесты: 1
11.10.2013, 16:24 18
Цитата Сообщение от Mikl___ Посмотреть сообщение
Шутишь?
не тот смайл выбрал
0
Mikl___
Ушел с форума
Автор FAQ
13758 / 6824 / 747
Регистрация: 11.11.2010
Сообщений: 12,256
11.10.2013, 17:23 19
Цитата Сообщение от Мотороллер Посмотреть сообщение
не тот смайл выбрал
Мотороллер,
а какой нужно было? Такой?
Пример первый

Не слышали о программе bugaga.com?
Запускаем программу notepad.exe, пишем слово: «bugaga» или «bu» или просто «b» – результат всё равно будет одним и тем же – поэтому остановимся на однобуквенном варианте. Сохраняем документ под именем bugaga.com и запускаем. Открывается консольное окно, в котором ничего не происходит, висит курсор и все. Возвращаемся в файл-менеджер (или Проводник) и запускаем bugaga.com еще раз. Во втором окне курсор скачет по всему окну, а в первом курсор пропадает вообще. Программа грузит процессор на все 100%. Если к компьютеру подключен LPT-принтер, на него вываливаются пустые страницы.
Открываем файл bugaga.com любым дизассемблером. Получаем текст программы из одной команды:
командатекстhex-код
bound ax,[bx+si] b 62h
При старте com-программы содержимое регистров AX=BX=SI=0, в ячейке ds:[0000]=0CD20h, в ячейке ds:[0002]=9FFFh, команда bound сравнивает значение в регистре AX с диапазоном значений в ячейках, на которые указывают BX и SI, первое значение – это нижний индекс, второе – верхний. Так как значение в AX за пределами указанного диапазона значений, то возбуждается прерывание с номером 5. Если удерживать клавишу ctrl увеличивает скорость перемещения курсора. Программа выкидывает ВО ВСЕ ВЫХОДНЫЕ ПОТОКИ пробелы. Принтер пробелы не печатает, а просто двигает головку. Так как команды RET или int 20h в программе нет – программа зациклится.
Пример второй

У Криса Касперского есть статья Ассемблерные головоломки или "Может ли машина понимать естественный язык"?
В статье рассказано, как любую дикую на первый взгляд мысль можно довести до практического воплощения. Ниже таблички из этой статьи, может быть ТС пригодятся
Символ Команда Опкод
& es: 26h
. DDA 27h
. CS: 2Eh
/ DAS 2Fh
? AAS 3Fh
@ INC AX 40h
[ POP BX 5Bh
\ POP SP 5Ch
] POP BP 5Dh
^ POP SI 5Eh
_ POP DI 5Fh
` PUSHA 60h
> DS: 3Eh
6 ss: 36h
7 AAA 37h
A INC CX 41h
a POPA 61h
B INC DX 42h
b BOUND 62h
C INC BX 43h
c ARPL 63h
D INC SP 44h
d FS: 64h
E INC BP 45h
e GS: 65h
F INC SI 46h
f size: 66h
G INC DI 47h
g addr: 67h
H DEC AX 48h
I DEC CX 49h
J DEC DX 5Ah
K DEC BX 4Bh
L DEC SP 4Ch
M DEC BP 4Dh
N DEC SI 4Eh
O DEC DI 4Fh
P PUSH AX 50h
Q PUSH CX 51h
R PUSH DX 52h
S PUSH BX 53h
T PUSH SP 54h
U PUSH BP 55h
V PUSH SI 56h
W PUSH DI 57h
X POP AX 58h
Y POP CX 59h
Z POP DX 5Ah
Однобайтовые команды

Символ Команда Опкод
$ AND AL,im8 24h
% AND AX, im16 25h
4 XOR AL, im8 34h
5 XOR AX, im16 35h
, SUB AL, im8 2Ch
- SUB AX,im16 2Dh
< CMP AL, im8 2Ch
= CMP AX, im16 3Dh
Двух- и трех-байтовые команды
0
goldov
1 / 1 / 0
Регистрация: 06.07.2012
Сообщений: 40
11.10.2013, 19:23  [ТС] 20
Mikl и Мотороллер, спасибо еще раз за интересные и полезные коментарии.
0
11.10.2013, 19:23
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2013, 19:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Подскажите начинающему
Здравствуйте очень хотелось бы научиться создавать сайты подскажите пожалуйста сайты где можно...

Совет начинающему
Ситуация такая:начал учить паскаль,простые программы по типу if.. writeln и все такое-...

Git начинающему
Всем доброго времени помогите разобраться пожалуйста. Только столкнулся с Git и мне не совсем...

Подскажите начинающему..:)))
Я отрисовываю табличку результата базы данных, как мне прописать в ссылке в каждой строке таблицы...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.