Машинная команда, инструкция, команда Ассемблера – что это?

Тема в разделе "WASM.ASSEMBLER", создана пользователем Bitfry, 20 июн 2005.

  1. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759




    Тем лучше, ;) а где есть и где нету HLL-макросы, мне по барабану -- я их не использую (чего и другим желаю). FASM пробовал, но слишком долго писал на TASM, не отвыкнуть так просто.
     
  2. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Bitfry

    Читать IA-32, volume 2: Instruction Set Reference.



    Машинных "команд" там конечно не найдешь - видимо это достояние "великого и могучего" русского языка. А вот mashine-level instructions есть. Поэтому будем считать, что "машинная команда" = "инструкция процессора".



    В разделе General Instruction Format видим общий формат записи инструкции, включающий: префиксы, опкод, байт ModR/M, SIB-байт, смещение, непосредственный операнд. Каждая инструкция является подмножеством этого общего формата. Неотъемлемой частью инструкции ес-но является опкод.

    Поэтому приходим к выводу: что инструкция это некая определенная последовательность бит машинного кода, которая распознается (декодируется) процессором как команда на выполнение определенных действий. Поэтому 50h и FFF0h являются разными инструкциями, выполняющими одно и то же действие push eax. Если говорить не о "машинной" команде, а о просто о команде (человека процессору), то команда push eax (= "записать eax по адресу esp и уменьшить esp на 4") может быть выполнена одной из двух инструкций процессора.



    В разделе Notational Convention видим определение мнемоники: мнемоника инструкции это зарезервированное символическое имя класса (опкодов) инструкций имеющих одинаковую функцию. Кроме мнемоники инструкции есть мнемоники регистров (их зарезервированные символические имена).

    Развивая эту логику, приходим к выводу, что команда ассемблера, например push eax - это символическая (мнемоническая) запись команды в соответствии с набором допустимых инструкций и мнемоник IA-32. Но ес-но у каждого диалекта Ассемблера могут быть свои собственные прибамбасы, в частности касающиеся записи операндов памяти или строковых констант.

    При компиляции программы каждой команде ассемблера ставится в соответствие определенная инструкция IA-32. Ежели команда может быть выполнена разными инструкциями, как в сл. с push eax, то какую из них выбрать определяет компилятор.

    Соответсвенно машинный код это последовательность инструкций. Это не только исторический термин, но и "объективная реальность" - процессор загружает и декодирует именно двоичный машинный код и человек может посмотреть (если че поймет ;) и подредактировать байтики этого кода в HEX-редакторе. А вот мешанина кода и данных - это действительно историческая привычка, не приветствуемая IA-32.
     
  3. Bitfry

    Bitfry New Member

    Публикаций:
    0
    Регистрация:
    11 авг 2004
    Сообщения:
    54
    Адрес:
    Россия, Санкт-Петербург
    leo

    Спасибо!

    Ты второй раз мне здорово помогаешь (если помнишь год назад было дело :).

    Спасибо!



    _BC_



    Григорьева я посмотрю, но на счёт Интела ты ИМХО неправ.

    Питер Абель - хороший автор, ты до сих пор так думаешь?

    Тогда какого лешего он считает, что РОН всего 4?

    В то время как создатели(!) этих самых РОН считают, что их 8.

    Там, в текстовой версии "Асм. и прог. для PC" Абеля, ещё много таких ляпов.

    Нельзя придумывать свои названия чужим вещам, к хорошему это не приведёт.

    До тех пор пока ты учишь сам, страшного ничего нет, а вот в научном диалоге, будет тупая разборка вместо сути.





    Я кстати сам терпеть не могу эти _конструкции_, но вреда особого в них не вижу.

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

    Вот когда эти _конструкции_ в дизасмовый вид проникнут, вот тогда будет вред :).



    ЗЫ Меня б сюда в модераторы всех бы забанил... и себя тоже =)… Кроме Седого и Лео :).
     
  4. The Svin

    The Svin New Member

    Публикаций:
    0
    Регистрация:
    6 июл 2003
    Сообщения:
    665
    Адрес:
    Russia
    Я вообще вводил свою терминологию когда считал это необходимым :)

    Если автор используя термины говорит типа "мы будем то-то называть тем-то" то это нормально если обосновано, беда в основном когда в документации используется слово как терм на которое не сложилось единого взгляда, но при этом не даётся определения.

    У нас в даже "самой строгой из наук" - математике, и то разброд, особенно в связанных с относительно "новыми" разделами (мат. логика, теория множеств и т.п.) но если автор зная это даёт себе труд дать что это значит в его труде - то это нормально.

    Когда читал классиков по интегральному и дифф. исчислениям - очень удивлялся как они там спорили чуть ли не столетие про то что такое производная и что такое "бесконечно малая". При этом они использовали с успехом результаты своих коллег в самой теме, и их разногласия по терминологии им не припятсвовало.



    Меня вот не всё устраивало в терминологии Intel, у них особенно в последнее время проблема - они пытаются объяснить что такое солнце слепому и шум прибоя глухому, т.е. найти слова и подход для высокоуровневого программиста в объяснении низкоуровневых вещей (это может не их вина а их беда, такой уж "средний" программист читатель в наше время).

    Я согласен с leo - основной источник - второй том, конец его. Но бывает трудно стартовать, схватить главное - ёмкости - поля, логика динамического определения длины кодирования и т.п. поэтому можно посмотреть в разделе "Образовательные программы" на Wasm обучалки и статьи. Обычно суть люди схатывают довольно быстро после обучалок,

    а после этого можно нырять во второй том, когда "порядок и мера" в этой области будут понятна - терминология уже с толку не собъёт.
     
  5. _BC_

    _BC_ БЦ

    Публикаций:
    0
    Регистрация:
    20 янв 2005
    Сообщения:
    759




    Ну, это вопрос терминологии. Если так подумать, то регистров _общего_ назначения нет совсем. У каждого есть какое-то свое специфическое назначение, типа ecx -- счетчик, eax -- acc, esp -- указатель стека, edi = dest и тд.

    Абель, вероятно, понимал под регистрами общего назначения регистры, к байтам которых произвольный доступ (AH/AL например). Если так считать, то тогда их действительно 4. ;)
     
  6. Bitfry

    Bitfry New Member

    Публикаций:
    0
    Регистрация:
    11 авг 2004
    Сообщения:
    54
    Адрес:
    Россия, Санкт-Петербург
    Для тех, кто через поиск пришёл.

    Новичкам будет полезно почитать тему Правки к Учебнику Юрова

    Во-первых, учебник этот - нужен. Во-вторых, там на второй стр. интересное замечание на счёт "360" команд.

    :) ИМХО на этом пояснении топик можно и закончить (но не закрывать).



    The Svin



    Именно. Но если вдруг они (хорошие термины) уже есть. Вот я и засомневался – может, велосипед уже запатентован.



    Истина!

    Все хором говорят:

    Pascal > C > C+Asm>и лучшие дойдут до Асм.

    Вот я и решил сразу в "лучшие" записаться :).

    Причём отговаривали от идеи "первый язык – Асм" долго и упорно все кто хоть что-то знает о программировании.

    Мало того у меня ещё и в математике =0 ... Да нет, ноль как раз вызывает наибольшие затруднения :).

    Именно из этих соображений ничего лучше Рассылки Калашникова для чайников-гуманитариев (недопеределанных) пока не нашёл. Но у него сплошные враки. Просто хоть всё ложью обзывай. :)

    Я набрался наглости "протащить" через "нулевой виток" других нюБЕСОВ с наименьшими потерями.

    Возникло непреодолимое желание написать "Начало" с меньшим количеством заблуд, чем у Калашникова. Учебник того же Юрова можно читать только со значительной подготовкой.

    Именно из-за этого у меня не пошли здешние туторы. Они предполагают, что Асм для тех, кто знает хоть один язык программирования (в новых реалиях ещё и под Win32). И хотя бы минимум математической подготовки.

    Иначе за программу чайник будет считать окошко с картинками.



    Начал читать Кнута – понял, для чего математика нужна :).

    А нет ли курса целочисленной математики на ассемблере (от третьего-четвёртого класса школы)? Что бы там верёвочки завязывать узелками и т.д. :)



    ЗЫ за маленькие задачки для крупных мозгов - отдельное спасибо.
     
  7. Oleg_SK

    Oleg_SK Guest

    Публикаций:
    0
    Bitfry

    Вы просили привести пример инструкции имеющей три операнда. Вот такие инструкции:

    SHRD приемник, источник, счетчик

    SHLD приемник, источник, счетчик

    они появились в процессорах начиная с 386.
     
  8. SeDoY

    SeDoY New Member

    Публикаций:
    0
    Регистрация:
    14 дек 2003
    Сообщения:
    31
    Адрес:
    Russia
    Bitfry



    Почитай еще статьи Aquila - Заклинание кода. Стиль изложения самобытный, думаю тебе понравится =) Смотреть тут!
     
  9. Bitfry

    Bitfry New Member

    Публикаций:
    0
    Регистрация:
    11 авг 2004
    Сообщения:
    54
    Адрес:
    Россия, Санкт-Петербург
    SeDoY

    Как раз на днях читал. Вспомнил, правда, что уже читал, но тогда от этого толку было около нуля.

    Для полных неофитов, слова FASM и NOP теряются где-то между Левиафаном и Гиеной огненной.

    А вот сейчас прочёл с радостью, много интересного и читать не скучно.

    Скоро так совсем читателем буду (писать перестану :).