1 / 14

Сложни типове данни

Сложни типове данни. Общ вид за деклариране на тип структура. Структура Всяко поле има отместване спрямо първия байт Размерът на структурата е сумата от размерите на полетата. име STRUCT [ изравняване:1,2 или 4 ] //Декларации на полета име ENDS. Пример за деклариране. student STRUCT 2

ghalib
Download Presentation

Сложни типове данни

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Сложни типове данни Общ вид за деклариране на тип структура • Структура • Всяко поле има отместване спрямо първия байт • Размерът на структурата е сумата от размерите на полетата имеSTRUCT[изравняване:1,2 или 4] //Декларации на полета имеENDS Пример за деклариране student STRUCT 2 name BYTE 31 DUP(?) ; отместване=0 score WORD ? ; отместване=32 year DWORD ? ; отместване=34 student ENDS

  2. Сложни типове данни Пример за дефиниране на променливи и масиви от тип структура и достъп до полета • Структура ; Дефиниране на тип структура date STRUCT day BYTE ? month BYTE ? year WORD 2006 ; стойност по подразбиране date ENDS .DATA today date <22,4> ; променлива today:22-4-2006 a date <22,4,2006> ; променлива а: 22-4-2006 array date 20 DUP({26,3,2006}) ; масив от 20 структури mov al,today.day ; достъп до поле mov bx,OFFSET today ; BX <- адрес на today mov al,(date PTR[bx]).month ; индиректен операнд памет

  3. Сложни типове данни Общ вид за деклариране на тип обединение • Обединение • Всички полета имат едно и също отместване • Размерът е равен на размера на най-дългото поле имеUNION[изравняване:1,2 или 4] //Декларации на полета имеENDS primer UNION a DWORD 00FFh ; начална стойност 00FFh b WORD ? c BYTE ? primer ENDS .DATA ex1 primer ; променлива с начална стойност 00FFh ex2 primer 52h ; променлива с начална стойност 5200h array primer 10 DUP({2}); масив от 10 обединения с начална ; стойност 2 Пример

  4. Сложни типове данни Общ вид за деклариране на тип запис • Запис • Полетата на записа са последователност от битове • Основни операции за работа със записи: имеRECORD име_на_поле : широчина[=израз][,име_на_поле...] определя броя на битовете на запис или поле от запис WIDTH {име_на_поле/име_на_запис } MASK{име_на_поле/име_на_запис } връща маска от битове за поле от запис (или за цял запис), в която всички битове са със стойност 1, а останалите – с 0

  5. Сложни типове данни • Запис ; Деклариране на тип запис ex1 RECORD a:1,b:3=2,c:4=9 ; брой битове=8 -> 00101001 ex2 RECORD a:2=2,b:1,c:3=2 ; брой битове<8 -> 00100010 ; Дефиниране на променливи –записи а ex1 <>;променлива без начални стойности ;за полетата b ex1 <1,3,8>;променлива с начални стойности за ;полетата Допълнение до 8

  6. Сложни типове данни • Запис ;Операции със записи .DATA colorRECORDblink:1,back:3,intense:1,fore:3 mes color <1,5,1,1>; начална стойност 11011001 wblink EQU WIDTH blink ; широчина за поле blink=1 wback EQU WIDTH back ; широчина за поле back=3 wintense EQU WIDTH intense ; широчина за поле intense=1 wfore EQU WIDTH fore ; широчина за поле fore=3 .CODE mov ah,mes ;AH <- 11011001 ; Нулиране на полето back and ah,NOT MASK back ; AND 1000 1111 ; AH <- 1000 1001 ; Установяване на полето blink в 1 or ah,MASK blink ; OR 1000 0000 ; AH <- 1000 0001

  7. Процедури Общ вид за дефиниране на процедура имеPROC [NEAR/FAR] ; Тяло на процедурата RET [константа]; връща управлението на адрес – върха на стека имеENDP • Общ вид за извикване • записва адрес на връщане в стека • 2) предава управлението callиме

  8. Предаване на параметри Пример Определяне сумата на масив от числа с процедура • Чрез регистри ; Входни параметри: начален адрес на масива (ВХ)1/2 ; брой на елементи (СХ) ; Изходен параметър: сума (АХ) .DATA array BYTE 50 DUP(?) ; Масив от 50 байта sum WORD ? ; Променлива за резултата .CODE sumarPROC ;заглавен ред на процедура xor ax,ax ; нулиране на регистър за сума clc ; нулиране на флаг за пренос l1: add al,BYTE PTR[bx] ; прибавяне на пореден елемент adc ah,0 ; прибавяне на пренос inc bx ; указател към следващ байт loop l1 ; цикъл с брояч СХ ret ; връщане от процедура sumarENDP ; край на процедура

  9. Предаване на параметри Пример Определяне сумата на масив от числа • Чрез регистри ; Входни параметри: начален адрес на масива (ВХ) 2/2 ; брой на елементи (СХ) ; Изходен параметър: сума (АХ) .STARTUP mov bx,OFFSET array ; ВХ <- начален адрес mov cx,LENGTHOF array ; СХ <- брой числа call sumar ; извикване на процедура mov sum,ax ; резултат sum=АХ . . .

  10. Предаване на параметри Пример Определяне сумата на 3 двубайтови числа Входни параметри: 3 двубайтови числа Изходен параметър: сума (АХ) .DATA arg2 WORD 20 arg1 WORD 30 .CODE sumPROC NEAR push bp ; съхраняване на стара стойност на BP mov bp,sp ; ВР сочи към върха на стека mov ax,[bp+4] ; AX <- първи параметър add ax,[bp+6] ; събиране с втори параметър add ax,[bp+8] ; събиране с трети параметър pop bp ; възстановяване на ВР ret sumENDP ; Записване на параметрите в стека преди извикване mov ax,10 ; AX <- 10 push ax ; параметър3 се записва в стека push arg2 ; параметър2 се записва в стека push arg1 ; параметър1 се записва в стека call sum add sp,6 ; унищожаване на параметри • Чрез стека

  11. Предаване на параметри • Чрез стека

  12. Предаване на параметри • Чрез стека

  13. Предаване на параметри • Деклариране на параметри с директива Атрибутите могат да бъдат: а) FAR/NEAR; b) смесено програмиране (С) имеPROC [атрибути] [USES с-к регистри,параметър:тип[,..]]

  14. Предаване на параметри .DATA a1 WORD ? a2 WORD ? a3 WORD ? .CODE sumPROC NEAR,C arg1:WORD,arg2:WORD,arg3:WORD mov ax,arg1 ; използват се имената на параметрите add ax,arg2 ; а не отместването им add ax,arg3 ret ; автоматично извлича регистри sumENDP ; от стека и го освобождава ; Записване на параметрите в стека ; В езика С първи параметър се записва първи push a1 push a2 push a3 call sum • Деклариране на параметри с директива Процедура с параметри – стойностите на 3 числа Може да се извика от програма на С като функция, връщаща цяла стойност

More Related