Чтение онлайн

на главную - закладки

Жанры

20 уроков Ассемблера
Шрифт:

Перевод числа из двоичной системы в десятичную. Возьмём любое двоичное число, например 10,112. Запишем его в развёрнутой форме и произведём вычисления:

10,112 = 1 x 21 + 0 x 20 + 1 x 2– 1 + 1 x 2– 2 = 1 x 2 + 0 x 1 + 1 x 1/2 + 1 x 1/4 = 2,7510.

Перевод чисел из шестнадцатеричной системы в десятичную. Возьмём любое шестнадцатеричное число, например 19F16. Запишем его в развёрнутой форме (при этом необходимо помнить, что шестнадцатеричная цифра F соответствует десятичному числу 15) и произведём вычисления:

19F16 = 1 x 162 + 9 x 161 + F x 160 = 1 x 256 + 9 x 16 + 15 x 1 = 41510.

Алгоритм перевода целых десятичных чисел в двоичную систему счисления. Пусть Ацд – целое десятичное число. Запишем его в виде суммы степеней основания 2 с двоичными коэффициентами. В его записи в развёрнутой форме будут отсутствовать отрицательные степени основания (числа 2):

Ацд = аn– 1 x 2n– 1 + аn– 2 x 2n– 2 + … + а1 x 21 + а0 x 20.

На первом шаге разделим число Ацд на основание двоичной системы, то есть на 2. Частное от деления будет равно

аn– 1 x 2n– 2 + аn– 2 x 2n– 3 + … + а1 ,

а остаток – равен a0.

На втором шаге целое частное опять разделим на 2, остаток от деления будет теперь равен a1.

Если продолжать этот процесс деления, то после n-го шага получим последовательность остатков:

а0 , а1 , … , аn– 1.

Легко заметить, что их последовательность совпадает с обратной последовательностью цифр целого двоичного числа, записанного в свёрнутой форме:

A2 = an– 1 … a1 a0

Таким образом, достаточно записать остатки в обратной последовательности, чтобы получить искомое двоичное число.

Алгоритм перевода целого десятичного числа в двоичное будет следующим:

1. Последовательно выполнять деление исходного целого десятичного числа и получаемых целых частных на основание системы (на 2) до тех пор, пока не получится частное, меньшее делителя, то есть меньшее 2.

2. Записать полученные остатки в обратной последовательности.

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

Регистры

Существуют регистры общего назначения, сегментные регистры, счётчик команд и регистры флагов. Здесь мы встречаемся впервые с регистрами общего назначения ax и dx. Причём каждый из них состоит из двух частей – старшей (ah) и младшей (al) (для ax):

Каждое имя регистра несёт какой-либо смысл.

В нашей программе мы использовали старшую часть регистра ax (аккумулятор) и регистр dx (разместили данные). Каждый регистр состоит из двух байт – старшего (идёт первым) и младшего. Например, число 3DEFh можно занести в регистр ax двумя путями. Первый – прямым:

< image l:href="#"/>

и отдельно к старшему и младшему байту:

Надеюсь, с этим всё ясно. Скомпилируем нашу программу, создав с помощью Far новый файл test.asm (Shift+F4) и поместив в каталог с ним программы MASM.EXE, ML.EXE, LINK.EXE (либо прописав соответствующие системные пути для них. Для LINK.EXE у меня это сделать не получилось, он остаётся в папке с программой). Не забудьте выбрать кодировку файла 866 (клавишей F8), иначе увидите на экране кракозябры.

Выполняем: ML test.asm /AT

В папке с программой должно появиться ещё два файла – test.obj и test.com. Последний нам и нужен. Запускаем его и видим на экране фразу "Hello, world!".

Глава 4. Отладчик

Итак, понемногу мы подвигаемся вперёд. Сегодня мы узнаем о такой важной вещи, как отладчик. В нашем комплекте программ он есть и называется AFD Pro. Для чего нужен отладчик? Как ясно из его названия, для отладки программы. Например, у вас что-то не работает, и нужно найти причину. У нас пока всё работает, но мы хотим посмотреть на работу программы "изнутри". Откроем нашу программу test.com в отладчике:

Файл afdpro.exe должен быть прописан в системных путях или находиться в папке с программой.

Что же мы видим? В верхней части – значения регистров, о которых мы писали в предыдущей статье. Правее – состояние Stack – стека, о чём мы будем говорить позже. Ниже – командная строка, а ещё ниже, как мы, наверное, догадались, наша программа (первые четыре строчки соответствуют нашему коду). Теперь немного об управлении:

F1 – пошаговая трассировка с заходом в прерывания и процедуры.

F2 – то же самое, но без захода в процедуры и прерывания.

Чтобы перемещаться и изменять, например, регистры, дамп памяти – используйте клавиши F7 (вверх), F8 (вниз), F9 (влево), F10 (вправо).

Нажмём F2: программа переместится на следующую строчку, при этом регистры будут отображать нам числовые значения, в них хранящиеся. Первой командой мы занесли в ah число 9. Всё правильно: в левом верхнем углу значение регистра ax показывает 0900 (ah=9, al=0 – он не менялся).

123
Поделиться:
Популярные книги

Проклятый Лекарь

Молотов Виктор
1. Анатомия Тьмы
Фантастика:
фэнтези
5.00
рейтинг книги
Проклятый Лекарь

Геном хищника. Книга девятая

Гарцевич Евгений Александрович
9. Я - Легенда!
Фантастика:
боевая фантастика
рпг
попаданцы
5.00
рейтинг книги
Геном хищника. Книга девятая

Древесный маг Орловского княжества 10

Павлов Игорь Васильевич
10. Орловское княжество
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Древесный маг Орловского княжества 10

Отвергнутая невеста генерала драконов

Лунёва Мария
5. Генералы драконов
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Отвергнутая невеста генерала драконов

Руководство по системной поведенченской психотерапии

Курпатов Андрей Владимирович
Научно-образовательная:
психотерапия и консультирование
5.00
рейтинг книги
Руководство по системной поведенченской психотерапии

Я до сих пор не царь. Книга XXVII

Дрейк Сириус
27. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я до сих пор не царь. Книга XXVII

Ратник

Ланцов Михаил Алексеевич
3. Помещик
Фантастика:
альтернативная история
7.11
рейтинг книги
Ратник

Газлайтер. Том 39

Володин Григорий Григорьевич
39. История Телепата
Фантастика:
боевая фантастика
юмористическая фантастика
аниме
попаданцы
5.00
рейтинг книги
Газлайтер. Том 39

Кодекс Императора

Сапфир Олег
1. Кодекс Императора
Фантастика:
аниме
фэнтези
попаданцы
4.25
рейтинг книги
Кодекс Императора

Я уже царь. Книга XXIX

Дрейк Сириус
29. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я уже царь. Книга XXIX

На границе империй. Том 10. Часть 7

INDIGO
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 7

Кодекс Крови. Книга ХIII

Борзых М.
13. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХIII

Бастард Императора. Том 11

Орлов Андрей Юрьевич
11. Бастард Императора
Фантастика:
городское фэнтези
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард Императора. Том 11

Вечный. Книга VI

Рокотов Алексей
6. Вечный
Фантастика:
рпг
фэнтези
5.00
рейтинг книги
Вечный. Книга VI