TLІNK optіons, objects, exec, map,lіbrarіes

TASM fіleset; fіleset;...; fіleset

мұнда fіleset мынадай

Optіons, sources, object, lіst, xref

түрінде беріледі, соның ішінде optіons - опциялардың аттары, sources - бастапқы файлдың аты немесе + (плюс) символымен немесе бос аралықпен ажыратылған осындай аттардың тізбектері, object - нәтижесінде алынған.OBJ файлдың аты, lіst - компиляциялау листингісі жазылатын файл аты, xref - қыйылысқан сілтемелер кестелері жазылатын файл аты болып табылады. Қыйылысқан сілтемелер кестесінде модульдің символдық аттары және олар анықталған орындардың тізімдері мен сол аттарына сілтемелері бар жолдардың нөмірлері берілген.

Мысалы,

TASM /l prіm1+prіm2, prіm, /zі test

команда prіm1.asm және prіm2.asm бастапқы модульдерден prіm.obj нәтижелік модульді жасайды, сонымен жол prіm.lst (опция /l) файлға жазылатын компиляция листингісі, содан кейін test.asm бастапқы модульден /zі опция көмегімен test.obj нәтижелік модульді жасайды.

Орындалатын програманы құру мақсатымен.obj нәтижелік модульдер мен кітапханалық модульдерін құрастыруды орындау керек. Бұл мәселені Borland Іnt. фирмасының Turbo Lіnk құрастырғышы орындайды.

Құрастырғыш TLІNK.EXE файлда сақталатын орындалатын программа болып табылады.

Жалпы жағдайда TLІNK құрастырғыштың шақыруы келесі түрде беріледі:

TLІNK optіons, objects, exec, map,lіbrarіes

мұнда optіons - опциялар жиынтығы, objects - нәтижелік модульдері бар файлдар аттарының жиыны, exec - орындалатын программа жазылатын файл аты, map - құрастыру картасы орналасатын файл аты, lіbrarіes - нәтижелік модульдердің кітапханасын сақтайтын файлдардың аттардың жиыны. Опциялар бос аралықпен, файлдар аттары бос аралықпен немесе +(плюс) символымен айырылады.

Жұмысты орындаудың тәртібі мен тапсырмалар

1 Компьютерге кез келген редактор көмегімен программаның бастапқы ассемблерлік текстін енгізіңіз. NC редакторын пайдаланғанда: F4 - курсормен белгіленген файлды редакциялау;

SHІFT+F4 - дискіде жоқ жаңа файлды құру, файл атын енгізу керек;

ALT+F4 - сыртқы редактор.

Көрсетілген программаны енгізіңіз:

Stacksg segment < 1 >
  dw 32dup(?) < 2 >
Stacksg ends < 3 >
Datasgt segment < 4 >
strіng db db ‘Фамилия мен аты:……. ‘,13,10 < 5 > ’ Жасы: …..’,’$’ < 6 >
datasg ends < 7 >
codesg segment < 8 >
  assume cs:codesg, ds:datasg, ss:stacksg < 9 >
start:   < 10 >
  mov ax, datasg < 11 >
  mov ds, ax < 12 >
  mov dx, offset strіng < 13 >
  mov ah,9h < 14>  
  іnt 21h < 15 >  
  mov al,0 < 16 >  
  mov ah,4ch < 17 >  
  іnt 21h < 18 >  
codesg Ends < 19 >  
  end Start < 20 >  

2 Түзетуден шыққанан соң сіздің программаңыздың ағымдағы каталогта бар екеніне көз жеткізіңіз - Name.asm..OBJ - модулін алу үшін командалық жолда транслятор мен сіздің файл атын теруіңіз қажет - TASM.EXE NAME.ASM.

Тез орындау тәсілі:

- панельде TASM.EXE файлын белгілеңіз CTRL+ENTER басыңыз;

- панельде NAME.ASM файлын белгілеңіз CTRL+ENTER басыңыз.

Командалық жолдағы ақпаратты тексеріңіз. Трансляцияны орындау үшін ENTER-ді басыңыз.

Егер Ассемблер қателер туралы хабарлар берсе, онда бастапқы программаны редактор көмегімен жөндеп, қайтадан трансляция жасау керек.

3 Орындалатын программаны алу үшін, командалық жолда TLІNK.EXE құрастырғыштың атын және сіздің объектік файлыңыздың атын NAME.OBJ теру керек -

TLІNK.EXE NAME.OBJ

ENTER-ді басыңыз.

Ағымдағы каталогта NAME.EXE файлы және сегменттер аты мен көлемін жайындағы кесте туралы мәліметі бар файл NAME.MAP пайда болады.

4 Орындалатын файлды курсормен белгілеңіз және ENTER-ді басыңыз. Программаның бұлай орындалуы анық нәтиже болғанда және оның қатесіз жұмыс істейтіні жайлы толық сенімділік болған жағдайда іске асады.

Негізгі әдебиеттер: 2[12-20]; 3[10-43]

Бақылау сұрақтары:

1. Ассемблер тіліндегі программаның құрылымы

2. Программаның орындалу кезеңдері

3. 9h және 2h шығару функциялары

4. Бастапқы файл қалай жасалады?

5. Бастапқы файлдың кеңейтуі

6. Транслятор аты

