Екі қатарлы программалар. Программаларды енгізу

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

Бізде бір инструкция болған кезде “R” командасы арқылы оны “промистать” етеиек, бірақ бізде енді екі инструкция. Оны көру үшін “U” командасы бар. (ағылшынша айтқанда “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 89C3 MOV BX,AX

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

396F: 0100 B 402MOVAH,D2

396F: 0102 B22AMOVDL,2A

396F: 0104 CD21INT 21

396F: 0106 CD20INT 20

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

-G

Program terminated normally