Форум программистов, компьютерный форум, киберфорум
Низкоуровневое программирование
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.87/39: Рейтинг темы: голосов - 39, средняя оценка - 4.87
1 / 1 / 0
Регистрация: 23.10.2018
Сообщений: 28
1

Супер быстрый курс обучения для "знакомства" с ассемблером

24.11.2019, 07:37. Показов 7752. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Обращаюсь к тем ребятам, которые уже чего-то достигли в изучении ассемблера, впитали информацию от кучи источников и могут порекомендовать стратегию изучения.
Постановка задачи:
нужно за месяц (тратя часов 4 в неделю на ассемблер чисто на выходных) как можно быстрее обучиться поверхностно ассемблеру, чтобы писать программки типа поиска максимального числа , считывание и форматирование строки, сортировка массива...
Зачем мне это нужно?
Через месяц-полтора у нас экзамен в университете. Сам ассемблер оставили на самостоятельное обучение и много не требуют. Нужно освоить его на уровне "познакомиться каплю, взглянуть краем глаза что это такое и забыть". Т.к. я специализируюсь на джаве, си, гоу и все силы бросаю туда, то нужно порекомендовать самый легкий и понятный для чайников ресур обучения или курс какой нибудь или понятный и адекватный канал на ютубе... чтобы без подводных камней, чисто поверхностно, без забеганий в дебри и самое основное, т.к. времени нет совсем.

Т.к. я ничего не смыслю в ассемблере, то мне даже не с чем сравнить. Но попробую привести аналогию с языком СИ:
Мне нужно как можно быстро освоить ассемблер на уровне, как если бы я на СИ разобрал бы только :"объявление переменных, условные конструкции, циклы, массивы поверхностно ну и прорешав мини задачки на 10 строк чисто на отработку синтаксиса". На СИ это все новичку можно было бы поднять за недельку, если бы подсунуть ему какую нибудь быструю методичку или канал на ютубе для подготовки.
Благодарю!
P.S читать книжки на 300 страниц не нужно советовать.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2019, 07:37
Ответы с готовыми решениями:

Какой курс лучше для обучения java?
http://www.youtube.com/user/KharkovITCourses/videos?query=java++core или...

Супер-быстрый перебор
Используя минимальное количество библиотек(Вместо iostream - stdio.h) сделать рекурсивный перебор:...

курс обучения
народ,кто учил линукс в универах или спец курсах, поделитесь пжлст планом обучения. набор заданий...

Интерактивный курс обучения
Есть запись записанная с экрана компьютера необходимо вставить в этой видео интерактив: Что б...

20
530 / 180 / 38
Регистрация: 18.08.2012
Сообщений: 904
24.11.2019, 08:06 2
Цитата Сообщение от GpvpHoobastank Посмотреть сообщение
читать книжки на 300 страниц не нужно советовать.
Цитата Сообщение от GpvpHoobastank Посмотреть сообщение
можно было бы поднять за недельку
Цитата Сообщение от GpvpHoobastank Посмотреть сообщение
поверхностно
Цитата Сообщение от GpvpHoobastank Посмотреть сообщение
или канал на ютубе для подготовки.
смешно....
полное непонимание, а точнее - отсутствие понимания сути предмета.
иди ищи свой ютуб-канальчик а ля:
весь асм. от чайника до про - за 60 мин
lol
<без обид>

P.S
я уже более 20 лет в асме и в реверсе и то, всё учусь чему-то новому.
3
Ушел с форума
Автор FAQ
16279 / 7604 / 1065
Регистрация: 11.11.2010
Сообщений: 13,617
24.11.2019, 08:57 3
GpvpHoobastank,
ассемблер это не единый язык, а куча диалектов для каждого микропроцессора. Для AMD/Intel одни (masm, tasm, fasm, lzasm, a386 и т.д.), для микроконтроллеров другие, для мейнфреймов третьи. Программы на ассемблере даже под AMD/Intel будут отличаться в зависимости от предназначенной операционной системы (DOS, Windows, Linux и т.д.), в них по разному будет происходить вывод на экран и печать, работа с файлами, памятью и т.д. и т.п.
1
Модератор
2121 / 991 / 169
Регистрация: 23.07.2018
Сообщений: 3,328
Записей в блоге: 3
24.11.2019, 11:01 4
GpvpHoobastank, как хоть курс называется?
Есть ли учебный план, список тем для изучения, примерный список экзаменационных вопросов и заданий и т.д.?
1
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
24.11.2019, 14:00 5
Лучший ответ Сообщение было отмечено GpvpHoobastank как решение