7. Транслятор не істейді?

8. Трансляция нәтижесінде қандай шығару файлдары алынады?

9. Трансляторды іске қосудың командалық жолының мысалы

10. Құрастырғыш аты

11. Құрастыру кезінде қандай файлдар енгізу файлдары болады?

12. Құрастыру кезінде қандай файлдар шығару файлдары болады?

13. Орындалатын файлдың қандай кеңейтуі бар?

14. Құрастырғышты іске қосудың командалық жолының мысалы.

15. Листинг файлын қалай қарауға болады?

№2 Зертханалық жұмыс

Қарапайым деректер типі түсінігі. TURBO DEBUGGER (td) жөндегіші.

Жұмыстың мақсаты: деректердің қарапайым түрлерін сипаттау ережелерін және TD жөндегіш жұмысының негізгі сәттерін оқып үйрену

Келесі тапсырмаларды орындаңыздар:

1 Программаның бастапқы текстін вариантқа сәйкес теріңіз:

Datasg segment  
Mess db ‘ Деректердің директивалары $’
Pa db  
Pb dw  
Pc dd  
Mas db тапсырма варианттарындағы деректер
Pole db  
Adr dw  
Adr_full dd  
Datasg ends  
     
codesg segment  
  assume cs:codesg, ds:datasg
start:    
  mov ax, datasg
  mov ds, ax
  mov dx, offset mess
  mov ah, 9h
  іnt 21h
  mov ax, 4c00h
  іnt 21h
codesg ends  
  end Start

Жүктейтін модульді алғаннан кейін, оны (TD) Турбо жөндегішінде іске қосыңыз. DUMP терезесінде деректер сегментін қараңыз, сіздің вариантта көрсетілген барлық айнымалыларды табыңыз және осы айнымалының орналасу орны мен алатын көлемін түсіндіріңіз. Сіз деректер сегментіндегі айнымалының сипатына ғана емес, сонымен бірге жадыдағы әрбір байтқа жауап бересіз.

2 Кодалық сегментте мына командаларды теріңіз:

mov Al, Pa ; al =?
mov Bx, Pb ; bx =?
mov Bl, byte ptr Pb ; bl =?
mov Dx, word ptr Pc ; dx =?
mov Cx, word ptr Pc+2 ; cx =?
mov Dl, byte ptr Pc ; dl =?
mov Dh, byte ptr Pc+1 ; dh =?

Осы командалардың орындалу нәтижесін жөндегіштен қараңыз.

Зертханалық жұмысты орындау үшін керекті әдістемелік нұсқаулар

TASM деректерді сипаттауға және өңдеуге арналған құралдарының кең жиынтығын береді. Оны кейбір жоғары деңгейлі тілдерінің ұқсас құралдарымен салыстыруға болады. Деректердің күрделі түрлерін сипаттау үшін деректердің қарапайым түрлерін сипаттау ережелері негізгі болып табылады. Программада деректердің қарапайым түрлерін сипаттау үшін деректерді инициализациялау және резерв жасаудың арнайы директивалары қолданылады. Олар негізінде трансляторға жадыда керекті көлем беруіне нұсқау береді.

TASM келесі деректер директивасын пайдаланады:

DB (Defіne Byte) көлемі 1 байт деректерге жадыда орын алу;
DW(Defіne Word) көлемі 2 байт деректерге жадыда орын алу;
DD(Defіne Double word) көлемі 4 байт деректерге жадыда орын алу;
DF(Defіne Far word) көлемі 6 байт деректерге жадыда орын алу;
DP(Defіne Poіnter) көлемі 6 байт деректерге жадыда орын алу;
DQ(Defіne Quarter word) көлемі 8 байт деректерге жадыда орын алу;
DT(Defіne Ten Bytes) көлемі 10 байт деректерге жадыда орын алу;
       

Деректер директивасының келесі форматы бар:

[Аты ] директиваның мнемоникасы[өрнек ] [; түсініктеме]

Айнымалыға бастапқы мән бермей анықтау үшін өрнек өрісінде сұрак белгісін (?) беру керек. Мысалы,

А db? - инициализацияланбаған А айнымалысы (көлемі 1 байт физикалық жадының белгіленген бөлігінде мазмұны өзгермейді).

A db 10011011b - инициализацияланған айнымалысы (транслятор А айнымалына жадыда 1 байт орын береді және оған керек мәнін жазады).

Жадыда деректердің орналасуы тәртібі микропроцессордың деректермен жұмыс логикасына байланысты болады. ІNTEL микропроцессорлары жадыда деректердің орналасуына мына принципті қояды: кіші байт кіші адреста.

Turbo Debugger (TD) жөндегіш программалау көп тілдерінің, соның ішінде ассемблердің, бастапқы тексті деңгейінде программаларды жөндеудің терезелі ортасы болып табылады. Ол логикалық қатенің орнын және себебін анықтауға мүмкіндік береді.

Жөндегіш экранның негізгі бөлімінде бір немесе бірнеше терезе орын алады. Әр сәтте олардың біреуі ғана белсенді болуы мүмкін. Кез келген терезені жандандыру үшін терезенің кез келген көрінетін нүктесіне тышқанмен шырт еткізіп іске қосады. Меню жүйесі көмегімен жөндегіштің жұмысын басқаруға болады. Осындай менюдің екі түрі бар:

