Deita
@Deita

Почему после ассемблера учить Си легче?

Почему после языка ассемблера учить Си легче, и так ли это? На просторах YouTube объясняющих как работать с чистым Си, задал пару вопросов, а почему "так", а почему то "эдак". Ктото ответил, что надо попробовать поковырять языки ассемблера, и както проще будет многое понимать в Си, это правда, и если да, то какой и по какой книге, 8086 архитектуру? Или любая в принципе подойдёт просто по которой найду книжку?
  • Вопрос задан
  • 426 просмотров
Решения вопроса 5
includedlibrary
@includedlibrary
Я начинал учиться писать на языке ассемблера по книге Столярова: "Программирование на языке ассемблера NASM для ОС Unix", в ней основы даются, а дальше уже можно читать мануал с командами процессора. Я бы сказал, что изучать язык ассемблера после си проще, но обратное утверждение тоже верно, просто потому что после того, как научился программировать на языке ассемблера, программирование на любом другом языке уже не кажется таким сложным.

Или любая в принципе подойдёт просто по которой найду книжку?
Вообще любая, тут главное принцип понять, после этого можно взять мануал по любой архитектуре и писать спокойно под неё
Ответ написан
@res2001
Developer, ex-admin
Утверждение пожалуй верно.

Лично на мой взгляд это из-за того, что и в ассемблере и в Си есть указатели. Причем в ассемблере ничего кроме указателей для работы с памятью нет (имею ввиду именно оперативную память, а не регистровую или ПЗУ) и вам волей-неволей на ассемблере придется понять, что это такое и как реально работает память в компе. И с этими знаниями очень легко уже понять указатели в Си, т.к. это суть одно и то же, только синтаксис разный.

В Си же есть альтернатива - можно попытаться использовать только автоматические или глобальные переменные и не использовать указатели. Но более-менее большой проект с такими самоограничениями не возможен, на мой взгляд. Из-за наличия альтернативы использования памяти, тема указателей (и ручного управления памятью) в Си кажется сложной и многих отпугивает.
Но в реальности, понять Си гораздо проще, чем ассемблер. Так что не уверен, стоит ли подобная овчинка выделки.

Если вам для чего-то нужен ассемблер, то видимо, стоит с ним разобраться. Но разбираться с ассемблером для изучения Си - это какой-то садомазохизм. Си довольно простой ЯП. Ассемблер сам по себе то же не сложен, но что бы на нем что-то писать нужно хорошо знать и понимать архитектуру конкретного процессора.

У издательства ДМК пресс есть книжки по ассемблеру (в т.ч. по АРМ) и по архитектуре компьютеров, можете посмотреть у них на сайте, там же можно и купить. Что плохо, они не делают скидку на электронные книги, как многие другие.
Изучать нужно ассемблер под ту платформу, на которой вы сможете писать тестовые программы. Обычно это х86, но при наличии, например, малинки или апельсинки можно и АРМ попробовать.
Конечно можно и эмулятором воспользоваться, но это лишние проблемы. А может и не лишние - если уж вы хотите ассемблер, то это может пригодиться.
Ответ написан
Комментировать
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Изучать ассемблер стоит, потому что это вправляет мозги. У программиста появляется какое-то понимание того, как все на самом деле устроено, как вообще работает компьютер. Тут в первую очередь не про сам ассемблер, а про устройство ЭВМ, которое почти всегда дается вместе с ассемблером вместе.

Это понимание особенно важно тем, кто работает на относительно низкоуровневых языках (коим Си и является). Потому что абстракции не слишком далекие от ассемблера.

Те же указатели, конечно, можно объяснять и как номер коробочки с данными, но если знать, что это адрес в памяти, то как-то понятнее и почему индексация работает, и что происходит при выделении памяти. Понимание стека и как процессор вызывает функции объясняет, что происходит с локальными переменными и в чем разница между ними и данными, выделенными через malloc.

Еще один фактор: Учить язык более высокого уровня всегда легче после освоения языка более низкого уровня. Ну как после подготовки к марафону вам будет сильно проще ходить на 3-ий этаж пешком. Потому что там за счет абстрагирования и отдаления от предыдущего уровня, становится легче писать программы. Поэтому после ассемблера будет легче учить и питон и си++ и хаскель. А после си будет проще учить си++, чем если бы вы сразу взялись за си++. При этом учтите, что общее потраченное время и силы на изучение ассемблера + си может быть больше чем просто обучение си.

Но вообще, я бы советовал не учить сначала ассемблер. а потом си. Ибо досконально знать ассемблер вам не надо будет. Да и кучу времени потратите на него. Стоит учить их параллельно, не особо углубляясь в ассембрер. Сможете функцию вызвать, вывести на экран строку, сложить 2 введенных с экрана числа - уже хорошо.
Ответ написан
Комментировать
mayton2019
@mayton2019
Bigdata Engineer
Есть две трудности с которыми сталкиваются студенты изучая С. Это адресная арифметика и работа со строками.
Эти две темы зайдут легко если вы до этого уже знали Ассемблер.

Но мне в общем кажется странным такая хронология изучения. Какой ВУЗ такое дает? Если вы до этого
случайно знали Ассемблер - то это удивительный и исключительный факт. Насколько я знаю даже
безопасники и системотехники не очень изучают asm. Я-бы сказал факультативно.
Ответ написан
Комментировать
ValdikSS
@ValdikSS
Си даёт сравнительно маленькую абстракцию поверх ассемблера и почти не защищает программиста от некорректных действий во время выполнения. Не обязательно учить ассемблер, достаточно понимать то, что выдаёт отладчик и как выполняется программа.

Я рекомендую взять отладчик с хорошим интерфейсом, например, Ollydbg, в котором работа с памятью, инструкциями и регистрами видна наглядно на всех этапах, и поэкспериментировать с C-программами в нём.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы