Домашнее задание для ПО 1.11 по системному программированию от 07.04.20
учебно-методический материал

Склемин Алексей Анатольевич
Встроенный ассемблер

При написании ассемблерных вставок используется следующий синтаксис:

_asm КодОперации операнды ; // комментарии

КодОперации задает команду ассемблера,
операнды – это операнды команды.
В конце записывается ;, как и в любой команде языка Си.
Комментарии записываются в той форме, которая принята для языка Си.
Если требуется в текст программы на языке Си вставить несколько идущих подряд команд ассемблера, то их объединяют в блок:

_asm
{
текст программы на ассемблере ; комментарии
}

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

Пример Даны целые числа а и b. Вычислить выражение a+5b.
Для вывода приглашений Введите a: и Введите b: используем функцию CharToOem(_T(«Введите «),s),
где s – указатель на строку, которая перекодирует русскоязычные сообщения.

#include <stdio.h>
#include <windows.h>
#include <tchar.h>
void main()
{
  char s[20];
  int a, b, sum;
  CharToOem(_T(«Введите «),s);
  printf(«%s a: «, s);
  scanf(«%d»,&a);
  printf(«%s b: «,s);
  scanf(«%d»,&b);
  _asm
  {
    mov eax, a;
    mov ecx, 5
m: add eax, b
    loop m
    mov sum, eax
  }
  printf(«\n %d + 5*%d = %d», a, b, sum);
  getchar(); getchar();
}

Для компоновки и запуска программы создаем проект как описано в разделе Создание консольных приложений.

По теме: методические разработки, презентации и конспекты

Домашнее задание для ПО 1.11 по системному программированию от 04.02.20

Шестнадцатеричное представление Представим, что необходимо просмотреть содержимое некотоpых байт в памяти. Требуется oпределить содержимое четырех последовательных байт (двух слов), которые имеют двои...

Домашнее задание для ПО 1.11 по системному программированию от 11.02.20

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