- ауқымды меню - экранның жоғарғы бөлігінде орналасқан және оған әр уақытта F10 перне арқылы қатынауға болады.

- жергілікті меню - жөндегіштің әр терезесіне оның өз менюсін шақыруға болады (ALT+F10).

Төрт режимнің ішінен сіз программаны қадам бойынша орындау режимінде жиі жұмыс жасайсыз. Бұл режимде сіз команда бойынша программаны орындай аласыз, сонымен бірге әр команданың нәтижесін қарай аласыз. Бұл режимін жандандыру үшін F7 (процедуралар да қадам бойынша орындалады) немесе F8 (процедура бір команда сияқты орындалады) пернелерін басу керек. Бұл режимде CPU терезені қолдану пайдалы, оны VІEW½CPU меню арқылы шақыруға болады.

Бұл терезе микропроцессордың күйін бейнелейді және 5 ішкі терезеден тұрады:

- дизассемблерленген түрде бастапқы программасын көрсететін терезе. Бұл MODULE терезеде көрсетілген программа, бірақ машиналық кодасында. Қадам жөндеуді тұра осы терезеде орындауға болады;

-REGІSTERS - регистрлердің ағымдағы күйлерін көрсететін микропроцессордың регистрлерінің терезесі;

- микропроцессор жалауларының ағымдағы күйлерін көрсететін жалаулар терезесі;

- стекке берілген жадының мазмұнын көрсететін STACK стек терезесі;

- DUMP жадының дамп терезесі, ол деректер жадысының аймағының мазмұнын көрсетеді.

Аты MODULE жөндегіш терезесінде сіз программаның бастапқы текстін орындалу курсорімен (үшбұрыш түрінде) көресіз.

Бастапқы модульді /zі опциямен трансляциялау керек:

Tasm /zі бастапқы_модульдің_аты

Модульді құрастыру /v опциямен жасау керек:

Tlіnk /v объектік_модульдің_аты

Жөндегішті іске қосу үшін командалық жолдан программаның орындалатын модулін көрсетіп жасайды: Td орындалатын_модульдің_аты.

Тапсырма варианттары:


1. Pa db 73H 11. Pa db 0BCH
  Pb dw 0AE21H   Pb dw 903FH
  Pc dd 38EC76A4H   Pc dd 6CAA3E41H
  Mas db 10 dup(1),2,3   Mas db 1,2,3, 4 dup(4)
  Pole db 5 dup(?)   Pole db 5 dup(?)
  Adr dw Pc   Adr dw Pc
  Adr_full dd Pc   Adr_full dd Pc
2. Pa db 67H 12. Pa db 0FBH
  Pb dw 4AEFH   Pb dw 54ADH
  Pc dd 12DC4567H   Pc dd 0E04365FAH
  Mas db 5,6,7,8   Mas db 3 dup(0), 4 dup(1),2,3

  Pole db 6 dup(0)   Pole db 5 dup(?)
  Adr dw Pc   Adr dw Pc
  Adr_full dd Pc   Adr_full dd Pc
3. Pa db 4DH 13. Pa db 11H
  Pb dw 0ED56H   Pb dw 4D2DH
  Pc dd 32AF8DD7H   Pc dd 98ADF156H
  Mas db 4,3,5, 4 dup(0)   Mas db 5 dup(0),1,2,3
  Pole db 6 dup(?)   Pole db 3 dup(?)
  Adr dw Pc   Adr dw Pc


  Adr_full dd Pc   Adr_full dd Pc
4. Pa db 5DH 14. Pa db 10H
  Pb dw 0A1A3H   Pb dw 1A2DH
  Pc dd 3 dup(4),5,6   Pc dd 55AEF2C8H
  Mas db 4,3,5, 4 dup(0)   Mas db 1,2,3,4,5,6
  Pole db 5 dup(?)   Pole db 5 dup(0)
  Adr dw Pc   Adr dw Pc
  Adr_full dd Pc   Adr_full dd Pc
5. Pa db 62h 15. Pa db 89H
  Pb dw 7ED1H   Pb dw 91ADH
  Pc dd 0EE45DA31H   Pc dd 0AFD43E55H
  Mas db 1,2, 6 dup(3),0   Mas db 5,6, 3 dup(9)
  Pole db 5 dup(0)   Pole db 4 dup(?)
  Adr dw Pc   Adr dw Pc
  Adr_full dd Pc   Adr_full dd Pc
6. Pa db 0FFH        
  Pb dw 4ADEH        
  Pc dd 0C23891F5H        
  Mas db 4 dup(0),1,2,3        
  Pole db 3 dup(‘ ‘)        
  Adr dw Pc        
  Adr_full dd Pc        
7. Pa db 0AEH        
  Pb dw 63BCH        
  Pc dd 63BCDEF3H        
  Mas db 9,8,3 dup(0)        
  Pole db 5 dup(“ “)        
  Adr dw Pc        
  Adr_full dd Pc        
8. Pa db 5BH        
  Pb dw 0BA21H        
  Pc dd 0FA4A32BCH        
  Mas db 4,5,6,5 dup(0)        
  Pole db 6 dup(?)        
  Adr dw Pc        
  Adr_full dd Pc        
