Инструкция CBW


Лучшие книги по Ассемблеру Лучшие книги по Ассемблеру

Сделал подборку не новых, но проверенных книг по программированию на языке ассемблера. Если вы также как и я любите погружаться на низкий уровень, в те закоулки мира программирования, куда не всем путь открыт, то посмотрите. Возможно, что-то вам понравится. Подробнее...

Инструкция CBW в Ассемблере выполняет преобразование байта в слово. Синтаксис:

CBW

Эта команда не имеет операндов. Флаги не изменяются.

Чтобы преобразовать байт в слово, инструкция CBW использует следующий алгоритм:

  • Если старший бит регистра AL равен 1, то записать в регистр AH число 255 (0FFh),
  • иначе записать в АН число 0.

Преобразование байта в слово

Первый вопрос - зачем это надо?

Для положительных чисел, пожалуй, в этом смысла нет. Однако для чисел со знаком это может быть полезно. Команда CBW расширяет длину целого числа со знаком, то есть из байта делает слово. При этом знаковый разряд из регистра AL переносится в регистр AH, байт (AL) превращается в слово (АХ), а знак числа сохраняется (см. алгоритм выше).

Поясню на примере. Допустим, у нас есть число 5, которое мы записали в регистр AL (байт). Тогда, чтобы преобразовать байт в слово нам достаточно просто поместить в регистр AX число 0.

Но если мы имеем дело с отрицательными числами, то всё становится сложнее. Например, мы записали число -5 в регистр AL. Тогда в этом регистре будет шестнадцатеричное число FB. Если мы просто поместим в регистр AX число 0, то получим слово:

00FB

и это будет число 251 в десятичной системе, а не -5, как мы бы хотели. Потому что число (слово) -5 в шестнадцатеричной системе - это

FFFB

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

Машинный код команды CBW - 98h.

Если вы не очень хорошо понимаете, о чём я говорил выше, то изучайте статьи из раздела Представление данных.

Пример:

	.model	tiny
	.code
	ORG 	100h
	
start:	
     
  MOV AH, 0
  MOV AL, -5    ;AL = -5, AX = 00FB = 251
  CBW           ;AX = FFFB = -5
	
  RET

  END	start

Напоследок, как всегда, о происхождении аббревиатуры CBW.

CBW - это Convert Byte to Word (преобразовать байт в слово).



Первые шаги в программирование Первые шаги в программирование

Главный вопрос начинающего программиста – с чего начать? Вроде бы есть желание, но иногда «не знаешь, как начать думать, чтобы до такого додуматься». У человека, который никогда не имел дело с информационными технологиями, даже простые вопросы могут вызвать большие трудности и отнять много времени на решение. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su