Регистрлер аралық мәліметтерді жіберу MOV командасын қолдана. Символдар қатарын экранға шығару

100h адресінен бастап бір-бірінің артынан“INT 21h ““INT 20h” (CDh21hCDh20h). Екі инструкцияны ендіреміз, біз енді барлық уақытта 100 h адресінен программаны бастаймыз.

Бізде бір инструкция болған кезде “R” командасы арқылы оны “промистать” етенек, бірақ бізде енді екі инструкция. Оны көру үшін “И” командасы бар. (ағылшынша айтқанда “unassemble”). Бейск командасыында “list” жұмыс істейді.

-u100

3970:0100CD21 INT 21

3970:0102CD20INT 20

3970:0104D98 D460250B8ESC 09,[DI+0246][DI+B850]

3970:010A8DOOJEA AX,[BX+SI]

3970:010C50PunsAX

3970:010DE82A23CADD243A

3970:0110 8BE5MOVSP, BP

3970:0112 8EC41A ADD243A

3970:0115 5DPOP BP

3970:0116 C3 RET

3970:0117 55Pusn BP

3970:011883ECO2SuBSP, + 02

3970:011B 8BEC MOV BP, SP

3970:011D823EOEO000 emd Byte ptr (000Е), 00

Тізімдегі ендірілген бірінші екі инструкция, ол инструкциялар бір қазір ендірген. Қалған инструкциялар жадта алдыңғы программадан қалған. Біздің программа өскен сайын экранға шыққан кодтарда көбейеді.

АН регистріне 02h мәнін қоямыз, ал DD регистріне барлық басқа символдың кодын (алдыңғы АХ және ДХ регистрін өзгерткендей), одан соң “G” командасын енгіземіз, экранда символды үлкейту үшін

Мысалы: егер сіз DJ ге 41h санды ендірсеңіз, онда көреміз:

-G-

A

Prodgam terminated normally

-Экранға бірнеше символды шығарып көрейік регистрлердің жаңа жолын үйренуіне өткенше

Программаларды ендіру.

Осы жерден бастап, программалардың үлкен бөлігі ұзындығына ең болмағанда бір инструкция болады және ол программаларды көру үшін, біз разсемблирование (“И”) инструкциясын қолданамыз, сондықтан біздің срңғы программамыз мына түрде шығады:

3970:0100 CD21INT21

3970:0102 CD20 INT 20

Осыған дейін біз программалар инструкциясын сан түрінде ендірдік.

Мысалы: CDh, 21h. Бірақ бұл өте қиын жұмыс, болғандай, инструкцияны енгізудің оңай жолы барекен. Debud программасында разассемблирование командасына адам оқитын ькоманда бар инструкцияларды.

Сонымен программаның түсініксіз санын ендіру үшін, біз ассемблирование командасын орындасақ болады, келесі енгізуде:

-А100

3970:0100 INT21

3970:0102 INT 20

3970:0104

Инструкцияны енгізіп болған соң “Enter” клавишін басамыз, және Debug ке шақыру шығады.

“А” командасы Debug ке мәлімдейді. Біз инструкцияны мнемоникалық формада енгізгіміз келгенің, ал 100 санды командада білдіреді енгізу инструкциясы 100h ұяшықтан басталады. Ассемблирование командасы программаға көп жеңілдік туғызады.

Бұрын біз тек Debug пен жұмыс істейтін едік, біз барлық уақытта Debug арқылы программаны енгізбейміз. Программаның өзі AH және DL регистрлерін установка етеді “INT 21h” инструкциясынан алдын. Оның істеуін білу үшін, біз тағы бір MOV инструкцияны үйренейік MOV инструкциясын қолданып программалар құрамыз DOS тан келетін. Келешекте біз MOV инструкциясын қолданамыз сандарды AH және DL регистріне енгізу үшін. MOV ті сандарды регистрлер арасына жіберуін үйренеміз. 1234h ті АХ ке жазайық (12h ті АН регистріне және 34h ті AL регистріне) және ABCDh ті DX ке. (АВh ті DH-қа және СDh ті DL-ге). “А” командасы арқылы инструкцияны енгіземіз:

396F: 0100 88D4MOVAH,DL

