Прочитав эту статью, ты научишься пользоваться арифметическими и логическими инструкциями, а также инструкциями сдвига. Попутно узнаешь, как создавать подпрограммы. А в конце напишешь простенькую игрушку «Угадай число».

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

Регистры могут быть 16- или 8-битными. 16-битные регистры: AX, BX, CX, DX, SI, DI, BP и SP. 8-битные регистры: AH, AL, BH, BL, CH, CL, DH и DL.

 

Пишем вспомогательную подпрограмму

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

Что такое подпрограмма? Это кусок кода, который выполняет какую-то небольшую задачу. К подпрограмме обычно обращаются через инструкцию call. Все подпрограммы заканчиваются инструкцией ret (RETurn).

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

Реализация подпрограммы call display_letter представлена ниже. Сохрани ее в файл library.asm.

Важно! В конец всех программ, которые мы напишем, тебе надо будет вставлять код из library.asm. К чему это приведет? Все программы будут заканчиваться выходом в командную строку, и у них будут подпрограммы для вывода символа на экран (из регистра AL) и для считывания символа с клавиатуры (результат помещается в регистр AL).

 

Учимся складывать и вычитать

В качестве аргументов для инструкции сложения давай задействуем регистр AL и константу.

Эта программа выводит на экран цифру 7. Потому что 4 + 3 = 7.

В качестве аргументов для инструкции вычитания давай возьмем регистр AL и константу.

Эта программа выводит на экран цифру 1. Потому что 4 – 3 = 1.

Продолжение доступно только участникам

Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».

Присоединяйся к сообществу «Xakep.ru»!

Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», увеличит личную накопительную скидку и позволит накапливать профессиональный рейтинг Xakep Score! Подробнее

Антон Карев

Антон Карев

Окончил физтех Алтайского госуниверситета. 20 лет занимаюсь низкоуровневым программированием на Ассемблере и Си. С уклоном в Secure Coding. Провожу в скайпе индивидуальные уроки по программированию на Ассемблере, Си, Питоне. Хочешь пообщаться? Пиши на email: anton.barnaul.1984@mail.ru

Check Also

MEGANews. Самые важные события в мире инфосека за июль

В этом месяце: Twitter подвергся масштабной компрометации, ботнет Emotet возобновил активн…

3 комментария

  1. Аватар

    Роман

    08.07.2020 в 18:43

    Спасибо! Вспомнил времена когда изучал ассемблер, какие-то приятные воспоминания)

  2. Аватар

    ckib_tomsk

    16.07.2020 в 07:23

    Добрый день, Антон !
    В Ваших примерах функция displayletter работает только с регистром AL. Получается, что в случае умножения двух 8-ми битных чисел, результат умножения запишется в AX, но если он будет больше чем 0xFF, то на экран будет выведен 0xFF, а остальное отбросится. То же самое и с умножением двух 16-ти битных чисел. Регистр DX:AX возьмется не полностью, а только в части AL.
    Можете привести пример как сделать вывод с учетом этих особенностей ?

    • Антон Карев

      Антон Карев

      16.07.2020 в 15:46

      Добрый день, вы наблюдательны! Спасибо вам. Я в этом уроке для простоты подобрал примеры так, чтобы не выходить за пределы одной цифры. Для простоты. Это для того сделал, чтобы новичок сосредоточил внимание исключительно на арифметических операциях. Любознательный читатель, легко сможет найти полноценную процедуру для печати чисел на экране – в другой моей статье, которая была опубликована на ][ чуть раньше: https://xakep.ru/2020/05/13/microb/

Оставить мнение