Решение

GpvpHoobastank, легче чем эту книжку по ассемблеру ты ничего не найдешь.. все разжевано и в рот положено..

Скляров И. Изучаем Assembler за 7 дней.pdf
5
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
24.11.2019, 22:30 6
Цитата Сообщение от GpvpHoobastank Посмотреть сообщение
Т.к. я специализируюсь на джаве, си, гоу и все силы бросаю туда,
Создете 8-мь РОН'ов AX, BX, CX, DX, DI, SI, BP, SP типа word. Создаете стек типа LIFO=last-in-first-out, размер ячейки WORD. И пишите свой код на JAVA, C/C++, но только с использованием этих РОН'ов(в памяти могот быть и другие переменные, но все операции Вы делаете только с РОН'ами), при этом операции + превращаете в ADD, минус = SUB и так далие.

У Вас быстро пропадет абстракция ЯВУ.
3
1 / 1 / 0
Регистрация: 23.10.2018
Сообщений: 28
24.11.2019, 23:36  [ТС] 7
вот это прикольно) но думаю преподаватель не оценит )

Добавлено через 1 минуту
спасибо за совет по книжке Скляров И. Изучаем Assembler за 7 дней.pdf .
Думаю первых 100 страниц мне должно хватить)
0
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
24.11.2019, 23:47 8
Цитата Сообщение от GpvpHoobastank Посмотреть сообщение
Думаю первых 100 страниц мне должно хватить)
вот так войдешь во вкус, потом уже будет не остановить..
2
170 / 57 / 6
Регистрация: 21.05.2017
Сообщений: 68
25.11.2019, 00:03 9
Hint: Во многих книгах первые 100 страниц про DOS и BIOS. Не трать на это время.
1. Определить с железом: что ты хочешь программировать: АЛУ, сопроцессор, MMX, SSE, AVX?
2. Определись с ОС: win32, win64, nix?
3. Определись с ассемблером: имхо, доступнее всего fasm, потому что Томаш Грыштар - гений.
Он (Томаш) поддерживает современные инструкции, хорошо задокументирован, имеет форум.
Ещё из ништяков - .inc-файлы и наглядные примеры прямо в пакете fasm.
Как только определился - строго по графику:
1) две минуты на консольный или диалоговый хэллоуворлд (пример есть в пакете fasm),
2) десять минут на полноценный оконный хэллоуворлд (пример тоже в наличии),
3) вся жизнь для творчества.
P.S. А вообще для изучения языка ассемблера не обязателен процессор. Достаточно тетради в клеточку.
Upd: про отладчик чуть не забыл. Olly или x32/64/96dbg
2
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
25.11.2019, 00:12 10
Лучший ответ Сообщение было отмечено Mikl___ как решение

Решение

Цитата Сообщение от ml64 Посмотреть сообщение
Достаточно тетради в клеточку
и перо с чернильницей..
3
Модератор
2121 / 991 / 169
Регистрация: 23.07.2018
Сообщений: 3,328
Записей в блоге: 3
25.11.2019, 05:22 11
Можно ещё поискать обучалки для Android. Но тогда первые выходные легко растратить без толку.
GpvpHoobastank, какая система у Вас основная? На чём Вы чаще всего программируете?
1
Прощай, Мир!
1672 / 830 / 253
Регистрация: 26.05.2012
Сообщений: 3,056
26.11.2019, 16:49 12
Цитата Сообщение от politoto Посмотреть сообщение
поискать обучалки для Android
на кого бы повесить такой поиск.. так интересно было бы глянуть такую обучалку..
1
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
26.11.2019, 17:34 13
Цитата Сообщение от GpvpHoobastank Посмотреть сообщение
вот это прикольно) но думаю преподаватель не оценит
Он оценит. Таким образом Вы на ЯВУ, делеете эмулятор х86, (не bin -кода, а инструкций), с bin-код, т.е. нужно делать Дизассемлер. А так: Вы делаете эмулятор. на каком Вы курс-, держите эту тему, к финалу Вы эту тему либо сделаете, либо нет,
Но под элюзией деятельности, "могете" подучить некоторые плюсы
1
Модератор
2121 / 991 / 169
Регистрация: 23.07.2018
Сообщений: 3,328
Записей в блоге: 3
29.11.2019, 10:38 14
Не очень длинный учебник. Или длнинный?
https://ru.wikibooks.org/wiki/... BE%D0%B2_C

