Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Абель.docx
Скачиваний:
13
Добавлен:
26.11.2018
Размер:
569.84 Кб
Скачать

Video_ram segment at 0b800h

Класс: Операнд класс может содержать любое правильное имя,

заключенное в одиночные кавычки. Данный операнд используется

компоновщиком для обработки сегментов, имеющих одинаковые имена и

классы. Типичными примерами являются классы 'STACK' и 'CODE'.

Следующие два сегмента объединяются компоновщиком в один физический

сегмент при одном значении сегментного регистра:

--------------------------------

Ассемблерный SEG1 SEGMENT PARA PUBLIC 'CODE'

модуль 1 ASSUME CS:SEG1

...

SEG1 ENDS

--------------------------------

Ассемблерный SEG2 SEGMENT PARA PUBLIC 'CODE'

модуль 2 ASSUME CS:SEG1

...

SEG2 ENDS

--------------------------------

Сегменты могут быть вложенными один в другой:

SEG1 SEGMENT

... Начало SEG1

SEG2 SEGMENT

... Область SEG2

SEG2 ENDS

... Конец SEG1

SEG1 ENDS

Для объединения сегментов в группы используйте директиву GROUP.

Директива STRUC

-----------------

Директива STRUC обеспечивает определение различных полей в виде

структуры. Данная директива не поддерживается в малом ассемблере ASM.

Формат директивы:

Имя-структуры STRUC

...

[определение полей данных]

...

Имя-структуры ENDS

Структура начинается собственным именем в директиве STRUC и

завершается таким же именем в директиве ENDS. Ассемблер записывает поля;

определенные в структуре, одно за другим от начала структуры. Правильными

операторами определения полей являются DB, DW, DD и DT с указанием имен

или без них.

На рис.24.2 директива STRUC определяет список параметров PARLIST для

ввода имени с клавиатуры. Следующий далее оператор выделяет память под

данную структуру:

PARAMS PARLIST <>

Данный оператор обеспечивает адресацию структуры внутри программы. Угловые

скобки (символы меньше и больше) в данном случае пусты, но в них можно

указать данные для переопределения областей внутри структуры.

В командах ассемблера может использоваться прямая адресация по имени

структуры. Для ссылки на определенное поле внутри структуры в командах

используется имя структуры (PARAMS в данном примере) и через точку имя

конкретного поля:

MOV AL,PARAMS.ACTLEN

Используя оператор выделения памяти, можно переопределить содержимое

полей внутри структуры. Правила для практического использования этой

возможности можно найти в руководстве по Ассемблеру.

__________________________________________________________________________

TITLE DSTRUC (COM) Определение структуры

0000 CODESG SEGMENT PARA 'Code'

ASSUME CS:CODESG,DS:CODESG,SS:CODESG

0100 ORG 100H

0100 EB 29 BEGIN: JMP SHORT MAIN

; ---------------------------------------------

PARLIST STRUC ;Список параметров

0000 19 MAXLEN DB 25 ;

0001 ?? ACTLEN DB ? ;

0002 19 [ 20 ] NAMEIN DB 25 DUP(' ') ;

001B PARLIST ENDS

;

0102 19 PARAMS PARLIST <> ;Область структуры

0103 ??

0104 19 [ 20 ]

011D 57 68 61 74 20 69 PROMPT DB 'What is name?', 'S'

73 20 6E 61 6D 65

3F 24

; ---------------------------------------------

012B MAIN PROC NEAR

012B B4 09 MOV AH,09 ;Выдать запрос

012D 8D 16 011D R LEA DX,PROMPT

0131 CD 21 INT 21H

0133 B4 0A MOV AH,0AH ;Получить ввод

0135 8D 16 0102 R LEA DX,PARAMS

0139 CD 21 INT 21H

013B A0 0103 R MOV AL,PARAMS.ACTLEN ;Длина ввода

; ...

013E C3 RET

013F MAIN ENDP

013F CODESG ENDS

END BEGIN

Structures and records:

N a m e Width # fields

Shift Width Masc Initial

PARLIST. . . . . . . . . . . . . 001B 0003

MAXLEN . . . . . . . . . . . . 0000

ACTLEN . . . . . . . . . . . . 0001

NAMEIN . . . . . . . . . . . . 0002

Segments and Groups:

N a m e Size Align Combine Class

CODESG . . . . . . . . . . . . . 013F PARA NONE 'CODE'

Symbols:

N a m e Type Value Attr

BEGIN. . . . . . . . . . . . . L NEAR 0100 CODESG

MAIN . . . . . . . . . . . . . N PROC 012B CODESG Length =0014

PARAMS . . . . . . . . . . . . L 001B 0102 CODESG

PROMPT . . . . . . . . . . . . L BYTE 011D CODESG

__________________________________________________________________________

Рис.24.2. Пpимеp опpеделения стpуктуpы