Айтып өтілгендей, RCL инструкциясының мүмкіндігі байттардыциклдық жылжытумен ғана шектелмейді. Ол бүтін бір сөздерді де жылжыта алады. Біз бұл мүмкіндікті LOOP инструкциясын демокстрация жасауға қолданамыз.
Бұл инструкцияның іс-әрекеті Бейсиктегі FOR – NEXT циклінеұқсас.
FOR – NEXT цикліндегі сияқты LOOP инструкциясына циклді қанша рет қайталау керектігін хабарлауымыз қажет. Біз бұны СХ регистіріне қайталау. Санын ендіру арқылы орындаймыз. Әрбір қайталауда 8088 микропроцессоры СХ регистірінен 1-ді алып тастайды,ал СХ 0-ге тең болған уақытта LOOP циклді аяқтайды.
Неліктен дәл СХ регистірін қолданамыз ?
СХ регистірдегі “С” әріпі “Счётчик” (англ Count) дегенді білдіреді.
Бұл регистірді жалпы қолдануға арналған регистрлер сияқты жалпы мақсатта қолдануға болады, сонымен қатар амалдарды қайталау керек болған жағдайларда да қолдана аламыз.
Төменде қарапайым программа келтірілген. Бұл программада ВХ регистірінің мәні солға қарай BL –ді BH 8 рет жылжытады.
Цикл 106 в() адресінен басталып LOOK листібойынша аяқталады LOOK 106 k кейінгі жазылған сан RKL листінің адресін білдіреді.
Біз программаны іске қосқанда LOOPCX ті 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битті ) 001101101“SHRDL 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:0100B 402 MOV AH, 02
3985:010288DA MOV DL,BL
3985:0104B104MOV CL,04
3985:0106D2EASHR DL,CL
3985:010880C230ADD DL,30
3985:010B80FA3ACMP DL,3A
3985:010E7C03JLO10F
3985:011080C207 ADD DL,07
3985:0113CD21INT 21
3985:0115CD20INT 20
Енгізіп болған соң траcсировка жасаймыз.
Логикалық амалдар.
Алдынғы процедурада біз 1-ші екі цифралы 16-лық санды енгіздік. Енді екі цифралы сол санды белгілеп енгізу керек. Бұл жерде біз білеміз қалай 0-ге теңдеу керек, алдынғы (әлі жылжымаған) санды үлкен 4 Bit-ti, DL кіші төрт Bit-ке теңестіріп қалдырамыз. Үлкен 4- Bit инструкция арқылы 0-ге тең болады. AND атты (логикалық “И”) бұл инструкция логикалық инструкцияға келеді. Олар өзінің басын формальді логикадан алады. Формальді логика туралы айта кетсен “А-истина егер “В“ –да “С” – да истина болады”. Егео немесе В және С жалған болса онда А-да жалған болады.Егер біз осы анықтаманыалсаң “ақиқат” орнына бір қойсақ 0-ді жалған орнына қойсақ онда әр түрлі комбинацияларға А,В және С біз “ақиқат” кестесін құра аламыз. АND операциясына “ақиқат” кестесі 2- Bit туындысы келтірілген.
ANDFTAND01
F FT000
T FTs 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 В 402MOV AH, 02
3985 :010288DAMOVDL, BL
3985 :0104 80E20F ANDDL, OF
3985 :0107 80C290ADDDL, 30
3985 :010A80FAЗACMDDL, 3A
3985:010D7СОЗ J L0112
3985:010F 80C207ADDDL,07
3985:0112CD21IMI21
3985:0114 CD20IMI20
Әр бөлімді программаны жинағаннан алдын 0-мен жұмыс істеп көрейік, К, BL-ге 2-лік 16-лық санды енгізе сіздер оң жақтағы 16-лық санды көре аласыздарBL ригистіріне енген.