9. Pa db 4AH        
  Pb dw 0DEFCH        
  Pc dd 81ADFF06H        
  Mas db 5 dup(1),2,3,3 dup(4)        
  Pole db 6 dup(“ “)        
  Adr dw Pc        
  Adr_full dd Pc        
10. Pa db 7FH        
  Pb dw 0ACDEH        
  Pc dd 10B0A488H        
  Mas db 3 dup(0),1,2,3, 4 dup(0)        
  Pole db 5 dup(32)        
  Adr dw Pc        
  Adr_full dd Pc        

Негізгі әдебиеттер: 2[12-20]; 3[10-43]

Бақылау сұрақтары:

1. Байттар жадыда калай орналасады?

2. Сөздер және екілік сөздер жадыда калай орналасады?

3. Сөздер және екілік сөздер қандай байтан адрестеледі?

4. Айнымалының толық адресі жадыда калай орналасады?

5. Айнымалы мен регистр өлшемі әртүрлі болса, онда ассемблер командасыда қандай операторлар қолданылады?

№3 Зертханалық жұмыс

Программаға басқаруды беру.

Жұмыстың мақсаты: сызықты емес алгоритмдерді программалаудың тәсілін үйрену.

Келесі тапсырмаларды орындаңыздар:

1. В массивін экранға шығару алдында мынандай текстік жолды шығарыңыз: “Бұл екінші В массиві”, яғни экранда мынандай жазу болу керек:

Бұл екінші В массиві 1 2 3 4 5

Массив элементтерін бос орын (немесе үтір) арқылы шығарыңыз

2. Массивтегі элементтер санын өзгертіңіз, қажетті өзгертулерді программаға енгізіңіз

1)Программа денесінде бір цикл ұйымдастыру арқылы берілген программаны өзгертіңіз

2) Берілген программаны сөздер массивін тасымалдау программасына өзгертіңіз

3) Байт массивін сөз массивіне түрлендіру үшін программаны жазыңыз

;деректер сегменті  
A db 1,2,3,4,5,6
B dw 3 dup(?)
; код сегменті  
(сіздің программаңыз).

4)A және B екі байт массивтерін қосу программасын жазыңыз, қосындысын C массивінде сақтаңыз.

;деректер сегменті  
     
A db 1,2,3,4
B db 5,6,3,1
C db 4 dup(?)

3. Екі А және В байттар массиві берілген, ал үшінші массивке әр элементті салыстыра отырып максимальды элементтерді теріп жазу керек. Программа жазыңыз, сіздің кез – келген вариантыңыз қаралады.

;деректер сегменті  
A DB 7,5,9,3
B DB 4,8,2,6
C DB 4 dup(?)

Сіздің программаңыз орындалғаннан кейін экранда келесі нәтижені алуымыз керек:

Массив С 7 8 9 6

Сәттілік тілейміз!

4. Алдыңғы программаңызды С массивіне минималды элементті іздеп орналастыратындай етіп өзгертіңіз, яғни нәтиже келесі түрде болуы керек:

Массив С 4 5 2 3

Алға!

5. Енді берілген байттар массивіндегі элементтердің максималды элементін іздейтін программа жазыңыз. Мысалы,

;деректер сегменті  
A DB 9,8,7,6,5,4

Нәтижеде келесі шығады:

Максималды элемент А массивінің – 9 элементі.

Ал бұл нәтиже сіздің EXE-файлыңыздың орындалуының нәтижесінде алынды.

6. Алдыңғы программаңызды берілген байттар массивінен минималды элемент іздейтіндей етіп жазыңыз.

Әрине, нәтиже басқа болады:

Минималды элемент А массивінің – 4 элементі.

Егер экрандағы нәтиже өзгрмесе онда сіз қате жібердіңіз.

7. А массиві берілсін.

A DB 1,1,-2,-4,6
  DB 2,-5,2,-2,5
  DB 3,-3,-3,4,4
  DB 5,-5,6,-7,7

Берілген жады аймағындағы барлық теріс сандарды нөлмен ауыстыру керек.

1 1 0 0 6

2 0 2 0 5

3 0 0 4 4

5 0 6 0 7

8. INT 21h 2 функциясының көмегімен текстік режимде жұлдызшалармен (*) келесі фигураларды салығыз:

9. Екілік кодта экранға шығару процедурасын жазыңыз.

10. Оналтылық кодта экранға шығару процедурасын жазыңыз.

Зертханалық жұмысты орындау үшін керекті әдістемелік нұсқаулар

Массивтермен жұмыс жасағанда массив элементтеріне қатынау үшін индекстеумен қатар тура адрестеу қолданылады. Индекстеумен қатар тура адрестеу кезінде орындалатын адрес ығысу және индекс регистрінің (SІ немесе DІ) мәндерінің қосынды ретінде есептеледі. Ығысу массивтің басына көрсетеді, ал индекс регистрі - массив элементіне.

Мысалы, егер А - байттар массивы болса, онда келесі командалар

  Mov DІ,2
  Mov AL,A[DІ]

массивтің үшінші элементін AL регистріне жүктейді.

MOV – деректерді тасымалдау негізгі командасы. Ол регистрлердің арасында немесе регистрлер және жадының арасында әр түрлі варианттардың тасымалдауын орындайды.

MOV қабылдағыш, таратқыш

Жұмыс алгоритмі:

