Преобразование типов в ассемблере.




Бывает так что нужно выполнить действия с числами разного размера. Но напрямую процессор не умеет выполнять такие операции, поэтому в этом случае необходимо выполнять преобразование типов. И сегодня я постараюсь объяснить как это делается.

Преобразование отрицательных типов

Преобразование отрицательных типов выполняется путём копирования знакового бита на всю старшую часть. Для такого преобразования предназначена команда MOVSX (копирование со знаковым расширением). Первый операнд — слово, второй операнд — байт:

movsx cx,[y] ;CX = y

Существуют ещё две команды для преобразования отрицательных типов: CBW (Convert Byte to Word — преобразовать байт в слово) и CWD (Convert Word to Double word — преобразовать слово в двойное слово). Команда CBW преобразует байт, находящийся в регистре AL, в слово в регистре AX. Команда CWD преобразует слово, находящееся в регистре AX, в двойное слово в регистрах DX:AX. Эти команды удобно использовать вместе с командами умножения и деления. Например:

 mov al,[y]
    cbw          ;AX = y
    cwd          ;DX:AX = y

Преобразование положительных типов

Для преобразования положительных чисел необходимо просто заполнить все старшие биты нулями. Такое преобразование можно выполнить с помощью обычной команды MOV. Например:

mov bl,[x]       ;x объявлен как байт
    mov bh,0     ;BX = x
;Или вот так:
    mov bl,[x]
    sub bh,bh    ;BX = x

Также в системе команд процессора существует специальная команда — MOVZX (копирование с нулевым расширением). Первый операнд команды имеет размер 16 бит (слово), а второй — 8 бит (байт). Тот же результат можно получить так:

movzx bx,[x] ;BX = x

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Chinese (Traditional)EnglishJapaneseRussianUkrainian

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: