русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Адресация по базе с индексированием


Дата добавления: 2014-11-27; просмотров: 1891; Нарушение авторских прав


В этом методе адресации смещение операнда в памяти вычисляется как сумма чисел, содержащихся в двух регистрах, и смещения, если оно указано. Все перечис­ленные ниже команды представляют собой разные формы записи одного и того же действия:

mov ax,[bx+si+2]

mov ax,[bx][si]+2

mov ax,[bx+2][si]

mov ax,[bx][si+2]

mov ax,2[bx][si]

В регистр АХ помещается слово из ячейки памяти со смещением, равным сум­ме чисел, содержащихся в ВХ, SI, и числа 2. Из 16-битных регистров так можно складывать только ВХ + SI, ВХ + DI, ВР + SI и ВР + DI, а из 32-битных - все восемь регистров общего назначения. Как и для прямой адресации, вместо непос­редственного указания числа разрешено использовать имя переменной, заданной одной из директив определения данных. Таким образом можно считать, напри­мер, число из двумерного массива: если задана таблица 10х10 байт, 2 - смещение ее начала от начала сегмента данных (на практике будет использоваться имя этой таблицы), ВХ = 20, а SI = 7, приведенные команды прочитают слово, состоящее из седьмого и восьмого байтов третьей строки. Если таблица состоит не из оди­ночных байтов, а из слов или двойных слов, удобнее использовать наиболее пол­ную форму - адресацию по базе с индексированием и масштабированием.

Пример программы записи в EMS –память результата сложения двух чисел.

 

.model tiny

.code

org 100h

.286

start:

mov dx,offset mess

mov ah,9

int 21h

;проверка наличия устройства emmxxxx0

mov dx,offset ems_driver

mov ax,3d00h

int 21h

jc no_emmx ;нет устройства

mov bx,ax

mov ax,4400h

int 21h

jc no_ems ;не открывается

test dx,80h

jz no_ems ;оно файл

;выделить память под буфер в ems

mov ax,4100h ;получить адрес окна

int 67h

mov bp,bx

mov ax,4300h

mov bx,1

int 67h ;выделить 1*16 кб

cmp ah,0

jnz ems_failed ;не хватает памяти



mov word ptr ems_handle,dx ;сохраним информацию

mov ax,4400h

mov bx,0

int 67h ;отобразить в страницу 0

mov ah,9

mov dx, offset ems_msg1

int 21h ;оно есть

 

mov ax,bp ;адрес окна в ax

jmp short ems_used

 

ems_failed:

no_ems:

mov ah,3eh

int 21h ;закроем файл устройство

no_emmx:

mov ah,9 ;не получилось

mov dx,offset conv_msg

int 21h

jmp exit

;используем

ems_used:

mov word ptr buffer_seg,ax ;Сохраняем сегментный адрес буфера ЕММ

mov es,ax ;Запись в ES-сегментный регистр ;сегментный адрес буфера ЕММ

mov al,50h

mov ah,12h

add al,ah ;складываем источник с приемником

mov es:0,ax

mov ax,4700h ;сохраним

int 67h

mov ax,es:0

mov dh,al

and dh,0fh ;логическое И,в DH-младшие 4 бита

shr al, 4 ;в AL-старшие

call m2 ;вывести старшую цифру

mov al,dh ; в AL-младшие 4 бита

m2: cmp al,10 ;Три команды, переводящие в AL

sbb al,69h ;в соответствующий ASCII-код

das

mov dl,al ;в DL помещаем код символа

mov ah,2 ;номер в AH

int 21h

exit: ret

ems_driver db "EMSXXXX0",0 ;название устройства

conv_msg db"не хватает EMS памяти"

ems_msg db 'EMS в памяти не обнаружен',0dh,0ah,'$'

ems_msg1 db 'EMS в памяти ЕСТЬ',0dh,0ah,'$'

ems_handle dw 0 ;индификатор ЕМS

buffer_seg dw 0 ;сегментный адрес ЕМS

mess db "Emm",0dh,0ah

db " Работа с emm",0dh,0ah,'$'

chislo db "0000"

end start

 

Задание:

Записать результат лабораторной работы №2 в EMS – память.




<== предыдущая лекция | следующая лекция ==>
Адресация по базе со сдвигом | Резидентный обработчик прерываний от клавиатуры с подключением до системного обработчика


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.338 сек.