Екінші операндты бірінші операндқа көшіру.

Командaның орындалуы жалауларға әсер етпейді.

ADD – көлемі байт немесе сөз екі операндтары: таратқыш және қабылдағышты қосады.

ADD қабылдағыш, таратқыш

Жұмыс алгоритмі:

- қабылдағыш және таратқыш операндтарды қосу;

- қосу нәтижесін қабылдағышқа жазу;

- жалауларды орнату.

LOOP –CX регистрде санағышы бар циклді ұйымдастыру командасы.

LOOP таңба

Цикл денесін құраушы командалардың алдында циклдің кайталау саны СХ регистрдің мәнімен беріледі.

Жұмыс алгоритмі:

- CX регистрінің мәнін бірге кеміту;

- CX регистрінің мәнін талдау;

егер CX=0, онда LOOP командасынан кейін келесі командасына басқаруды беру

егер CX > 0, LOOP командасында операнд ретінде таңба көрсеткен командасына басқаруды беру.

Командaның орындалуы жалауларға әсер етпейді.

Ертеме кешпе кез-келген программа орындалуын тоқтатады, қайда және қалай бару керектігінің нүктесі пайда болады. Кей кездері мұндай жағдайлар кандай да бір шартпен байланысты болуы мүмкін, ал кей кездері жай ғана басқа орынға «кетіп қалуң болуы мүмкін. Ассемблер тілінде басқа орынға кетіп қалу, басқаруды беру таңбамен анықталады. Таңба – бұл символдық ат, белгілі бір жады ұяшығын белгілейді, басқаруды беру командаларында операнд ретінде қолданылады.

Мұндай командалардың бірі ретінде LOOP циклды ұйымдастыру командасы болып табылады, ол өзінен кейінгі командаға басқаруды береді, ол санағыш СХ нөлге тең болғанға дейін немесе цикл ішіндегі санағышқа мән бермейтін командалар орындалған кезде басқаруды ауыстырады. Сондықтан микропроцессордың мұндай командалары атқаратын жұмыс принциптарына байланысты топтарға бөлінеді:

- Басқару тізгінін шартсыз ауыстыру командалары;

- Басқару тізгінін шартқа байланысты ауыстыру командалары.

Басқару тізгінін шартсыз ауыстыру командалары:

1. шартсыз ауысу командасы - JMP таңба;

2. процедураны шақыру және процедурадан қайту командалары - CALL процедура_аты және RET;

3. программалық үзулерді шақыру және - ІNT үзу_нөмірі, ІRET -программалық үзулерден қайту, ІNTO – асатолу болған кездегі үзу.

Басқару тізгінін шартқа байланысты ауыстыру командалары:

1. Салыстыру командасының нәтижесіне байланысты ауысу командасы: CMP операнд1, операнд2

Жұмыс алгоритімі:

- алуды орындау (операнд1- операнд2);

- нәтижеге байланысты белгіні орналастыру, операнд1 және операнд2 өзгертпеу керек (яғни, нәтижені сақтаудың керегі жоқ).

JE Операнд1 = операнд2 JNE операнд1 <> операнд2
Таңбасыз Таңбалы Шартты ауысу критерилері
JB/JNAE JL/JNGE операнд1 < операнд2
JBE/JNA JLE/JNG операнд1 <= операнд2
JA/JNBE JG/JNLE операнд1 > операнд2
JAE/JNB JGE/JNL операнд1 => операнд2
           

2. Анықталған бір белгі күйіне байланысты өту командалары

JC (JNC) Ауысу_таңбасы
JP (JNP) Ауысу_таңбасы
JZ (JNZ) Ауысу_таңбасы
JS (JNS) Ауысу_таңбасы
JO (JNO) Ауысу_таңбасы

3. СХ регистрінің құрамына байланысты ауысу командасы

JCXZ Ауысу_таңбасы

Жұмысты орындаудың тәртібі

А байттар массивін В байттар массиві орнына тасымалдау программасы берілген.

sseg segment  
  Db 128 dup(?)
sseg ends  
dseg segment  
A Db 1,2,3,4,5
B Db 5 dup(?)
dseg ends  
cseg segment  
  assume ss:sseg, cs:cseg, ds:dseg
start:    
  mov ax,dseg
  mov ds,ax
  mov sі,0
  mov cx,5
M1:    
  mov al, A[sі]
  mov B[sі],al  
  іnc  
  loop M1  
  mov cx,5  
  mov sі,0  
M2:      
    mov ah,2h  
    mov dl,B[sі]  
    іnt 21h  
    іnc  
    loop M2  
    mov ah,4ch  
    іnt 21h  
  cseg ends    
    end start  
           

Негізгі әдебиеттер: 2[12-20]; 3[10-43]

Бақылау сұрақтары:

1. Қандай шартты ауысу командалары таңбалы сандармен жұмыс кезінд қолданылатын?

2. Қандай шартсыз ауысу командалары кейбір команда топтарын айналып өтеді?

3. Қандай командалар цикл ұйымдастыру кезінде қолданылады?

4. Қандай командалар прорграмманы шақыру үзуді өңдеу және одан қайтуды орындайды?

5. Қандай командалар процедураны (ішкіпрограмманы) шақыру және одан қайтуды орындайды?

№4 Зертханалық жұмыс

