Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Assembler задача для курсовой помогите пожалуйста.не могу найти в интернете ничего что могло бы помочь дан одномерный массив найти количество и сумму нечетных элементов https://www.cyberforum.ru/ assembler/ thread1000518.html Assembler Компиляция masm32 из RadASM программ для DOS
Доброго времени суток. Вот такая проблема у меня. Скачал masm32 установил в корень диска С: В notepad забил текст,отдаю команду в командной строке ml /c xxxx.asm получаю файл с расширением .obj Далее doslnk /t xxxx.asm и тишина "doslnk" не является внутренней или внешней командой, исполняемой программой или пакетным файлом. Это что ,получается у меня нет линковщика?! Хотя в папке bin файл...
Assembler Одна непонятная ситуация с отладчиком td Всем доброго времени суток. У меня небольшая проблема с программой. Заранее говорю, я новичок в этом. Сделал программу которая должна выводить числа на экран в диапазоне от нуля до 99999, короче говоря максимально 5-ти значные числа. Как пример должно выдать число 50784, а выдаёт мне вот такое: треугольник 6256. Но когда я запускаю эту программа через отладчик td она мне выдаёт в консоль нужное... https://www.cyberforum.ru/ assembler/ thread996648.html Assembler Правильный выход из программы https://www.cyberforum.ru/ assembler/ thread995183.html
Поправьте код код пожалуйста, чтобы программа выключалась после нажатия клавиши =) P.S. Компилятор TASM .MODEL small .DATA HelloMessage DB 'Hello, world $' .CODE mov ax,@data mov ds,ax mov ah,9 mov dx,OFFSET HelloMessage
Assembler Переписать алгоритм на ассемблер
Есть код на делфи. тема - работа с BitMap. Вопрос: можно ли реализовать это на ассемблер? Это интерполяция изображений. P.s. Важен не сам код, как файл. Вот, то, что нужно ускорить: unit rsmpl; interface uses SysUtils, Classes, Graphics;
Assembler Ошибка в коде, необходимо разобраться! https://www.cyberforum.ru/ assembler/ thread990315.html
.386 .model flat,stdcall option casemap:none WinMain proto :DWORD,:DWORD,:DWORD,:DWORD include C:\masm32\include\windows.inc include C:\masm32\include\user32.inc include C:\masm32\include\shell32.inc include C:\masm32\include\kernel32.inc includelib C:\masm32\lib\user32.lib includelib C:\masm32\include\shell32.inc
Assembler Tasm DosBox Доброго всем времени суток. Нужна ваша помощь: как запустить файл filename.asm в Tasm? файл размещен в d:\tasm. Tasm смонтировал с dosBox-ом: mount c: d:\tasm\bin Буду благодарен. https://www.cyberforum.ru/ assembler/ thread990002.html Assembler Удобная среда для TASM
Подскажите инструменты для комфортного изучения Ассемблер под Интел 8086 В данным момент использую DosBox и TASM, но это оочень неудобно, ведь при каждом запуске приходится настраивать, при чем при Debug'е иногда вылетает((
Assembler Команда сдвига Сразу скажу, работаю не в ассемблере, а в симуляторе микропроцессора VAX-11. Но все вполне аналогично и можно провести аналогию с ассемблером. Вопрос: Есть команда сдвига, выполняющаяся в формате long(4 байта). Число, которое я сдвигаю равно -226 в десятичной, FF1E в шестнадцатеричной. Доступ к этому числу выполняется через относительную адресация(адресация, при которой адрес операнда... https://www.cyberforum.ru/ assembler/ thread989662.html Assembler Коллоквиум, практические задания В общем, расскажу честно, учусь в универе, с этого семестра начался ассемблер, в связи с большой загруженностью не успеваю его тщательно изучать, хватаю кусками. Завтра по теории колоквиум, ребят, кому не сложно, ответьте на любой вопрос, пожалуйста, буду очень признателен. "С мира по нитке - бедному рубаха", как говорится. 50. Сегмент данных программы описан следующим образом .data str db... https://www.cyberforum.ru/ assembler/ thread989322.html
Assembler некорректное выполнение цикла
model small .stack 100h .data len equ 10 mass dw -1,0,-9,8,0,7,8,0,2,0 .code start: mov ax,@data
Assembler Как запустить Tasm в cmd на win xp? https://www.cyberforum.ru/ assembler/ thread988361.html
Как запустить Tasm в cmd на win xp?
Ушел с форума
Автор FAQ
16276 / 7601 / 1064
Регистрация: 11.11.2010
Сообщений: 13,616
15.11.2013, 04:43  [ТС] 0

Электронный учебник - Assembler - Ответ 12866130

15.11.2013, 04:43. Показов 364137. Ответов 51
Метки (Все метки)

Ответ

ГЛАВА 12
КОМАНДЫ СДВИГА
(часть 1/3)

Как быстро умножить число на 10, 100, 1000? Просто! Числу, которое умножается на 10, справа дописывают ноль, при умножении на сто – справа дописывают два нуля, при умножении на тысячу – три и так далее.

При целочисленном делении на десять от числа справа убирают одну цифру, при делении на сто – две цифры и так далее. Человек считает, опираясь на десятичную системе счисления – компьютеры работают в двоичной системе. Но принцип деления и умножения на число, являющееся основанием системы счисления, остается общим. Для деления и умножения на число, являющееся степенью 2, в микропроцессор введены команды сдвига.

Команды сдвига влево смещают значение битов операнда от младших к старшим. Команды сдвига вправо смещают значение битов операнда от старших к младшим. Команды сдвига перемещают все биты в поле данных либо вправо, либо влево на определенное число разрядов. Последний бит, попадающий за пределы операнда, помещается в бит флага переноса CF, остальные двоичные разряды, выходящие за разрядную сетку, теряются. Команды сдвига делятся на логические, арифметические или циклические.

Если сдвиг осуществляется влево – на место освобождающихся разрядов ставятся нули. Например, число 0001011011001 (=729) при сдвиге влево на три разряда превращается в 1011011001000 (https://www.cyberforum.ru/cgi-bin/latex.cgi?=5832=729\times 8).

Двоичное число при сдвиге влево на n разрядов увеличивается в 2n раз. Это верно как для положительных, так и для отрицательных чисел. Число 11111110 (-2) при сдвиге влево на три разряда превращается в 1110000 (https://www.cyberforum.ru/cgi-bin/latex.cgi?-16=-2\times 8).

Если сдвиг осуществляется вправо – на место освобождающихся разрядов ставятся нули. Например, число 0001011011001 (=729) при сдвиге вправо на три разряда превращается в 0000001011011 (=91), что соответствует числу 729, деленному нацело на 8. Двоичное число при сдвиге вправо на https://www.cyberforum.ru/cgi-bin/latex.cgi?n разрядов уменьшается в https://www.cyberforum.ru/cgi-bin/latex.cgi?2^{n} раз. Это верно для положительных чисел и для беззнаковых чисел. Если мы хотим разделить число -16 (1110000b) на 8, то для того, чтобы получилось число -2 (11111110b) требуется, чтобы на место освобождающихся разрядов ставились единицы. Если мы сдвигаем вправо значение числа со знаком на https://www.cyberforum.ru/cgi-bin/latex.cgi?n разрядов для уменьшения его в https://www.cyberforum.ru/cgi-bin/latex.cgi?2^{n} раз, то по мере сдвига вправо, освобождающиеся места должны заполнять значением знакового разряда.

Логические сдвиги
Команды SHL, PSLLx, PSLLDQ

(Сдвиг логический операнда влево = SHIFT Left logical
Параллельный логический сдвиг влево = Parallel Shift Left Logical)

Рис. 12.1.1. Схема работы команды SHL
 P PII K6 3D! 3Mx+ SSE SSE2 A64 SSE3 E64T
SHL
PSLLx
PSLLDQ
Синтаксис команды:
SHL <DEST>,<COUNT>
Семантика команды: логический сдвиг операнда DEST влево.
Алгоритм работы:
  • сдвиг всех битов операнда DEST влево на один разряд, при этом выдвигаемый слева бит становится значением флага переноса CF;
  • одновременно слева в операнд вдвигается нулевой бит;
  • указанные выше два действия повторяются количество раз, равное значению операнда COUNT.
Возможные варианты команды:
shl reg/mem(8/16/32/64),count(imm/cl)
MMX psll(w/d/q) mmx, count(imm/mmx/m64)
SSE2 psll(w/d/q) xmm, count(imm/xmm/m128)
SSE2 pslldq xmm, count(imm)

Применение
: команда SHL используется для сдвига разрядов операнда влево. Так же, как и для других сдвигов, значение второго операнда (счетчик сдвига) зависит от размера операнда DEST и ограничено диапазоном 0...64. Это объясняется тем, что микропроцессор использует только шесть младших разрядов операнда COUNT. Аналогично другим командам сдвига сохраняется эффект, связанный с поведением флага OF, значение которого имеет смысл только в операциях сдвига на один разряд:
  • если OF=1, то текущее значение флага CF и выдвигаемого слева бита операнда различны;
  • если OF=0, то текущее значение флага CF и выдвигаемого слева бита операнда совпадают.
Этот эффект обусловлен тем, что флаг OF устанавливается в единицу всякий раз при изменении знакового разряда операнда. Команду SHL удобно использовать для умножения целочисленных операндов без знака на степени 2.
Assembler
1
2
MOV AX,17; умножить содержимое AX на 16 (16=2^4).
SHL AX,4; AX=272
MMX-команды сдвига (PSLL(w/d/q)) выполняют сдвиг каждого элемента данных (упакованных 16-, 32- или 64-разрядных слов) в операнде DEST на величину, задаваемую операндом COUNT. Освобождающие в результате сдвига младшие биты упакованных элементов операнда DEST заполняются нулями. Операнд COUNT может быть непосредственным значением либо находится в MMX-регистре или в памяти. Операнд DEST должен находиться в MMX-регистре.
Команды обнуления регистра MM0:
Assembler
1
2
3
psllw mm0,15
pslld mm0,31
pslld mm0,63
SSE2-команды сдвига (PSLL(w/d/q)) выполняют сдвиг каждого элемента данных (упакованных 16-, 32- или 64-разрядных слов) в операнде DEST на величину, задаваемую операндом COUNT. Освобождающие в результате сдвига младшие биты упакованных элементов операнда DEST заполняются нулями. Операнд COUNT может быть непосредственным значением либо находится в XMM-регистре или в памяти. Операнд DEST должен находиться в XMM-регистре.
Логический сдвиг содержимого XMM-регистра влево на immhttps://www.cyberforum.ru/cgi-bin/latex.cgi?\times8 бит, величина сдвига задается не в битах (как обычно), а в байтах:
pslldq xmm,imm
Кодировка арифметических, логических и циклических сдвигов имеет следующий формат:
15 14 13 12 11 10 9 8 7-6 5-4 3 2-0
1 1 0 C 0 0 V W MOD КОП R/L R/M
  • Бит С в данном случае определяет количество сдвигов, если он равен 0 – количество сдвигов задается непосредственно в команде, если C=1 – количество сдвигов или равно 1, или задается регистром CL.
  • Бит W определяет размер операнда – байт или слово/двойное слово.
  • Бит V установлен в 0, если счетчик равен 1, V=1, если счетчик задается регистром CL.
  • Биты 7 и 6 во втором байте определяют режим адресации
  • биты 5 и 4 – код операции сдвига
  • бит R/L – направление сдвига
  • биты R/M – операнд-получатель, определяемый из режима адресации.
Обычно по команде «SAL» транслятор генерирует код команды SHL, хотя существует код команды SAL – D0Fx, который не всегда распознается дизассемблерами, но выполняется микропроцессором.
КОП R/L Название Пример команды Код
00 0 циклический сдвиг операнда ROL AL,1 D0C0
01 0 циклический сдвиг через перенос RCL AL,1 D0D0
10 0 логический сдвиг SHL AL,1 D0E0
11 0 арифметический сдвиг влево SAL AL,1 (только в кодах) D0F0
11 1 арифметический сдвиг вправо SAR AL,1 D0F8
Так как логический сдвиг влево часто используется в алгоритмах, реализующих умножение и деление (разделы «Недокументированные способы умножения» и «Недокументированные способы деления»), поэтому коды типа D0Fx можно использовать вместо команды SHL.
 Mod000r/m Mod001r/m Mod010r/m Mod011r/m Mod100r/m Mod101r/m Mod110r/m Mod111r/m
ShiftOp ROL ROR RCL RCR SHL SHR SAL SAR

 x0 x1 x2 x3
Cx ShiftOp r/m8,imm ShiftOp r/m(16/32/64),imm  
Dx ShiftOp r/m8,1 ShiftOp r/m(16/32/64),1 ShiftOp r/m8,CL ShiftOp r/m(16/32/64),CL
зависимость кодировки сдвигов от содержимого последних 2 бит
Команда Эквивалент
shl eax,1add eax,eax
lea eax,[eax+eax]
lea eax,[eax*2]
shl eax,2 lea eax,[eax*4]
shl eax,3 lea eax,[eax*8]
Команда SHR, PSRLx, PSRLDQ
(Сдвиг логический операнда вправо = SHIFT Right logical
Параллельный логический сдвиг вправо = Parallel Shift Right Logical )

Рис. 12.1.2. Схема работы команды SHR
P PII K6 3D! 3Mx+ SSE SSE2 A64SSE3E64T
SHR
PSRLx
PSRLDQ
Синтаксис команды:
SHR <DEST>,<COUNT>
Семантика команды: логический сдвиг операнда DEST вправо.
Алгоритм работы:
  • сдвиг всех битов операнда DEST вправо на один разряд; при этом выдвигаемый справа бит становится значением флага переноса CF;
  • одновременно слева в операнд вдвигается нулевой бит;
  • указанные выше два действия повторяются количество раз, равное значению операнда COUNT.
Возможные варианты команды:
классический
shr reg/mem(8/16/32/64),count(imm/cl)
MMX
psrl(w/d/q) mmx, count(imm/mmx/m64)
SSE2
psrl(w/d/q) xmm, count(imm/xmm/m128)
psrldq xmm, count(imm)
Применение
: команда SHR используется для логического сдвига разрядов операнда DEST вправо. Так же как и для других сдвигов, значение операнда COUNT (счетчика сдвига) ограничено диапазоном 0...63. Это объясняется тем, что микропроцессор использует только шесть младших разрядов операнда количество разрядов. В отличие от других команд сдвига, флаг OF всегда сбрасывается в ноль в операциях сдвига на один разряд. Команду SHR можно использовать для деления целочисленных операндов без знака на степени 2.
Assembler
1
2
MOV CL,4
SHR EAX,CL ;EAX разделить на 16=2^4
MMX-команды сдвига (PSRL(w/d/q)) выполняют сдвиг каждого элемента данных (упакованных 16-, 32- или 64-разрядных слов) в операнде DEST на величину, задаваемую операндом COUNT. Освобождающиеся в результате сдвига старшие биты упакованных элементов операнда DEST заполняются нулями. Операнд COUNT может быть непосредственным значением, либо находится в MMX-регистре или в памяти. Операнд DEST должен находиться в MMX-регистре.
SSE2-команды сдвига (PSRL(w/d/q)) выполняют сдвиг каждого элемента данных (упакованных 16-, 32- или 64-разрядных слов) в операнде DEST на величину, задаваемую операндом COUNT. Освобождающиеся в результате сдвига старшие биты упакованных элементов операнда DEST заполняются нулями. Операнд COUNT может быть непосредственным значением, либо находится в XMM-регистре или в памяти. Операнд DEST должен находиться в XMM-регистре.
Логический сдвиг содержимого XMM-регистра вправо на immhttps://www.cyberforum.ru/cgi-bin/latex.cgi?\times8 бит
величина сдвига задается не в битах (как обычно), а в байтах:
psrldq xmm,imm
Команда SHLD
(Сдвиг двойного слова влево = SHIFT Left Double word)
Синтаксис команды:
SHLD <DEST>,<SRC>,<COUNT>
Семантика команды: логический сдвиг двойного слова влево без разрушения содержимого SRC.
Алгоритм работы:
  • сдвинуть операнд DEST влево на количество битов, определяемое операндом COUNT. Количество битов может задаваться непосредственно в операнде COUNT или содержаться в регистре CL;
  • выдвигаемые во время сдвига влево из операнда SRC биты вдвигаются в операнд DEST с его правого края;
  • операнд SRC только обеспечивает вдвигаемые в операнд DEST биты, но сам он при этом не изменяется.
Возможные варианты команды:
shld mem/reg(16/32/64),reg(16/32/64),count(cl/imm)
Псевдокод:
IF(In 64-bit Mode and REX.W=1)
THEN COUNT←COUNT MOD 64
ELSE COUNT←COUNT MOD 32
EN IF
SIZE←OperandSize
IF COUNT=0
THEN
No operation
ELSE
IF COUNT>SIZE
THEN (*Bad parameter*)
DEST is undefined
Рис. 12.1.3. Схема работы команды SHLD
CF,OF,SF,ZF,AF,PF are undefined
ELSE (*Perform the shift*)
CF←BIT[DEST,SIZE-COUNT]
(*Last bit shifted out on exit*)
FOR i←SIZE-1 DOWN TO COUNT
DO
Bit(DEST,i)←Bit(DEST,i-COUNT)
END DO
FOR i←COUNT-1 DOWN TO 0
DO
Bit(DEST,i)←Bit(SRC,i-COUNT+SIZE)
END DO
END IF
END IF
Применение: команда SHLD используется для манипуляции битовыми строками длиной до 64 бит. Эту команду удобно использовать для быстрой вставки (или извлечения) битной строки в большую битовую строку; при этом, что очень важно, не разрушается контекст (битовое окружение) этих подстрок:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
;извлечь старшую половину EAX в EBX без разрушения EAX
MOV CL,16;EAX=56789000h EBX=1234h
SHLD EBX,EAX,CL;EAX=56789000h EBX=12345678h
;одновременный сдвиг содержимого регистров EBX и EAX на 16 бит
MOV CL,16 ;EAX=56789000h EBX=1234h
SHLD EBX,EAX,CL
SHL EAX,CL ;EAX=90000000h EBX=12345678h
; эквивалент команды SHLD EBX,EAX,16
MOV ECX,16
PUSH EAX
A1: SHL EAX,1
RCL EBX,1
LOOP A1
POP EAX
Команда SHRD
(Сдвиг двойного слова вправо = SHIFT Right Double word)
Синтаксис команды:
SHRD <DEST>,<SRC>,<COUNT>
Семантика команды: логический сдвиг двойного слова вправо без разрушения содержимого SRC.

Рис. 12.1.4. Схема работы команды SHRD
Алгоритм работы:
  • сдвинуть операнд DEST вправо на количество битов, определяемое операндом COUNT. Количество битов может задаваться непосредственно в операнде COUNT или содержаться в регистре CL;
  • выдвигаемые вправо во время сдвига из операнда SRC биты вдвигаются в операнд DEST с его левого конца;
  • операнд SRC только обеспечивает вдвигаемые в операнд DEST биты, сам он при этом не изменяется.
Возможные варианты команды:
shrd mem/reg(16/32/64),reg(16/32/64),count(cl/imm)
Псевдокод:
IF(In 64-bit Mode and REX.W=1)
THEN COUNT←COUNT MOD 64
ELSE COUNT←COUNT MOD 32
EN IF
SIZE←OperandSize
IF COUNT=0
THEN
No operation
ELSE
IF COUNT>SIZE
THEN (*Bad parameter*)
DEST is undefined
CF,OF,SF,ZF,AF,PF are undefined
ELSE (*Perform the shift*)
CF←BIT[DEST,COUNT-1]
(*Last bit shifted out on exit*)
FOR i←0 TO SIZE-1-COUNT
DO
Bit(DEST,i)←Bit(DEST,i+COUNT)
END DO
FOR i←SIZE-COUNT TO SIZE-1
DO
Bit(DEST,i)←Bit(SRC,i+COUNT-SIZE)
END DO
END IF
END IF
Применение: команда SHRD используется для манипуляции битными строками длиной до 64 бит. Эту команду удобно использовать для быстрой вставки (или извлечения) битной строки в большую битовую строку, при этом, что очень важно, не разрушается контекст (битовое окружение) этих подстрок.
;разделить операнд размером 64 бит на 16=24
OP_L DD · · · ;младшая часть операнда
OP_H DD · · · ;старшая часть операнда
MOV EAX,OP_H ;разделить операнд на 16. Так как
SHRD OP_L,EAX,4 ;старшая часть операнда реально еще не
сдвинулась, то нужно привести ее
SHR OP_H,4 в соответствие с результатом
Арифметические сдвиги
Команда SAR

(Сдвиг арифметический операнда вправо
Shift Arithmetic operand Right)
Синтаксис команды:
SAR <DEST>,<COUNT>
Семантика команды: арифметический сдвиг операнда DEST вправо.
Алгоритм работы:
  • сдвиг всех битов операнда DEST вправо на один разряд, при этом выдвигаемый справа бит становится значением флага переноса CF;
  • обратите внимание: одновременно слева в операнд вдвигается не нулевой бит, а значение старшего бита операнда DEST, то есть по мере сдвига вправо освобождающиеся места заполняются значением знакового разряда. По этой причине этот тип сдвига и называется арифметическим;
  • указанные выше два действия повторяются количество раз, равное значению операнда COUNT. Количество битов может задаваться непосредственно в операнде COUNT или содержаться в регистре CL .
 P PII K6 3D! 3Mx+ SSE SSE2 A64 SSE3 E64T
SAR  
PSRAx 
Возможные варианты команды:
sar mem/reg(8/16/32/64),count(cl/imm)
MMX psar(w/d) mmx, count(imm/mmx/m64)
SSE2 psar(w/d) xmm, count(imm/xmm/m128)

Рис. 12.2.1. Схема работы команды SAR
Применение: команда SAR используется для арифметического сдвига разрядов операнда вправо. Так же, как и для других сдвигов, значение второго операнда (счетчика сдвига) ограничено диапазоном 0...64. Это объясняется тем, что микропроцессор использует только шесть младших разрядов операнда COUNT. В отличие от других команд сдвига флаг OF всегда сбрасывается в ноль в операциях сдвига на один разряд.
Команду SAR можно использовать для деления целочисленных операндов со знаком на степени 2:
Assembler
1
2
MOV EAX,-88;EAX=0FFFFFFA8h разделить на 4(=22)
SAR EAX,2 ; EAX=0FFFFFFEAh=-22
MMX-команды сдвига (PSAR(w/d)) выполняют сдвиг каждого элемента данных (упакованных 16- или 32-разрядных слов) в операнде DEST на величину, задаваемую операндом COUNT. Освобождающиеся в результате сдвига старшие биты упакованных элементов операнда DEST заполняются нулями, если число положительное или единицами, если отрицательное.
Операнд COUNT может быть непосредственным значением либо находится в MMX-регистре или в памяти. Операнд DEST должен находиться в MMX-регистре.
SSE2-команды сдвига (PSAR(w/d)) выполняют сдвиг каждого элемента данных (упакованных 16- или 32-разрядных слов) в операнде DEST на величину, задаваемую операндом COUNT. Освобождающиеся в результате сдвига старшие биты упакованных элементов операнда DEST заполняются нулями, если число положительное или единицами, если отрицательное. Операнд COUNT может быть непосредственным значением либо находится в XXM-регистре или в памяти. Операнд DEST должен находиться в XXM-регистре.
Команда SAL
(Сдвиг арифметический операнда влево =Shift Arithmetic operand Left)
Синтаксис команды:
SAL <DEST>,<COUNT>
Семантика команды: арифметический сдвиг операнда DEST влево.
Алгоритм работы:
  • сдвиг всех битов операнда DEST влево на один разряд, при этом выдвигаемый слева бит становится значением флага переноса CF;
  • одновременно справа в операнд вдвигается нулевой бит;
  • указанные выше два действия повторяются количество раз, равное значению операнда COUNT. Количество битов может задаваться непосредственно в операнде COUNT или содержаться в регистре CL.

Рис. 12.2.2. Схема работы команды SAL
 P PII K6 3D! 3Mx+ SSE SSE2 A64 SSE3 E64T
SAL
PSLAx
Возможные варианты команды:
sal mem/reg,count(cl/imm)
MMX psal(w/d) mmx, count(imm/mmx/m64)
SSE2 psal(w/d) xmm, count(imm/xmm/m128)
Применение: команда SAL используется для сдвига разрядов операнда влево. Так же, как и для других сдвигов, значение операнда COUNT (счетчика сдвига) ограничено диапазоном 0...63. Это объясняется тем, что микропроцессор для сдвига использует только шесть младших разрядов.
Аналогично другим командам сдвига сохраняется эффект, связанный с поведением флага OF, значение которого имеет смысл только в операциях сдвига на один разряд:
  • если OF=1, то текущее значение флага CF и выдвигаемого слева бита операнда DEST различны;
  • если OF=0, то текущее значение флага CF и выдвигаемого слева бита операнда DEST совпадают.
Этот эффект обусловлен тем, что флаг CF устанавливается в единицу всякий раз при изменении знакового разряда операнда.
Команду SAL удобно использовать для умножения целочисленных операндов без знака на число, являющееся степенью 2.
Assembler
1
2
MOV EAX,17; умножить содержимое EAX=11h на 16=2^4
SAL EAX,4; EAX=110h=272
MMX-команды сдвига (PSAL(w/d)) выполняют сдвиг каждого элемента данных (упакованных 16- или 32-разрядных слов) в операнде DEST на величину, задаваемую операндом COUNT. Освобождающиеся в результате сдвига младшие биты упакованных элементов операнда DEST заполняются нулями. Операнд COUNT может быть непосредственным значением либо находится в MMX-регистре или в памяти. Операнд DEST должен находиться в MMX-регистре.
SSE2-команды сдвига (PSAL(w/d)) выполняют сдвиг каждого элемента данных (упакованных 16- или 32-разрядных слов) в операнде DEST на величину, задаваемую операндом COUNT. Освобождающиеся в результате сдвига младшие биты упакованных элементов операнда DEST заполняются нулями. Операнд COUNT может быть непосредственным значением либо находится в XXM-регистре или в памяти. Операнд DEST должен находиться в XXM-регистре.



Вернуться к обсуждению:
Электронный учебник Assembler
Миниатюры
Электронный учебник   Электронный учебник   Электронный учебник  

Электронный учебник   Электронный учебник   Электронный учебник  

Электронный учебник   Электронный учебник  
Изображения
 
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.11.2013, 04:43
Готовые ответы и решения:

Посоветуйте учебник и IDE
Посоветуйте пожалуйста хороший учебник и IDE. Выбор встал между RadASM и WinAsm studio. Что лучше?...

Подскажите учебник по Ассемблеру
Подскажите, плиз, учебник по Ассемблеру. Доходчивый, детальный, последовательный. Чтоб с...

Электронный пропуск
Уважаемый пользователи форума, может кто может помочь? Необходимо разработать драйвер для...

Ищу электронный справочник по ассемблеру
Как то давно скачивал в виде экзешника под дос, справочник по ассемблеру. Сейчас у себя не могу...

51
15.11.2013, 04:43
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2013, 04:43
Помогаю со студенческими работами здесь

Учебник по ассемблеру
Подскажите пожалуйста, ассемблера не знаю вообще, в процессорах тоже мало смыслю (всему научусь)....

Учебник Assembler x86
Привет. Подскажите хороший учебник, желательно на русском языке по Assembler x86.

Электронный учебник
Здравствуйте. Есть электронный учебник, на форме есть Webbrowser, sPanel1, Tsscrollbox, speedbuton...

Электронный учебник
Здраствуйте..Ищу электронный учебник по программированию сделанный в дельфи..Если есть у кого...

Электронный учебник
Здравствуйте! Хотелось бы написать электронный учебник по математике для школьников, посоветуйте...

Электронный учебник
Салам Всем!!! Дайде совет, где можно написать электронный учебник, нужно чтобы объем был...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru