Циклдер бірлестігі. Жылжыту инструкциясы. Логикалық амалдар

Айтып өтілгендей, RCL инструкциясының мүмкіндігі байттардыциклдық жылжытумен ғана шектелмейді. Ол бүтін бір сөздерді де жылжыта алады. Біз бұл мүмкіндікті LOOP инструкциясын демокстрация жасауға қолданамыз.

Бұл инструкцияның іс-әрекеті Бейсиктегі FOR – NEXT цикліне  ұқсас.

FOR – NEXT цикліндегі сияқты LOOP инструкциясына циклді қанша рет қайталау керектігін хабарлауымыз қажет. Біз бұны СХ   регистіріне қайталау. Санын ендіру арқылы орындаймыз. Әрбір қайталауда 8088 микропроцессоры СХ регистірінен 1-ді алып тастайды,ал СХ 0-ге тең болған уақытта LOOP циклді аяқтайды.

Неліктен дәл СХ регистірін қолданамыз ?

СХ регистірдегі “С” әріпі “Счётчик” (англ Count) дегенді білдіреді.

Бұл регистірді жалпы қолдануға арналған регистрлер сияқты жалпы мақсатта қолдануға болады, сонымен қатар амалдарды қайталау керек болған жағдайларда да қолдана аламыз.

Төменде қарапайым программа келтірілген. Бұл программада ВХ регистірінің мәні солға қарай BL –ді BH 8 рет жылжытады.

Цикл 106 в() адресінен басталып LOOK листі  бойынша аяқталады LOOK 106 k кейінгі жазылған сан RKL листінің адресін білдіреді.

Біз программаны іске қосқанда LOOP  CX ті 1-ге кемітеді сосын, егер СХ 0-ге тең болмаса 106 L адресіне өтеді. “RCL BX 1” инструкциясы 8 рет орындалады. Өйткені цикл басынан басталардан алдын СХ ке 8 саны ендіріледі.

Жылжыту инструкциясы.

Біздің программа барлық оналтылық санмен жұмыс істейді, бір саннан тұратын, егер біз 2 цифрлы 16 санды печаттау  керек болса, онда қадамдар санын көбейту керек. Әр бір цифрды ерекшелеу керек.(олар 4 бит жарты байт деп аталады). Бұл бөлімде біз ажырату мүмкіндігін көрсетеміз, кейінгі бөлімде 2-ші цифраны кішіні логикалық амалдармен айрылуын көрсетеміз. RCL инструкциясы байт немесе сөзді солға қарай жылжыту.

Соңғы рет біз “RCL BL,1” инструкциясын пайдаландық, онда бір саны BL бір битке жылжытуды білдіреді, хабарлайды микропроцессор 8088ге.

RCL BL,2 инструкциясын жазалмаймыз, оны тек бір битке жылжытамыз

(RCL BL, 2 инструкциясы микропроцессор 8088 жұмыс істемейді. Ол тек 10286 IBM AT жақсы жұмыс істейді. Біз программаларды 8088 микропроцессорда жазамыз).

CL регисторын бір битке жылжыту үшін ол регисторге жылжыту счетчик қоямыз.

Бұл жерде CL регисторы CX регисторы сияқты LOOP инструкциясында қайталану циклында қолданған.

 Жылжыту санын жазуға 8битті регистор CL болады, 16рет жылжытқанша.

Сөйтіп қалай бұл байланысты 2цифралы 16-қ санмен?

Бұл жердегі план Байтты DL ге оңға қарай 4 битке жылжыту. Оны орындау үшін, бұл жерде басқа жылжыту инструкциясын қолданамыз SHR деп аталатын (қысқаша айтқанда ағылшынша SHIFT RIGHT-логикалық оңға қарай жылжыту).SHR ды қолдана отырып соңғы оң жақтағы тетраэдаға,үлкен 4 битті 16 санды жылжытамыз. (4битті ) 0          0110110        1“SHR  DL 1” инструкциясы.

DL гі 4 битті 0-ге теңеу керек, бұл регистр байтпен бірдей болу үшін оң жақтағы тетрадаға жылжытады.

  Егер біз “SHR DL,1” енгізсек, онда инструкция байтты DL-ге оңға қарай 1 битке жылжытады. Сол уақытта ол 0 битті жолауына жылжытады битке  жазып (үлкен немесе соңғы сол жақтағы битті DL-ге ). Егер бұл операцианы тағы 3 рет қайталасақ, онда  қажетті шығады: төрт үлкен бит, 4 кіші биттің орнына жылжыды. Олардың орнына нолдер шығады.

