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

Логикалық командалар өз атына сәйкес логикалық амалдарды (терістеу, коньюнкция, дезъюнкция т.б.) жүзеге асырады.

Логикалықкомандалар логикалық (бульдік) алгебра амалдарына негізделген. Бұл амалдар екілік санның жеке биттарын модификациялауға мүмкіндік береді. (7.1-кесте)

7.1-кесте. Логикалық амалдар

Операция Сипаттамасы
AND нәтиже екі битта бірге 1- ге тең болғанда 1 болады
OR нәтиже кемінде бір бит 1-ге тең болғанда 1 болады
XOR нәтиже биттар әртүрлі болғанда ғана 1 болады
NOT нәтиже қарама-қарсы мәнге йе болады
TEST AND командасы орындалып, нәтиже жазылмайды, тек жалаушалар орнатылады
BT, BTR, BTC, BTS бастапқы опернадтың n-ші битін ауыстыру жалаушасшасына көшіреді және бастапқы опернадтың осы биттын қайта қосады/алынады/орнатады

Логикалық командалар барлық шарт жалаушаларын өзгертеді. Олардың ішінде программалауда маңыздысы ZF (нөлдік) жалаушасы. Ал басқа (сандармен жұмысқа арналған) жалаушалар логикалық амалдардың орындалуына әсер ете бермейді.

AND командасы: AND ор1,ор2 екі операндтың әр сәйкес разрядымен логикалық көбейту (Және) амалын орындап, нәтижені бірінші операндқа орналастырады. Операндтардың мүмкін комбинациялары:

op1 op2 op1 op2
reg reg mem reg
reg mem mem imm
reg imm    

Екі операндтағы әр сәйкес биттар үшін келесі ереже қолданылады: егер екі биттың да мәндері 1-ге тең болса, онда нәтиже 1, әтпесе 0 болады. Келесі мысалда 8 разрядты сандар үшін AND амалының қолданылуы көрсетілген:

X =
Y =
X and Y =

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

Келесі мысалда 0111 екілік саны биттық үлгі болып саналады:

MOV AL,1101  
AND AL,0111 ;AL=0101

AND командасын пернетақта күйі байтын (DOS жүйесі үшін 004:0017 адресі бойынша орналасқан) орнату үшін қолдануға болады. Бірлікке орналасқан 5-ші бит <NumLock> пернесінің қосылған түрдегі күйін анықтайды. <NumLock> пернесін 5-ші биты алып тастау (нөлге орнату) арқылы өшіруге болады:

MOV BX,16h ;пернетақта байтына сілтеу

AND BYTE PTR [BX],11011111b ;NumLock- ты өшіру

Бұл жерде BYTE PTR операторы керек. Бұл операторсыз ассемблер жад операндысының ұзындығын анықтай алмайды.

OR командасы:OR ор1,ор2 екі операндтың сәйкес биттары арасында логикалық қосу (Немесе) амалын орындап, нәтижені бірінші операндқа меншіктейді. Операндтардың рұқсат етілген комбинациясы AND командасындағыдай.

Екі операндтағы әр сәйкес биттар үшін келесі ереже қолданылады: егер сәйкес екі бит 0-ге тең болса, онда нәтиже биті 0-ге, кері жағдайжа нәтиже биті 1-ге тең болады. Келесі мысалда 4 разрядты сандар үшін OR операциясының қолданылу мысалы көрсетілген.

X =
Y =
X OR Y =

Мысалы, OR командасын 3Вh және 0Fh мәндері үшін қолданайық. Кіші төрт бит орнатылады, ал жоғарғы биттар өзгермейді.

MOV AL,00111011b ;3Вh

OR AL,00001111b ;AL=3Fh

Осындай әдісті 4-ші және 5-ші биттарды орнату арқылы ондық сандарды ASCII кодтарына түрлендіру үшін қолдануға болады. Мысалы, AL=05h мәнін ASCII(35h) кодына сәйкес 5 символына, OR командасында 30h санын қолдану арқылы, түрлендіруге болады.

Ондық санды ASCII кодына түрлендіру:

X = ;05h
Y = ;30h
X OR Y = ;35h (‘5’)

Түрлендіруге арналған командалар тізбегі:

MOV DL,5h ;екілік мән

OR DL,30h ;ASCII кодына түрлендіру

AND командасын <NumLock> пернесінің күйін өзгертуге қолданылған сияқты OR командасын пайдаланыпта, 6 битты өзгерту арқылы <CapsLock> пернесінің де күйін орнатуға болады, айырмашылығы биттық үлгіде: AND командасы үшін 11011111b, OR командасы үшін 01000000b.

PUSH DS ;DS- ті сақтау

MOV AX,40h ;DS- ке BIOS адресін орнату

MOV DS,AX

MOV BX,16h ;пернетақта жалаушаларының байты

OR BYTE PTR[BX],01000000b ;CapsLock-ты қосу

POP DS ;DS-ті қалпына келтіру

XOR командасы:XOR ор1,ор2 екі операндтағы әр сәйкес биттар үшін келесі ереже қолданылады: егер сәйкес екі бит бірдей болса онда нәтиже биты 0-ге тең, кері жағдайжа нәтиже биты 1-ге тең болады. Операндтардың рұқсат етілген комбинациясы AND командасындағыдай.