Assembly в картинках в двух коротеньких частях на примере
https://derekmaciel.com/2017-0... bly-part1/
https://derekmaciel.com/2017-0... bly-part2/
2
Заблокирован
01.12.2019, 02:31 15
Самый крутой это Том Сван, но прочитаешь его после тридцати или вообще когда захочешь.
Остальное всё хлам.

Вот сейчас самое наикрутейшее пособие всех времен и народов, читать можно откуда пожелаешь...
http://erfaren.narod.ru/Asm/asm.htm
1
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
02.12.2019, 17:59 16
Лучший ответ Сообщение было отмечено Mikl___ как решение

Решение

Цитата Сообщение от f34r Посмотреть сообщение
Том Сван
Круто, но у каждого юзера свой автор от Аблязова до Юрова, ТС прочитает их все, но кодить начнет, только после прочтения своего автора, вернее его книги, которую он поймет.
1
170 / 57 / 6
Регистрация: 21.05.2017
Сообщений: 68
15.12.2019, 21:54 17
Цитата Сообщение от GpvpHoobastank Посмотреть сообщение
объявление переменных, условные конструкции, циклы, массивы поверхностно
ОК. Если ещё актуально. Индексируем вопросы:
(1) объявление переменных, (2)условные конструкции, (3) циклы, (4) массивы поверхностно.


Поехали:
1) объявление переменных.
Особенность: все переменные кодируются 0 и 1. Но точно так же 0 и 1 кодируются инструкции!
Поэтому важно отличать данные (data) и код (code).
Поэтому они объявляются в раздельных сегментах, например:
.const, .data, .data? - для данных,
.code - для кода.
Есть нюансы (например, объявление локальных переменных в процедурах, но пока что хрен с ними).
Теперь о размерах:
Assembler
1
2
3
4
varByte db 0FFh ;Переменная 1 байт = 8 бит. Соответствует типам BYTE и BOOL на C++
varWord dw 0FFFFh ;Переменная 2 байтa (слово) = 16 бит. Соответствует типу WORD на C++
varDoubleWord dd 012345678h ;Переменная 4 байтa (двойное слово) = 32 бита. Соответствует типу DWORD на C++ и - что очень важно - в 32-битных системах достаточна для хранения адреса! Т.е. в 32-битных системах может соответствовать HINSTANCE, HICON, LPSTR и вообще всем дескрипторам, указателям и всяческим хэндлам.
varQuadWord dq 0123456789ABCDEFh ;Переменная 8 байт (двойное слово) = 64 бит. Соответствует типу QWORD на C++ и в 64-битных системах может соответствовать тем же HINSTANCE, HICON, LPSTR и т.д.
Есть ещё XMMWORD (128 бит) и YMMWORD (256 бит), но это НЁХ.
Ещё один момент: ты работаешь с памятью напрямую.
Можешь вообще не объявлять переменные. Помни/вычисляй адрес и длину. Тогда будут эквивалентными инструкции:
Assembler
1
mov rax,varQuadWord ;записать в регистр RAX значение 64-битной переменной, адрес которой ассемблер сопоставил имени "varQuadWord" при ассемблировании
и
Assembler
1
mov rax,qword ptr [0123456789ABCDEFh] ;записать в регистр RAX значение 64-битной (qword ptr) переменной, адрес которой ты вычислил [в квадратных скобках]
4) массивы поверхностно.
Всё аналогично.
Объявляются, естественно, в сегметне данных.
Синтаксис такой:
Assembler
1
2
3
4
var10Byte db 10h dup (0FFh)
var100Word dw 100h dup (0FFFFh)
var1000DoubleWord dd 1000h dup (012345678h)
var10000QuadWord dq 10000h dup (0123456789ABCDEFh)
А если до начала известны значения
Assembler
1
varByte db 21, 35, 67
Как обращаться к элементам массива:
Assembler
1
2
lea rax,varByte ;запиши в регистр RAX адрес переменной varByte
mov bl, byte ptr [rax+1] ;в подрегистре BL будет значение 35 = 23h

2)условные конструкции
Тут все конструкции более чем условные
Например, можно задать структуру, как в C++:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
WNDCLASSEX64 STRUCT
    cbSize dd ?
    style dd ?
    lpfnWndProc dq ?
    cbClsExtra dd ?
    cbWndExtra dd ?
    hInstance dq ?
    hIcon dq ?
    hCursor dq ?
    hbrBackground dq ?
    lpszMenuName dq ?
    lpszClassName dq ?
    hIconSm dq ?
