<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=101330&amp;view=findpost&amp;p=769331</guid>
        <pubDate>Wed, 06 Jul 2005 11:31:30 +0000</pubDate>
        <title>Формат машинных команд IA-32</title>
        <link>https://forum.sources.ru/index.php?showtopic=101330&amp;view=findpost&amp;p=769331</link>
        <description><![CDATA[miksayer: <div class='tag-align-center'><span class='tag-size' data-value='13' style='font-size:13pt;'><span class="tag-color tag-color-named" data-value="blue" style="color: blue"><strong class='tag-b'>Формат машинных команд IA-32</strong></span></span></div><br>
Сейчас существует несколько сотен языков. Почти все компиляторы при компиляции транслируют программы в язык ассемблера. Ассемблер в свою очередь транслирует программу в особые комбинации нулей и единиц – машинный язык. Таким образом, компьютер понимает только один язык – язык машинных команд. На первых компьютерах все программы писались на машинном языке, но в 50-х гг. стали испольовать символический аналог машинного языка – язык ассемблера. Давайте посмотрим как на уровне формата машинной команды соответсвуют между собой машинные команды и команды ассемблера. Рассмотрим простейшую команду ассемблера:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">mov ebx, eax</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
На машинном языке это будет выглядеть так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">8B D8</div></ol></div></div></div></div><br>
8B – это код операции. Теперь рассмотрим еще один пример:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">mov ecx, 128</div></ol></div></div></div></div><br>
А на машинном языке ей соответсвует:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">B9 00000080</div></ol></div></div></div></div><br>
Код операции – B9. Отсюда можно сделать вывод, что прямого соответсвия между структурой команды ассемблера и соответсвующей машинной команды нет. Хотя команда одна и та же, коды операции разные. Большинство команд ассемблера имеют несколько возможных вариантов сочетания операндов. Это говорит о том, что машинная команда всегда однозначна по отношению к производимым ею действиями на уровне аппаратуры. Код операции является номером микропрограммы в блоке микропрограммного управления для каждой конкретной команды ассемблера с каждым конкретным вариантом сочетания операндов. Логически любая команда ассемблера содержит несколько элементов:<br>
1.Элемент, опиывающий, что делать, называется кодом операции(далее КОП).<br>
2.Элементы, описывающие объекты, с которыми нужно что-то делать, называются операндами. Операнды могут не задаваться, а подразумеваться по умолчанию<br>
3.Элементы, описывающие, как делать, называются типами операндов и обычно задаются неявно.]]></description>
        <author>miksayer</author>
        <category>Assembler FAQ</category>
      </item>
	
      </channel>
      </rss>
	