Логикалық жылжыту командалары

Солға жылжуSHL командасы операндтағы әр битты, кіші биттарды нөлмен толтырыра отырып, солға қарай жылжытады. Жоғарғы бит тасымалдау жалаушасына орналастырылады, ал осыған дейін тасымалдау жалаушасында тұрған бит жоғалады.

Команданың жазылу түрлері:

SHL операнд,1

SHL операнд,CL

SHL операнд,мән8 (80286 және одан жоғары прцессорлар үшін)

Операнд 8,16 немесе 32 разрядты бола алады. CL регистрі команданың орындалу барысында өзгермейді. Осы формат SHR,SAL,SAP,ROR,ROL,RCR,RCL командалары үшін де қолданылады.

Келтірілген солға жылжыту командасы форматтарының бірінші түрінде операнд 1 бит солға жылжиды. Екінші жағдайда, жылжыту санын көрсету үшін, CL регистрінде жылжыту есептегіші қолданылады. Ал үшінші жағдайда жылжытылатын биттар саны 8 разрядты мәнмен көрсетіледі (20286 процессорлары және одан кейінгі процессор модельдері үшін).

Төменде SHL командасы арқылы регистр мен жад операндтарын қолданудың бірнеше мысалы келтірілген:

SHL ВХ,1 ;ВХ регистрін 1 бит солға жылжыту

SHL BYTE PTR[SI],1 ;8 разрядты жанама операнд

SHL AL,CL ;AL –ді есептегіш бойынша жылжыту

SHL BX,5 ;80286 прцессоры үшін

SHL EBX,16 ;80386 прцессоры үшін

Жылдам көбейту. SHL командасын жылдам көбейту амалын орындау үшін қолдану ыңғайлы. Стандартты көбейту командалары біршама баяу жұмыс жасайды. Жылжыту жасалуға тиіс биттар саны көбейткіштің екілік логарифміне тең болу керек. Мысалы, 2-ге (21 ) көбейту бір битқа жылжуға тең, 4-ке (22 ) көбейту екі битқа жылжуға тең т.с.с. Келесі мысалды DL регистрінің әр жылжытудан кейінгі ондық мәні көрсетілген:

MOV DL,1 ;DL=1d

SHL DL,1 ;DL=2d

SHL DL,1 ;DL=4d

SHL DL,1 ;DL=4d

2-нің дәрежесі болмайтын санға көбейту үшін оны түрлендіру керек. Мысалы, 10 санына көбейту операциясын екі этапқа бөлуге болады: алдымен санды 8-ге (23) көбейтеміз, сонан санды екіге көбейтілген санмен қосамыз, яғни 10=23 +2 формуласын қолданамыз

SHR командасы жоғарғы битты нөлмен ауыстырып, әр битты оңға жылжытады. Төменгі бит тасымалдау жалаушасына көшіріледі, ал тасымалдау жалаушасындағы бит жоғалады.

SHR командасының синтаксисі SHL-дегі сияқты. Келесі мысалда 0 AL регистрінің төменгі битынан тасымалдау жалаушасына көшіріледі, ал AL-дің жоғарғы биты нөлмен толықтырылады:

MOV AL,0D0h ;AL=11010000b.

SHR AL,1 ;AL=01101000b,CF=0.

SHR командасы таңбасыз санды 2-ге бөлу үшін қолданыла алады. Мысалы, 32 санын бір битқа жылжытып нәтижесінде 16 санын аламыз:

MOV DL,32 ;00100000b

SHR DL,1 ;00010000b (DL=16)

Егер таңбалы санды бөлу керек болса, SAR командасын қолданған дұрыс. Себебі бұл команда таңба битын сақтайды.

SHLD және SHRD командалары 80286 процессоры және одан кейінгі процессор модельдеріне арналған. Бұл командалар үш операндалы командалар болып табылады.

SHLD екіеселі сөзді солға жылжыту командасы бірінші операндтағы мәнді үшінші операндтағы көрсетілген бит санына жылжытады. Оң жақтағы босаған биттар екінші операндтың жоғарғы биттарымен толықтырылады. Команданың жазылу синтаксисі:

SHLD reg16,reg16,санағыш

SHLD mem16, reg 16,санағыш

SHLD reg 32, reg 32,санағыш

SHLD mem32, reg 32,санағыш

SHRD екіеселі сөзді оңға жылжыту командасы бірінші операндтағы мәнді есептегіштегі көрсетілген бит санына оңға жылжытады. Сол жақтағы босаған биттар екінші операндтың төменгі биттарымен толықтырылады, бірінші операндтың мәні өзгермейді. Команданың жазылу синтаксисі жоғарғыдай, тек SHRD командасы жазылады.

Мысалы, келесі командаларда wval айнымалысын 4 битқа солға жылжыту жүзеге асырылады. AX регистрінің жоғарға 4 биты wval–дың төменгі позицияларына қойылады.

.DATA

wval DW 9BA6h

.CODE

MOV AX,0AC36h

SHLD wval,AX,4 ;wval=BA6Ah

Келесі мысалда EBX регистрі 1 битқа солға жылжиды, ал dval-дың жоғарғы биты EBX-тің төменгі позициясына орналасады:

.DATA

dval DD 812365Ah

.CODE

MOV EBX,00000006h

SHLD EBX,dval,1 ;EBX=0000000Dh

Бұл командалар қолданбалы графикалық программаларда кеңінен қолданылады. Себебі, экранға шығару үшін бейненің биттық үлгіленін дайындап алу қажет болады.