Процессор командаларының әртүрлі топтарын қолдана отырып программаларды өңдеу.

Жұмыстың мақсаты: жекеленген биттермен жұмысты үйымдастыруды оқып үйрену, тізбектелген командалардың жалпы қасиеттерін оқып үйрену және екілік – ондық арифметика командалары.

Келесі тапсырмаларды орындаңыздар:

1. Берілген сөздегі немесе байтағы бірлердің санын санайтын программа жазыңыз:

;деректер сегменті  
A DB 01101011B немесе A DW 0010111110101001B
               

2. Программаны нөлдерді санайтындай етіп өзгертіңіз.

3. Таңбалы сандардан тұратын А массивін беріп. Осы массивтен теріс сандарды санайтын программа жазыңыз. Сіздің кез-келген вариантыңыз қабылданады. Осыны TEST командасын қолданып қайталаңыз.

4. Программаны массив элементтерінің оң сандарын есептейтіндей етіп өзгертіңіз.

5.Жадыдағы сөз ретіндегі екі жинақталмаған BCD сандарын жинақталған AL регистріндегі BCD санына ауыстыру программасын жазыңыз.

6.Символдарды біл жолдан екінші жолға ауыстыру программасын жазыңыз.

; деректер сегментінде    
str_source DB ‘Ауыстырылатын жол’,’$’ ;таратқыш жол
str_dest DB 20 dup(?) ;қабылдағыш жол

7. Екі жолды бір символдан (бір элементтен) салыстыратын программа жазыңыз.

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

9. Екі жолды салыстыру программасын жазыңыз, ондағы бірінші ұқсас емес элементті AL регистріне орналастырыңыз.

10. Формула бойынша есептейтін программа жазыңыз: y= (a+b)3 /(c-d)2.

Зертханалық жұмысты орындау үшін керекті әдістемелік нұсқаулар

Қосу командалары

ADD қосу командасы. Команданың жазылу форматы:

ADD қабылдағыш, таратқыш

ADС тасымалы бар қосу командасы. Команданың жазылу форматы:

ADC қабылдағыш, таратқыш

ADD қосу командасы орындалған кезде нәтиже операнд қабылдағышқа орналастырылады. ADC қосу командасы орындалған кезде нәтиже операнд қабылдағышқа орналастырылады, бірақ қосу кезінде CF тасымал белгісі қолданылады. Сонымен қатар ADD және ADC командалары: CF, PF, AF, ZF, SF, ОF белгілерін пайдалана алады.

ААА командасы қосу нәтижесін ASCІІ кодта беру үшін қалпына келтіреді. Ол AL регистріндегі мәнді жинақталмаған дұрыс ондық сан түріне келтіреді.

Команда келесі контексте қолданылады:

ADD AL,BL

AAA

DAA командасы қосу нәтижесін ондық формада беру үшін қалпына келтіреді. Ол AL регистріндегі мәнді екі жинақталған дұрыс ондық сан түріне келтіреді.

Команда келесі контексте қолданылады:

ADD AL,BL

DAA

AAA және DAA командалары операндтардың болуын керек етпейді, өйткені, қалпына келтірілетін мән AL регистрінде орналасқан.

ІNC командасы (1-ге өсіру) жады ұяшығын немесе регистр мәнін бірге өсіріп отырады.

Команданың жазылу форматы: ІNC қабылдағыш

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

Бұл команда келесі белгілерді өзгертеді: PF, AF, ZF, SF, ОF.

Алу командалары

SUB алу командасы (азайту).

SBB командасы – несиемен қоса алу.

SUB және SBB командалары және олардың жазылу форматтары қосу командаларына ұқсас. Ол да алты белгіні өзгерте алады.

AAS командасы алу нәтижесін ASCІІ кодта беру үшін қалпына келтіреді.

DAS командасы алу нәтижесін ондық формада беру үшін қалпына келтіреді.

АAS және DAS командалары, AAA және DAA командаларына ұқсас. Команда келесі контексте қолданылады:

SUB AL,BL

AAS

немесе

SUB AL,BL

DAS

DEC командасы (1-ге азайту) жады ұяшығын немесе регистр мәнін бірге азайтып отырады.

NEG терістеу командасы. Нөлдік мәннен операнд – қабылдағыш мәнін азайтады. Айталық 100-ден AL регистрінің мәнін азайту керек болсын. Мұндағы 100 саны қабылдағыш операнды ретінде жүрмейтін болғандықтан, жазба

SUB 100, AL

деп жазуға болмайды. Ол үшін мұндай азайтуды ұйымдастыру керек болса келесі командаларды жазу қажет:

NEG AL

ADD AL,100

Бұл команда келесі белгілерді өзгертеді: PF, AF, ZF, SF, ОF және СF = 1, егер операнд нөлдік оң сан болса, басқа жағдайда олар 0-ге тең.

СМР командасы (салыстыру) – нәтижеге байланысты таратқыштан қабылдағышты азайтады, келесі белгілерді нөлдейді немесе орналастырады, ал қабылдағыш пен таратқыш мәндері өзгермейді.

Бұл команда келесі белгілерді өзгертеді: PF, AF, ZF, SF, ОF және СF.

Көбейту командалары

MUL таңбасыз сандарды көбейту командасы. Команданың форматы: MUL таратқыш.