Бұл инструкция санды DL ден АН жібереді, АН-қа көшіріп, AL бұл жерде қолданбайды. Егер сіз осы қатарды трассировка жасасаңыз, сонда көресіз AX=CD 34h және DX=ABCDh. Тек АН ауысты. Енді 0 да тек DL дің копиясы бар.

“LET AH = DL” бейсиктегі оператор сияқты MOV инструкциясы санды екінші регистірден бірінші регистрге жібереді, сондықтан біз АН жазамыз DL алдында. MOV инструкциясының формасын қолданайық санды көшіру үшін екі регистр арасына.

Мысалы: IP ді переустановка жасап келесіні енгіземіз:

396F: 0100 89C3MOV BX,AX

Барлық бөлімді қосып үзін программа құрайық. Ол жұлдызшаны “*” енгізеді, барлық операцияны өзі орындап, бізден регистрлердың (АН және DL) установкасын сұрамай. Программа MOV инструкциясын қолданады AH және DL регистрін установить ету үшін, INT 21h DOS тан шақырудан алдын:

396F: 0100 B 402 MOVAH,D2

396F: 0102 B22AMOVDL,2A

396F: 0104 CD21INT 21

396F: 0106 CD20INT 20

Программаны ендіріңіз және оны “U” (“U100”) командасымен тексеріңіз. Көріңіз
IP 100h ұяшыққа көрсетіп тұрғанның, одан кейін “G” командасымен жіберіп көрініз. Нәтижеде экранда “*” символы шығу керек.

-G

Program terminated normally

Біз көрдік қалай болады екілік санау жүйдегі санды цифраға одан соң қалай оны ASCII символына ауыстыру. Егер біз INT 21h инструкцияны қоссақ цифрды шығаруға, онда біздін программа бітеді. Төменде программа берілген. Бұл жерде бірінші инструкция AH 02 орналасқан INT21h функциясын шақыру үшін (02 DOSқа хабарлайды DL регистрінен символды енгізу қажеттілігін):

3985: 0100 B402MOV AH,02

3985: 0102 B90800MOV CX,0008

3985: 0105 B200MOV DL,00

3985: 0107 DOD3RCLBL,1

3985: 0109 80D230ADC DL,30

3985: 010CCD21 INT 21

3985: 010EE2F5LOOP 0105

3985: 0110 CD20 INT 20

Біз алдын көрдік қалай бұл программаның бөлімдері жұмыс істейді жеке, ал енді барлық бөлімді жинайық. BL циклдік жылжуды қолданайық (“RCL BL,1” командасы арқылы) екілікте енгізетін санды таңдайық BL регистрінде жіберіп, одан кейін программаны енгіземіз “G” командасы арқылы. INT 20h инструкциясы орындалып болған соң “G” командасы регистрде алдын болған мәнді қайтарады, сондықтан BL екілікте еңгізілген сан болады. “ADC DL,30” инструкция мәнді “0” немесе “1” символына.

Біріншіден “MOV DL,0” инструкциясы DL нөлге теңдейді, одан кейін ADC инструкциясы 30h-ті DL-ге қосады, соңында перенос қосылады. 30h ол ASCII кодының нөлі, “ADC DL,30” “0” символдың коды болады, немесе код “1” жалаудың установкасы (CY).

Трассировка етіңіз программаны нәтижесін көру үшін. Естеріңізде болсын, абай болуыңызды әр қадамды режимде “Т” командасы жұмыс істегенде. Программа құрамында “INT 21h” инструкциясы, алдын сіз көргендей, бірінші рет “INT 21h” кездескендей, DOS үлкен жұмыс атқарады бұл инструкцияға. Сосын сіздерге “INT 21” де “Т” қолданбауыңыз болады.

“INT 20” программа соңына дейін қатысты трассировка болмайды басқа қалған барлық инструкцияны трассировка етуіңіз болады. Трассировка уақытында әр циклді өткен сайын “INT 21h” инструкциясына еңгізесіздер “G10E”. Бұл программа Debug ке программаның орындалуы жалғастыруын мәлімдейді, IP еңгізілген адрестің мәніне жеткенше.

Сонымен Debug “INT 21h” инструкциясынын орындайды трассировкалау LOOP инструкциясы 10Е адресіне жеткенде тоқтайды, трассировкаға қайтаруына рұхсат етеді.

Біткенсоң программаны тоқтатамыз “INT 20h” инструкциясына жеткен соң “G” командасын ендіріп.