Assembler - язык неограниченных возможностей

энергосберегающий стеклопакет |

Пересылка данных - часть 6


/p>

Копирует содержимое источника (регистр или переменная размером в байт или слово) в приемник (16- или 32-битный регистр) и расширяет нулями, то есть команда

movzx ax,bl

эквивалентна паре команд

mov al,bl mov ah,0

  • Команда:
  • XLAT адрес
    XLATB
  • Назначение:
  • Трансляция в соответствии с таблицей
  • Процессор:
  • 8086

    Помещает в AL байт из таблицы в памяти по адресу ES:BX (или ES:EBX) со смещением относительно начала таблицы, равным AL. В качестве аргумента для XLAT в ассемблере можно указать имя таблицы, но эта информация никак не используется процессором и служит только как комментарий. Если этот комментарий не нужен, можно применить форму записи XLATB. В качестве примера использования XLAT можно написать следующий вариант преобразования шестнадцатеричного числа в ASCII-код соответствующего ему символа:

    mov al,0Ch mov bx, offset htable xlatb

    если в сегменте данных, на который указывает регистр ES, было записано

    htable db "0123456789ABCDEF"

    то теперь AL содержит не число 0Сh, а ASCII-код буквы «С». Разумеется, это преобразование можно выполнить, используя гораздо более компактный код всего из трех арифметических команд, который будет рассмотрен в описании команды DAS, но с XLAT можно выполнять любые преобразования такого рода.

  • Команда:
  • LEA приемник, источник
  • Назначение:
  • Вычисление эффективного адреса
  • Процессор:
  • 8086

    Вычисляет эффективный адрес источника (переменная) и помещает его в приемник (регистр). С помощью LEA можно вычислить адрес переменной, которая описана сложным методом адресации, например по базе с индексированием. Если адрес 32-битный, а регистр-приемник 16-битный, старшая половина вычисленного адреса теряется, если наоборот, приемник 32-битный, а адресация 16-битная, то вычисленное смещение дополняется нулями.



    Команду LEA часто используют для быстрых арифметических вычислений, например умножения:

    lea bx,[ebx+ebx*4] ; ВХ=ЕВХ*5

    или сложения:

    lea ebx,[eax+12] ; ЕВХ=ЕАХ+12

    (эти команды меньше, чем соответствующие MOV и ADD, и не изменяют флаги)





    - Начало -  - Назад -  - Вперед -



    Книжный магазин