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

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

Логикалыкомандалар логикалы (бульдік) алгебра амалдарына негізделген. Бл амалдар екілік санны жеке биттарын модификациялауа ммкіндік береді. (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) жалаушаларын олданады.

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