Об ассемблере



страница25/52
Дата14.08.2018
Размер3.59 Mb.
#43964
ТипЛекция
1   ...   21   22   23   24   25   26   27   28   ...   52

MOVSX


(MOVe and Sign eXtension)

Пересылка со знаковым расширением

 


Схема команды: 

movsx приемник,источник 

Назначение: преобразование элементов со знаком меньшей размерности в эквивалентные им элементы со знаком большей размерности.

Синтаксис

Алгоритм работы:

  • считать содержимое источника;

  • записать содержимое операнда источника в операнд приемник, начиная с младших разрядов источника;

  • распространить значение знакового разряда источника на свободные старшие разряды операнда назначения.

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:

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



        mov     al,0ffh

        movsx   bx,al   ;bx=0ffffh

        


См. также: урок 8 и команды mov, movs, movzx, cbw, cwd, cdq

MOVZX


(MOVe and Zero eXtension)

Пересылка с нулевым расширением

 


Схема команды: 

movzx приемник,источник 

Назначение: преобразование элементов без знака меньшей размерности в эквивалентные им элементы без знака большей размерности.

Синтаксис

Алгоритм работы:

  • считать содержимое источника;

  • записать содержимое операнда источника в операнд приемник, начиная с его младших разрядов;

  • распространить двоичный нуль на свободные старшие разряды операнда назначения.

Состояние флагов после выполнения команды:

выполнение команды не влияет на флаги

Применение:

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



.data

sl      db      ?

.code

...


        mov     al,0ffh

        movzx   bx,al   ;bx=00ffh

...

;или из памяти:



        movzx   eax,byte ptr sl

        


См. также: урок 8 и команды mov, movs/movsb/

movsw/movsd, movsx, cbw, cwd, cdq

MUL


(MULtiply)

Умножение целочисленное без учета знака

 


Схема команды: 

mul множитель_1 

Назначение: операция умножения двух целых чисел без учета знака.

Синтаксис

Алгоритм работы:

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



  • если операнд, указанный в команде — байт, то второй сомножитель должен располагаться в al;

  • если операнд, указанный в команде — слово, то второй сомножитель должен располагаться в ax;

  • если операнд, указанный в команде — двойное слово, то второй сомножитель должен располагаться в eax.

Результат умножения помещается также в фиксированное место, определяемое размером сомножителей:

  • при умножении байтов результат помещается в ax;

  • при умножении слов результат помещается в пару dx:ax;

  • при умножении двойных слов результат помещается в пару edx:eax.

Состояние флагов после выполнения команды (если старшая половина результата нулевая):

11

07

06

04

02

00

OF

SF

ZF

AF

PF

CF

0

?

?

?



0

Состояние флагов после выполнения команды (если старшая половина результата ненулевая):

11

07

06

04

02

00

OF

SF

ZF

AF

PF

CF

1

?

?

?



1

Применение:

Команда mul выполняет целочисленное умножение операндов без учета их знаковых разрядов. Для этой операции необходимо наличие двух операндов-сомножителей, размещение одного из которых фиксировано, а другого задается операндом в команде. Контролировать размер результата удобно используя флаги cf и of.



mn_1    db      15

mn_2    db      25

...

        mov     al,mn_1



        mul     mn_2

        


См. также: урок 8 и команду imul



Поделитесь с Вашими друзьями:
1   ...   21   22   23   24   25   26   27   28   ...   52




База данных защищена авторским правом ©vossta.ru 2022
обратиться к администрации

    Главная страница