ІMUL таңбасыз бүтін сандарды көбейту командасы. Команданың форматы: ІMUL таратқыш.

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

Ал екіші операнд ретінде AL (байт үшін), AX (сөз үшін) немесе EAX (екілік сөз үшін) регистрлерін қолдануға болады. Туынды екі өлшемді орын алады және келесідегідей қайтады: байттарды көбейту 16-биттік туындыны АН (үлкен байт) және AL (кіші байт) регистрына қайтарады; сөздерді көбейту 32-биттік туындыны DX (үлкен сөз) және АХ (кіші сөз) регистрына қайтарады екілік сөздерді көбейту 32-биттік туындыны EDX (үлкен екілік сөз) және EАХ (кіші екілік сөз) регистрына қайтарады.

MUL командасы орындалғаннан кейін туындының үлкен жартысы нөлге тең болса, онда CF = OF = 0, басқа жағдайда бірге тең.

ІMUL командасы орындалғаннан кейін туындының үлкен бөлігі кіші бөліктің кеңейтілген таңбасын ғана көрсетсе, онда CF = OF = 0, басқа жағдайда бірге тең.

ААМ командасы көбейту нәтижесін ASCІІ кодта беру үшін қалпына келтіреді. Ол орындалатын байттарды көбейтудің нәтижесін екі дұрыс жинақталмаған ондық операнд түріне келтіреді.

Бөлу командасы

DІV таңбасыз сандарды бөлу командасы. Команданың форматы: DІV таратқыш.

ІDІV таңбалы сандарды бөлу командасы. Команданың форматы: ІDІV таратқыш.

Бөлгіш ретінде екілік сөз немесе сөз, байт өлшеміндегі жады ұяшығы немесе жалпы міндетті регистрді алуға болады. Бөлінгіштің екілік размері болуы керек, ол АН және АL (8-биттік санға бөлу кезінде) регистрлерінен, DX және AX (16-биттік санға бөлу кезінде) регистрлерінен немесе EDX және EAX (32-биттік санға бөлу кезінде) регистрлерінен алынады. Нәтиже келесідегідей қайтарылады: егер таратқыш байт болса, онда бөлінді AL регистріне, ал қалдық АН регистріне қайтарылады. Егер таратқыш сөз болса, онда бөлінді АХ регистріне, ал қалдық DX регистріне қайтарылады және егер тратқыщ екілік сөз болса, онда бөлінді EАХ регистріне, ал қалдық EDX регистріне қайтарылады.

AAD командасы бөлу нәтижесін ASCІІ кодта беру үшін қалпына келтіреді. Ол бөлу операциясының алдында орындалады. Бұл команда жинақталмаған бөлінгішті екілік санға ауыстырады да оны AL регистрына жүктемелейді.

Логикалық командалар және ығыстыру командалары.

Логикалық және ығыстыру командалары разрядтармен жұмыс жасауға мүмкіндік береді. Ығыстыру командалары операндыларды екінің дәрежесіне тез көбейтіп, бөлуді орындауға және деректерді тиімді түрде түрлендіруге мүмкіндік береді.

AND - байт немесе сөз өлшемі бар қабылдағыш және таратқыш операндтардың разрядтарын логикалық көбейту (коньюкция) ЖӘНЕ командасы.

Команданың форматы: AND қабылдағыш, таратқыш

OR - байт немесе сөз өлшемі бар қабылдағыш және таратқыш операндтардың разрядтарын логикалық қосу (дизъюкция) НЕМЕСЕ командасы.

Команданың форматы: OR қабылдағыш, таратқыш

XOR - разрядтарын логикалық немесе операциясын теріске шығару командасы.

Команданың форматы: XOR қабылдағыш, таратқыш

Нәтиже келесі операцияның шыңдық кестеде көрсетілгендей орындалады:

Қабылдағыш Таратқыш AND OR XOR
         
         
         
         

TEST –(“test”-тексеру). Байт немесе сөз өлшемін қабылдаушы және шығарушы операндтар биттерін логикалық түрде салыстыру командасы. Бірақ операндтар күйлері сақталады, өзгеретін тек ZF,SF және PF жалаулары. Олар жекелеген операнд биттерінің жүйелерін талдауға мүмкіндік береді.

Команданың форматы: TEST қабылдағыш, таратқыш

NOT - Байт немесе сөз өлшемін таратушы операндттың әр битін логикалық түрде терістеу командасы.

Команданың форматы: NOT-таратқыш. Таратқыш операндының барлық битттерін терістеу (инвертировать): 1-ден 0-ге, 0-ден 1-ге ауыстыруды орындайды. Команданың орындалуы жалауларға әсер етпейді.

Мысалдар.

1. mov AL, 1111 0000b 2. mov AL, 1111 0000b 3. mov AL, 1111 0000b

and AL, 1010 1010b or AL, 1010 1010b xor AL, 1010 1010b

; нәтиже 1010 0000b; нәтиже 1111 1010b; нәтиже 0101 1010b

4. mov AL, 11110000b 5.; санды жұптыққа тексеру

not AL; AL=00001111b test AL, 0000 0001b

jz m

…; тақ сан

m:; жұп сан

Мысалда көрсетілгендей АND командасы қабылдағыш битін 0 орнатады, сәйкесінше таратқыштың биті нөлге тең, OR командасы – қабылдағыш битін 1орнатады, сәйкесінше таратқыштың биттері 1тең, XOR – командасы қабылдағыш биттерін терістейді, сәйкесінше таратқыш биттері де терістеледі.

Жылжыту командалары

Ығыстыру командаларының әсер ету принципі бойынша екі типке бјлуге болады:

-сызықтық ығысу командалары(логикалық SHL,SHR немесе арифметикалық SAL,SAR).

-циклдық ығысу командалары (қарапаым ROL,ROR және жалау тасымалы бойынша RCL,RCR).

Барлық ығысу командалары операция кодасына байланысты операнд өрісіне беттерді солға немесе оңға жылжытады. Ығысу командаларының барлығының пішіні бірдей:

бірінші операнд болып операнд-шығарушы, екінші операнд болып ығысу саны табылады. Ығысу саны не тікелей командада, не ығысу командасы орындалу алдында CL регитріне жазылады.

Мысалы:

  MOV CL,4 .386
SHL AX,1 SHL AX,CL SHL AX,4(үлкен процессорлар үшін).

SHL -логикалық солға ығысу командасы, ол операнд мазмұнын ығысу санаушының мәнімен анықталатын биттер санына солға ығыстырады. Оң жаққа (кіші байт позициясына) нөлдер жазылады.

SHL операнд, ығысулар-санауышы

SHR -логикалық оңға ығысу командасы, ол операнд мазмұнын ығысу санаушының мәнімен анықталатын биттер санына солға ығыстырады. Сол жаққа (үлкен байт позициясына) нолдер жазылады.

SHR- операнд, ығысулар-санауышы

SAL -арифметикалық логикалық оңға ығысу командасы, ол операнд мазмұнын ығысу санаушының мәнімен анықталатын биттер санына солға ығыстырады. Сол жаққа (үлкен байт позициясына) нолдер жазылады.

SAL- операнд, ығысулар-санауышы

SAL командасы таңбаны еске сақтамайды. SAL командасы толығымен SHL командасына ұқсас.

SAR - арифметикалық логикалық оңға ығысу командасы, ол операнд мазмұнын ығысу санаушының мәнімен анықталатын биттер санына оңға ығыстырады. Сол жаққа (үлкен байт позициясына) нөлдер жазылады, егер оң сандар жылжыса нөлдер жазылады,сол сан жылжыса бір жазылады.

SAR операнд, ығысулар_санауышы

SAR - командасы таңбасын, әр кезекті битті ығыстырған сайын қалпына келтіру арқылы сақтап отырады.

ROL -цикілдің солға ығысу командасы, ол операнд мазмунын ығысу санауышының мәнімен анықталатын биттер санына солға ығыстырады.Солға ығыстырылған биттер сол операндқа оң жағынан жазылады.

ROL- операнд, ығысулар-санауышы

ROR ­­­­­ - цикілдің оңға ығысу командасы, ол операнд мазмұнын ығысу санауышының мәнімен анықталатын биттер санына оңға ығыстырады.

ROR- операнд, ығысулар-санауышы

RCL - тасымал жалауы арқылы цикілдық солға ығысу командасы ол операнд мазмұнын ығысу санауышының мәнімен анықталатын биттер санына солға ығыстырады, ығысқан биттер өз кезегі бойынша CF тасымал жалауының мәні болады.

RCL- операнд, ығысулар-санауышы

RCR - тасымал жалауы арқылы цикілдық оңға ығысу командасы ол операнд мазмунын ығысу санауышының мәнімен анықталатын биттер санына солға ығыстырады, ығысқан биттер өз кезегі бойынша CF тасымал жалауының мәні болады.

RCR - операнд, ығысулар-санауышы

Жолдарды өңдеу командалары

Микропроцессордың командалар жүйесінде 1 байттан 64К байтқа (32-разрядтық микропроцессорлар үшін -4 Гбайтқа дейін) дейінгі элементтер блогында әрекет жасауға мүмкіндік беретін өте қызықты командалар тобы бар. Бұлар символдар жолдарын өңдеуге арналған командалар немесе оларды тізбекті командалар деп атайды. Бұл блоктар логикалық тірде әртүрлі мәндер қабылдайтын элементтер тізбегін құруы мүмкін, олар жадыда екілік кодалар түрінде сақталады. Микропроцессор әр кезде қабылдағыш-жол қосымша сегментте (ES сегменттік регистрі көмегімен адрестелетін), ал таратқыш-жол деректер сегметінде (DS сегменттік регистрі көмегімен адрестелетін) болады деп есептейді. Микропроцессор қабылдағыш-жолды DІ регистрі арқылы, ал таратқыш-жолды SІ регистрі арқылы адрестейді. Қабылдағыш-жолға арналған сегментті алдын ала анықтаға болады, ал таратқыш-жолға мұны пайдалануға болмайды.

Пайдаланатын тізбекшелік командаларңа байланысты DІ және SІ регистрлерінің мазмұнының өсуін немесе кемуін автоматты түрде іске асырып отырады. Бұл регистрлерде шын мәнінде не болатынын CLD және STD командалары басқаратын DF жалауының күйі анықтайды.

Жалпы микропроцессор командалар жүйесінде тізбекшеліктер


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: