Есть ли общая сборка ISA для изучения?Если нет, то какой я должен учиться? - PullRequest
0 голосов
/ 16 ноября 2018

Я изучил программирование сборки процессора 8086 Intel в колледже. Я сейчас пытаюсь пересмотреть это.

Я слышал, что сборка требуется в Автомобильных встраиваемых системах , поэтому я хочу знать, какой способ обучения является лучшим? Мне не нужно терять время, потому что я хочу получить работу.

Действительно ли помогает пересмотр сборки 8086? Или лучше перейти на 32-битную сборку x86?

Спасибо.

1 Ответ

0 голосов
/ 17 ноября 2018

Ваш заголовок задает совершенно другой вопрос, нежели тело.Как правило, вы должны задать один простой вопрос.

Нет, общего синтаксиса сборки нет - или на самом деле он есть, но вы, вероятно, не имеете в виду, что синтаксис сборки обычно :

[<label>:] <opcode> <operands> [<comment>]

илипохоже.

Для x86 на самом деле существует два общих синтаксиса - Intel и AT & T (с несколькими вариантами синтаксиса Intel от разных ассемблеров, включая совершенно разные директивы для строк, которые не являются инструкциями), но они и другие являютсяболее или менее такой формы.

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

Действительно ли помогает пересмотр сборки 8086?Или лучше перейти на что-то вроде 32-битной сборки?

16-битный 8086 ассемблер используется редко (вне обучения, как в вашем случае), и x86 в целомобычно это не автомобильное устройство, если это то, что вас интересует. «32-битная сборка» - это не вещь, если только вы не имеете в виду 32-битную сборку x86.

Изучение языка ассемблера полезнодля понимания основ работы компьютера - возможно, поэтому вас учили устаревшему набору инструкций, потому что цель состоит не в том, чтобы кодировать его, а в том, чтобы понять фундаментальные принципы.Это, в свою очередь, может привести к написанию лучшего высокоуровневого языкового кода, который компилируется в меньший, более быстрый код машинного языка.Это также может быть полезно при отладке высокоуровневого кода - иногда вам нужно перейти на уровень инструкций, чтобы понять, почему сгенерированный компилятором код не выполняет то, что вы ожидаете.Но для этого вам нужно только уметь читать сборку, а не записывать это.

Язык ассемблера для больших массивов кода, который может быть реализован в системный уровень язык, такой как C или C ++, является ненужным и непродуктивным.Компилятор не только является экспертом в наборе команд целевого машинного кода, так что вам не обязательно это делать, но язык высокого уровня также с большей вероятностью будет поддерживаться широким набором инструментов для тестирования, валидации и статического анализа.анализ безопасности, анализ производительности и обнаружение ошибок.Код также будет более понятным, более пригодным для повторного использования и сможет извлечь выгоду из более широкого спектра сторонних библиотек.

Также посмотрите на это так, так что вы являетесь экспертом в сборке PIC, например,но ваша следующая работа - ARM Cortex-M, теперь вы уже не являетесь экспертом и будете писать гораздо худший код, чем сгенерирует компилятор, и на это уйдет гораздо больше времени.Тогда вы безработный.

На большой базе кода современный оптимизирующий компилятор может сделать лучшую работу по созданию эффективного asm, чем мог бы или мог бы сделать человек, за исключением нескольких важных циклов, к которым вы можете вернуться имелодия (либо путем настройки C, либо переписав этот цикл в asm).Встраивание и постоянное распространение сложно в asm, но компиляторы превосходны в этом.Это особенно верно для процессоров, которые являются хорошими целями компилятора и на которые разработчики компилятора потратили много времени, например на x86 или ARM.

...