Основы языка ассемблера

1- Система счисления

Концепция виртуальной машины в языках ассемблера:

Компьютерное оборудование и программное обеспечение связаны друг с другом посредством концепции, называемой Virtual Machine. Чтобы понять эту концепцию, рассмотрим программу, написанную на языке высокого уровня, таком как C++ или java. Теперь мы уже знаем, что компьютер выполняет инструкции в машинном коде, поэтому для преобразования этого кода высокого уровня в машинный код мы можем использовать интерпретацию (построчное преобразование в машинный код) или Компиляция всей программы в машинный код. С точки зрения виртуальной машины мы можем сказать, что сначала программа преобразуется из кода высокого уровня в код сборки на виртуальной машине 1, а затем эта сборка преобразуется в код машины на виртуальной машине 2.

Уровни инструкций

1-й уровень:

Уровень 1 может быть оборудованием цифровой логики.

уровень 2:

Instruction Set Architecture входит в уровень 2, где машинный язык выполняется программой, встроенной в компьютерный микропроцессор, называемой микропрограммой.

Уровень 3:

Именно здесь работает Assembly Language, который использует мнемонические символы, такие как ADD, SUB, MOV, которые переводятся на машинный язык.

уровень 4:

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

Двоичные целые числа:

Компьютер просто использует 0s и 1s на самом низком уровне, представляющем состояние off и on. Биты нумеруются последовательно, начиная с нуля справа и увеличиваясь слева. Бит слева называется most significant bit (MSB), а бит справа — least significant bit (LSB).

Что нужно помнить о Binary Integers:

  • Двоичные целые числа могут быть знаковыми или беззнаковыми.
  • Целые числа со знаком могут быть как положительными, так и отрицательными
  • Целое число без знака по умолчанию положительно
  • Ноль считается положительным‹
  • Точки могут быть вставлены после каждых четырех двоичных целых чисел для удобства чтения.

Преобразование двоичных целых чисел без знака в десятичные числа:

Чтобы перевести двоичное число в десятичное, мы начинаем слева и умножаем каждую цифру на степень 2. например, двоичное число 110 будет равно 6. Решение: 2E2 x 1 + 2E1 x 1+ 2E0 x 0 = 6, где 2En означает от 2 до raised power.

Преобразование десятичных чисел без знака в двоичные:

Чтобы перевести десятичное число в двоичное, мы многократно делим число на 2, сохраняя каждый остаток в виде двоичной цифры.

Мы можем объединить двоичные биты из остатка столбца таблицы в обратном порядке (D 5 , D 4 , . . .), чтобы получить двоичный код 100101. Поскольку память компьютера всегда состоит из двоичных чисел, длина которых кратна 8, мы заполняем оставшиеся две позиции цифр слева нулями, что дает 00100101.

Бинарное дополнение:

При добавлении двоичного числа имейте в виду, что 1+1 даст 10с 1 переносом к следующей цифре.

00000100 + 00000111 = 00001011

Целочисленные размеры хранилища (типы данных):

Базовая единица хранения на компьютере x86 — это byte, содержащее 8 bits. Некоторые типы данных

  • Байт 8 бит
  • Слово 16 бит
  • Двойное слово 32 бита
  • Квадратное слово 64 бита

Шестнадцатеричное дополнение:

Шестнадцатеричное сложение работает так же, как десятичное сложение. Шестнадцатеричное сложение используется для поиска новых адресов в памяти. Например, добавим шестнадцатеричные значения 6A2 и 49A. В самом младшем разряде 2 + A = decimal 12, поэтому переноса нет, и мы используем C для обозначения шестнадцатеричной суммы. В следующей позиции A + 9 = decimal 19, так что есть перенос, потому что 19 ≥ 16 числовая база. Мы вычисляем 19 MOD 16 = 3 и переносим 1 в позицию третьей цифры. Наконец, мы добавляем 1 + 6 + 4 = decimal 11, что отображается как буква B на третьем месте суммы. Шестнадцатеричная сумма равна B3C.

So , 6A2 + 49A = B3C

Двоичные целые числа со знаком

Двоичные целые числа со знаком могут быть positive или negative. Most Significant Bit MSB представляет знак: 0 is positive and 1 is negative.

Представление с дополнением до двух

Negative Integers используйте представление с дополнением до двух, используя правило, согласно которому дополнение числа до двух равно его additive inverse. например, рассмотрим значение 11111110, его дополнение до двух будет:

Начальное значение00000001Шаг 1: поменять местами биты11111110Шаг 2: добавить 1 к значению из шага 111111110 +00000001Сумма: представление с дополнением до двух11111111

Шестнадцатеричное дополнение до двух:

В дополнении до двух шестнадцатеричных чисел мы сначала инвертируем число, а затем добавляем к нему 1. Чтобы инвертировать число, мы можем вычесть число из 15. Вот примеры:

6A3D --> 95C2 + 1 --> 95C3 95C3 --> 6A3C + 1 --> 6A3D

Преобразование двоичного числа со знаком в десятичное:

если Most Significant Bit равно 1, то это означает, что число является negative signed integer. Например, двоичное число со знаком 11110000 имеет 1 в старшем бите, что указывает на то, что это отрицательное целое число.

Начальное значение 11110000

  • Шаг 1: Поменяйте местами биты 00001111
  • Шаг 2: Добавьте 1 к значению, указанному выше шаг 00001111 + 1
  • Шаг 3: Создайте дополнение до двух 00010000
  • Шаг 4: Преобразование в десятичную = 16

Поскольку целое число было отрицательным, его ответ -16.

Преобразование знакового десятичного числа в двоичное:

Ниже приведены шаги для этого преобразования:

  • Сначала преобразуйте десятичное целое число в двоичное.
  • Если исходное десятичное число было отрицательным, создайте дополнение до двух двоичного числа из предыдущего преобразования.

Например, -43 будет преобразовано в двоичный файл следующим образом:

  • 43 в двоичном формате — 00101011.
  • Поскольку исходное значение отрицательное, мы берем дополнение до двух его двоичного кода, которое будет 11010101. Вот как будет представлено -43.

Преобразование десятичного числа со знаком в шестнадцатеричное:

Для преобразования выполните следующие действия:

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

Преобразование шестнадцатеричного числа со знаком в десятичное:

Для преобразования выполните следующие шаги, указанные ниже:

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

Двоичное вычитание:

Двоичное вычитание довольно просто. Возьмем пример 01101 - 00111. В десятичном виде оно равно 13 - 7, поэтому ответ будет 6, то есть 00110 в двоичном.