Усечение 2-байтовой переменной до 1 байта

#assembly #nasm

#сборка #nasm

Вопрос:

Это кажется тривиальным вопросом, но я заблудился.

В этом примере character это 2-байтовая переменная, а регистр bx — один байт. Я пытаюсь сделать cmp bx, [character] , что явно не сработает из-за разницы в размере.

Я пытаюсь сравнить bx только с первым байтом character . Мысли?

Ответ №1:

ребистер bx имеет 16-битный размер и состоит из двух 8-битных bl и bh!

Для 16-битного cmp вы можете использовать префикс:

 cmp bx, word ptr[character]
  

для 8-битного bl cmp

  cmp bl, byte ptr[character]
  

или 8-битный bh cmp

  cmp bh, byte ptr[character   1]
  

Комментарии:

1. Спасибо! Я искал первый байт (а не второй), поэтому cmp bh, byte ptr [символ 0] выполнили задание.

2. Префикс не нужен (или не должен быть). Приличный ассемблер может выяснить, что bl будет сравниваться с байтом и bx словом.