Инициализация структуры - Assembler
Формулировка задачи:
Здравствуйте, пишу программу на ассемблере в которой пытаюсь инициализировать структуру, но TASM выдаёт ошибку Illegal override in structure. Вроде объявляю и инициализирую, как в лекциях и в учебном примере, причём пример ассемблирует, а у меня ошибку выдаёт. Не могу понять почему, в коде, конечно ещё много чего не доделано до конца (или до ума), но мне инициализация структуры не даёт покоя.
INCLUDE C:\IOASM.asm ;Данны сведения о площади территории и численности населения разных стран: ; название страны (10 символов) ; название континента (7 символов) ; площадь территории (тыс. кв. км) ; количество жителей (тыс. чел.) ;Сформировать упорядоченный по заданному признаку список N стран ;имеющих наибольшую плотность населения ;В список включить название страны, площадь и количество жителей. ;Подсчитать суммарное число жителей в отоборанных странах указанного типа ;============================================================================= .model small ;Формат исходной таблицы (ИТ) tabl1 struc country db 10 dup(' ') ;название страны continent db 7 dup(' ') ;название континента area dw ? ;площадь people dw ? ;население tabl1 ends ;Формат результирующей таблицы (РТ) tabl2 struc country2 db 10 dup (' ') ;название страны area2 dw ? ;площадь people2 dw ? ;население tabl2 ends ;------------------------------------------- ;Макрос подсчёта популяции POPULATION MACRO push cx push ax mov cx,N next: mov ax, itabl[cx].area mov dx,0 div itabl[cx].people mov populat[cx],al loop next pop ax pop cx endm .stack 256 ;------------------------------------------- .data N equ 9 ;количество элементов исходной таблицы lens equ type tabl1 ;длина записи ИТ lenr equ type tabl2 ;длина записи РТ populat db 9 dup (?) ;Определение и инициализация ИТ itabl tabl1 <'Россия','Евразия',23716,2235> tabl1 <'Индия','Азия',14555,5622> tabl1 <'Германия','Европа',548,856> tabl1 <'Китай','Азия',10438,8430> tabl1 <'США','ЮА',20048,3987> tabl1 <'Франция','Европа',458,657> tabl1 <'Египет','Африка',1230,2058> tabl1 <'Канада','СА',15745,1856> tabl1 <'КНДР','Азия',985,875> rtabl tabl2 N dup (<>) ;РТ ;------------------------------------------- .code ;------------------------------------------- ;процедура сортировки вставками sort proc ;сначала скопируем существующий массив (N элементов) pop cx lea dx,itabl.country[0] lea bx,rtabl.country2[0] copyJ: lea si,itabl.country[dx] lea di,rtabl.country2[bx] mov cx,type itabl.country ;копируем строку страна mov cx,ax ;копируем в cx значение введённое с клавиатуры rep movsw ;копируем элементы массива add dx,lens add bx,lenr loop copyJ push cx ;копируем строку площадь lea si,itabl.area lea di,rtabl.area2 mov cx,ax ;копируем в cx значение введённое с клавиатуры rep movsw ;копируем элементы массива ;копируем строку количество жителей lea si,itabl.people lea di,rtabl.people2 mov cx,ax ;копируем в cx значение введённое с клавиатуры rep movsw ;копируем элементы массива ;подготавливаем регистры для цикла сортировки mov cx,ax ;ax оставляем как постоянную N mov bx,cx ;j sub cx,1 ;(n)число итераций на 1 меньше числа элементов cont: ;начало цикла for(i = N - 1; i > 0; i--) mov al,populat[bx] ;(temp) запоминаем для сравнения whl: cmp bx,ax ;начало цикла while(j <= N && rtabl[j] < temp) jae fin ;если j<N переходим к метке fin cmp populat[bx],dx ;если нет, сравниваем rtabl[j] и temp jge fin2 ;и если rtabl[j] > temp mov rtabl[bx],rtabl[bx-1] ;иначе rtabl[j]=rtabl[j-1] dec(bx) ;j-- jmp whl fin: ;т.к. пока j<=N cmp populat[bx],dx jae fin2 mov rtabl[bx],rtabl[bx-1] dec(bx) fin2: mov rtabl[bx],rtabl[dx] mov populat[bx],dx loop cont ;------------------------------------------- main: mov ax,@data mov ds,ax mov es,ax cld ;Сброс флага DF mov cx,N ;счетчик строк ИТ mov dx,0 ;счетчик строк РТ lea si,itabl ;адрес первой строки ИТ lea di,rtabl ;адрес первой строки РТ POPULATION ;здесь код макроса подсчёта плотности населения READKEY ;здесь код макроса приглашения ввести число стран call sort ;вызов процедуры сортировки PRINTTABL1 ;здесь код макроса вывода ИТ mov ah,4ch mov al,0 int 21h end main
Решение задачи: «Инициализация структуры»
textual
Листинг программы
country db 10 dup ? ;название страны continent db 7 dup ? ;название континента
Объяснение кода листинга программы
country
- название переменной, которая содержит название страны. Тип данных - DB (строка символов). Длина строки - 10 символов. Начальное значение - пустая строка (обозначена символами?
).continent
- название переменной, которая содержит название континента. Тип данных - DB (строка символов). Длина строки - 7 символов. Начальное значение - пустая строка (обозначена символами?
).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д