Барлық логикалық жылжуды бір инструкциясы мен орындаймыз CL регистрін қолдана жылжыту счетчигі етіп CL де 4 орындау инструкциясын  алдынажазсақ, онда DL үлкен16 лық санмен бірдей болады десек болады.

Мысалы: 4 ке CL ,5 DH ті DL ге енгізіп трансировка жасаймыз кейінгі жылжыту инструкциясына.

3985:0100 D2EA SHR DL, CL

Бұл жерде DL, 05H тең болу керек, өйткені ол 1 сан 5DH сөйтіп оны алдыңғы қолданған программа арқылы экранға шығарамыз. Қазіргі уақыттағы программаларды жинап, санды BL  регистрін бірінші оның он алтылық санын печаттайтын. Мысалы:

3985:  0100  B 402       MOV   AH, 02

3985:  0102  88DA       MOV   DL,BL

3985:  0104  B104        MOV   CL,04

3985:  0106  D2EA      SHR   DL,CL

3985:  0108  80C230    ADD   DL,30

3985:  010B  80FA3A  CMP   DL,3A

3985:  010E  7C03        JL      O10F

3985:  0110  80C207   ADD   DL,07

3985:  0113  CD21      INT     21

3985:  0115  CD20      INT     20

Енгізіп болған соң траcсировка жасаймыз.

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

Алдынғы процедурада біз 1-ші екі цифралы 16-лық санды енгіздік. Енді екі цифралы сол санды белгілеп енгізу керек. Бұл жерде біз білеміз қалай 0-ге теңдеу керек, алдынғы (әлі жылжымаған) санды үлкен 4 Bit-ti, DL кіші төрт Bit-ке теңестіріп қалдырамыз. Үлкен 4- Bit инструкция арқылы 0-ге тең болады. AND атты (логикалық “И”) бұл инструкция логикалық инструкцияға келеді. Олар өзінің басын формальді логикадан алады. Формальді логика туралы айта кетсен “А-истина егер “В“ –да “С” – да истина болады”. Егео немесе В және С жалған болса онда А-да жалған болады.Егер біз осы анықтаманыалсаң “ақиқат” орнына бір қойсақ 0-ді жалған орнына қойсақ онда әр түрлі комбинацияларға А,В және С біз “ақиқат” кестесін құра аламыз. АND операциясына “ақиқат” кестесі 2- Bit туындысы келтірілген.

AND  FT                    AND    01

  F       FT                      0        00

  T       FT                      s       01

Сол жақта және жоғарыда 2- Bit-тің мағынасы келтірілген жауабы кестеде көрсетілген. Мысалы: Сіздер көріп түрсыздар “OAND1” 0-ге береді, AND инструкциясы байттармен және сөздермен жұмыс істейді. AND операциясы бірдей орналасқан Bit-терге әр Bit-қа немесе сөзге орындалады. Мысалы: “AND BL, CL” AND операциясын орындайды. 1-ші 0- Bit пен BL және CL регистрі одан соң 1- Bit, 2- Bit т.с. жауабын BL орнатады.

Мысалы: 2-лік түрде көрейік.

1011 0101

0111 0110

AND

0011 0100

AND операциясын орындай отырып OFR және 1-санмен 0-ге тең дейміз. Сол саннын үлкен Bit-тің

1011 0101

0111 0110

AND

0011 0100

Бұл логиканы кіші программада қолданайық BL деп санды алатын кіші 16-лық  санды белгілейді.

AND операциясын OFR ты орындай отырып үлкен 4- Bit термен содан-соң жауабын ASCIIсимволы сияқты етіп шығарады. Бұл программаның кодын 16-санды экранға шығарғанда көрдік. Бұл жерде жаңа инструкцияда. AND инструкциясы.

3985:      0100         В 402           MOV         AH, 02

3985 :     0102         88DA          MOV          DL, BL

3985 :     0104         80E20F       AND          DL, OF

3985 :     0107         80C290       ADD          DL, 30

3985 :     010A        80FAЗA      CMD         DL, 3A

3985:      010D        7СОЗ           J L            0112

3985:      010F         80C207      ADD          DL,07

3985:      0112         CD21          IMI             21

3985:      0114         CD20         IMI              20

Әр бөлімді программаны жинағаннан алдын 0-мен жұмыс істеп көрейік, К, BL-ге 2-лік 16-лық санды енгізе сіздер оң жақтағы 16-лық санды көре аласыздар  BL ригистіріне енген.

«Baribar.kz-тің» Telegram-каналына жазыламыз!