Логикалық жылжыту командалары
Солға жылжу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
Бұл командалар қолданбалы графикалық программаларда кеңінен қолданылады. Себебі, экранға шығару үшін бейненің биттық үлгіленін дайындап алу қажет болады.