Төменде екі операнд үшін XOR командасының қолданылу мысалы көрсетілген.

X=
Y=
X XOR Y

Егер XOR командасы екі рет қолданылса, ол өзін өзі инверсиялайды. Мысалы, XOR командасын X және Y сандарына қолданып нәтижені Z-ке меншіктейік. XOR командасын екінші рет Z және Y сандарына қолданғанда X нәтижесін аламыз. Мысалы:

X
y
Z=X XOR Y
y
X=Z XOR Y

NOT командасы: NOT ороперандтың барлық биттарын инверсиялайды. Операндтағы бит 1-ге тең болса 0-ге, 0-ге тең болса 1-ге ауыстырылады. операндтардың рұқсат етілген комбинациясы: reg,mem.

Мысалы F0h саның инверсиясы 0Fh-қа тең болады:

MOV AL,11110000b

NOT AL ;AL= 00001111b

TEST командасы:TEST ор1,ор2екі операнд үшін AND командасын орындайды, бірақ нәтижені сақтамайды, тек жалаушаларды орнатады. Егер логикалық көбейтудің нәтижесі нөл болса ZF=1, кері жаңдайда ZF=0 болады.

Операндтардың рұқсат етілген комбинациясы AND және OR командаларындай.

Мысалы, DOS жүйесінже принтер күйін INT 17h үзілісі арқылы тексеруге болады. INT 17h үзілісі принтер күйін тексеріп күй байтын AL регистріне жазады. Егер бесінші бит 1-ге тең болса принтерде қағаз жоқ. Келесі командалар тексеру жүргізеді де, егер 5-ші бит орнатылған болса, нөлдік жалаушасына 0 жазады:

MOV AH,2 ;принтер күйін оқу функциясы

INT 17h ;BIOS- ты шақыру

TEST AL,0100000b ;ZF=0,қағаз жоқ

BT, BTC, BTR, BTS командалары 80386 және одан кейінгі процессорлар модельдері тобына арналған. 7.2-кестеде BT,BTC,BTR, BTS командаларының синтаксисінің қысқаша сипаттамасы көрсетілген:

7.2-кесте. BT,BTC,BTR,BTS командалары

Команда Сипаттамасы
BT op, n   n битын op операнднан ауыстыру жалаушасына көшіру
BTC op, n   n битын op операнднан ауыстыру жалаушасына көшіру, операндтағы битты инверсиялау
BTR op, n   n битын op операнднан ауыстыру жалаушасына көшіру, операндтағы битты алып тастау
BTS op, n   n битын op операнднан ауыстыру жалаушасына көшіру, операндтағы битты орнату

Бұл командалар үшін келесі операндтар типіне рұқсат етілген:

· op- регистр (16 немесе 32 разряд), жад(16 немесе 32 разряд), мән (8 разряд);

· n- регистр (16 немесе 32 разряд), 8 разрядты мән.

Келесі командаларда әр операциядан кейінгі ауыстыру жалаушасының және AX регистрінің мәндері көрсетілген:

MOV AX,8AB6h

BT AX,15 ;CF=1, AX өзгермейді

BT AX,15 ;CF=1, AX=0AB h

BT AX,0 ;CF=0, AX=0AB7h

BT AX,0 ;CF=1, AX=0AB6h

BSF және BSR командалары. BSF және BSR командалары 80386 процессорлары үшін бірінші орнатылған битты табу үшін сканерлейді. Егер бит табылса нөлдік жалаушасшасы алынып тасталады және қабылдаушы-операндқа табылған бит позициясының нөмірі меншіктеледі. BSF командасы 0 битынен бастап жоғарғы биттарға қарай сканерлейді, ал BSR командасы жоғарғы биттан бастап сканерлейді. BSF және BSR командаларының синтаксисі:

BSF қабылдаушы,жіберуші

BSR қабылдаушы,жіберуші

Келесі типтті операндтарға рұқсат етілген:

· жіберуші- регистр (16 немесе 32 разряд), жад (16 немесе 32 разряд);

· қабылдаушы –регистр (16 немесе 32 разряд)

Мысалы, BSF және BSR командалары 1 және 4 мәндерін CX регистріне орналастырады.

MOV AX,000100101

BSF CX,AX ;CX=1

BSR CX,AX ;CX=4

 

Жылжыту командалары

Жылжыту командалары көбейту және бөлу барысынла қолданылады. Бұндай командалар жоғарғы деңгейлі программалау тілдерінде болмайды, сондықтан ол тілдерде жоғарыдеңгейлі өнімді программалар жазу үшін ассемблер тілін қолданған жөн.

Барлық екі операндты жылжыту командаларында: бірінші операнд жылжытылатын биттар тізбегі болады, ал екінші операнд, бірінші операндты қанша разрядқа жылжыту керек екендігін көрсететін, таңбасыз бүтін сан. Жылжыту нәтижесі бірінші операндқа жазылады.

Жылжыту командалары толу (OF) және тасымалдау(CF) жалаушаларын қолданады.

Жылжыту логикалық жылжыту, арифметикалық жылжыту және циклдық жылжыту болып бөлінеді.