WNDCLASSEX64 ENDS
Объявляются они так:
Assembler
1
    wndclass WNDCLASSEX64 ?
Обращаться к ним так:
Assembler
1
2
    mov wndclass.cbSize,50h ;sizeof (wndclass)
    mov wndclass.style,3 ;CS_HREDRAW | CS_VREDRAW

3) циклы
процессор Intel знает инструкцию loop, но она работает с регистром cx, который в 64-битных системах задействован при вызове функций.
Поэтому циклы тупо реализуются через переходы
Assembler
1
2
3
4
5
6
7
    mov rax,0 ;задаём некое начальное значение
lblLoop: ;Создадим метку для начала цикла
    mov cl,8 ;цикл из 8 итераций (для примера оставим счётчик в регистре CL, хотя это опасно)
    inc rax ;некоторое действие, например, увеличим значение RAX на 1
    dec cl ;уменьшим значение счётчика цикла на 1
    cmp cl,0 ;сравним cl с нулём
    jg lblLoop ;если CL ещё больше 0, тогда в начало цикла
Вот как-то так, если коротенько...
Чтобы не тратить время на Ричарда Блюма и разные мануалы, а сохранить его для Вирта, Кнута и фон Неймана...
До 30...
Тогда после 30 можно и Аристотеля с Платоном успеть полистать...
1
3406 / 1825 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
16.12.2019, 14:58 18
Вы так поверхностно ещё больше запутаете:
Цитата Сообщение от ml64 Посмотреть сообщение
Поэтому циклы тупо реализуются через переходы
Вы написали
Цитата Сообщение от ml64 Посмотреть сообщение
;цикл из 8 итераций
а цикл бесконечный

Цитата Сообщение от ml64 Посмотреть сообщение
условные конструкции
Это операторы условного перехода, а не сложные типы данных.

Цитата Сообщение от ml64 Посмотреть сообщение
Поэтому важно отличать данные (data) и код (code).
Поэтому они объявляются в раздельных сегментах,
Данные могут находится везде: в сегменте данных, в стека(локальные переменные) и даже кода(ЯВУ полюбляют прятать данные в коде). Код тоже может находится везде: в сегменте кода, в сегменте и даже в стеке(к примеру К.Касперски любил исполняемый стек).

Добавлено через 2 часа 24 минуты
Забыл довавить все - и код, и данные и стек могут находится в одном сегменте. Все зависит от того, что проходит через CS : IP - это код, все, что проходит через SS : SP - стек. А все остальное может данными.
3
Модератор
2121 / 991 / 169
Регистрация: 23.07.2018
Сообщений: 3,328
Записей в блоге: 3
17.12.2019, 08:57 19
Можно сразу увидеть, какой код генерируют различные компиляторы языков высокого уровня
для всевозможных языковых конструкций
https://godbolt.org/

Есть, чем заняться в оставшиеся 2-3 недели!
3
170 / 57 / 6
Регистрация: 21.05.2017
Сообщений: 68
21.12.2019, 23:04 20
Цитата Сообщение от Constantin Cat Посмотреть сообщение
ещё больше запутаете
Млин. Жалко, что нельзя пост править.
Во всех отмеченных случаях подразумевал одно, а написал другое.
С циклом особенно глупая ошибка. Прости, GpvpHoobastank...

Добавлено через 50 секунд
Цитата Сообщение от politoto Посмотреть сообщение
https://godbolt.org/
Моя жизнь не будет прежней...
1
21.12.2019, 23:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.12.2019, 23:04
Помогаю со студенческими работами здесь

Нужен хороший курс обучения
Нужен хороший курс (видео, книга, неважно что главное чтобы было понятно) для обучения Паскалю. Не...

Где можно найти хороший курс обучения Visual Basic?
Подскажите, пожалуйста, где можно найти хорошую обучалку по Visual Basic..Точнее не просто с Visual...

Комбинация обучения с учителем и обучения без учителя для извлечения знаний
Здравствуйте! :) Хотелось бы обратиться к знающим людям в области применения машинного обучения...

Ищу людей для совместного обучения в области машинного обучения
Пишу на питоне посредством библиотеки keras. Было бы неплохо, например, работать над одним...

Создать базовый класс Student, который будет содержать информацию о студенте (фамилия, курс обучения, номер зачетной кни
Создать базовый класс Student, который будет содержать информацию о студенте (фамилия, курс...

что лучше купить 9700к с 2060 супер или 3600 с 2070 супер?
для игрушек но вдруг потом буду стримить


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

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