20 уроков Ассемблера. Семён Леонидович Углев

20 уроков Ассемблера - Семён Леонидович Углев


Скачать книгу
= 1 × 162 + 9 × 161 + F × 160 = 1 × 256 + 9 × 16 + 15 × 1 = 41510.

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

      Ацд = аn-1 × 2n-1 + аn-2 × 2n-2 + … + а1 × 21 + а0 × 20.

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

      аn-1 × 2n-2 + аn-2 × 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 двумя путями. Первый – прямым:

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

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

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

      В папке с программой должно появиться ещё два файла – test.obj и test.com. Последний


Скачать книгу