48264 (597389), страница 6

Файл №597389 48264 (Программная модель процессоров семейства X86) 6 страница48264 (597389) страница 62016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 6)

Одномерные массивы

Все элементы массива располагаются в памяти последовательно

Описание элементов массива

mas db 1,2,3,4,5

mas dw 5 dup (0)

Доступ к элементам массива

mov ax,mas[si] ; в si номер элемента в массиве

mov mas[si], ax ; в di номер элемента в массиве

Используя команды i486 можно использовать адресацию с масштабированием, при размере элементов больше байта

Mov ax, mas[si*2] ;

Пример программы Найти в строке хотя бы один нулевой элемент

model small

.stack 100h

.data

bufer dw 25 ;формирую размер буфера для ввода строки

mas dw 25 dup (' ') ;формирую буфер

adr dw bufer ;описываю адрес

subj1 db ‘в строке найден нулевой элемент', '$'

subj2 db ‘в строке не найден нулевой элемент', '$'

.code

main:

mov ax,@data

mov ds,ax

mov ah,0ah

mov dx, adr

int 21h ; ввод строки с клавиатуры

;поиск нулевого элемента

xor si, si

mov cx, mas[si] ;загружаем в сх количество элементов в строке

mov ax, 030hax загружаем ASCII код нуля

m1: inc si либо inc si

inc si cmp ax, mas[si*2]

cmp ax, mas[si]

je m2 ;если в строке найдем нулевой элемент, то выходим из цикла на вывод subj1

loop m1

;нормальный выход из цикла означает что в строке нет нулевых элементов

mov ah,09h

lea dx, subj2

int 21h

jmp exit

m2: mov ah, 09h

lea dx,subj1

int 21h

exit: mov ax,4c00h

int 21h

end main

Двумерные массивов

!Специальных средств для описания двумерных массивов в ассемблере нет!

Двумерный массив описывается также как и одномерный массив, отличие заключается в трактовке расположения элементов. Пусть последовательность элементов трактуется как двумерный массив, расположенный по строкам, тогда адрес элемента [i,j] вычисляется так

База+колич_элем_строке*размер_элем*I+j

Для определения базы используют имя массива, для второго слагаемого регистр bx , для третьего si, это базово-индексная адресация.

Описание массива:

Mas1 db 10 dup (3 dup (?))

Mas2 db 1,2,3,4,5

3,4,5,6,7

4,7,9,2,0

Пример поиска максимального элемента в каждой строке однобайтного массива mas, размером 5*10, с занесением максимальных элементов в массив max (1*5). Инициализацию массива mas рассматривать не будем.

xor di, di ;обнуляем индексы массива max

xor bx, bx ;обнуляем индексы строк массива mas

xor si, si ;обнуляем индексы столбцов массива mas

mov cx,5 ;в cx количество строк, внешний цикл

m1: push cx

mov cx, 10 ;в сх количество столбцов, внутренний цикл

mov al, mas[si+bx];первый элемент из 1 строки mas в аl

m2: inc si

cmp al, mas[si+bx] ;сравниваем со следующим элем. строки

jb m3 ;если меньше на m3

mov al, mas[si+bx] ;иначе в аl заносим больший элемент

m3: loop m2 ;после выхода из цикла в ах максимальный элемент в данной строке

mov max[di],al ;кладем максимальный элемент в массив max

inc di

xor si,si ;обнуляем номер столбца

add bx, 10 ;переходим на следующую строку

pop cx ;достаем сх

loop m1

Структура – это тип данных, состоящий из фиксированного числа элементов разного типа.

Для использования структур в программе необходимо выполнить три действия:

    1. Задать шаблон структуры. По смыслу это означает определение нового типа данных (схемы или шаблона), который впоследствии можно использовать для определения переменных этого типа. Память при этом не выделяется, это информация для транслятора о расположении полей и их значению по умолчанию.

Синтаксис описания шаблона структуры:

имя_структуры STRUC

; последовательность директив описания данных dd,dw,db…

  1. имя_структуры ENDS

    1. Определить экземпляр структуры. Этот этап подразумевает инициализацию конкретной переменной заранее определенной (с помощью шаблона) структурой. В данном случае транслятору дается указание выделить память и присвоить этой области символическое имя.

  1. Описать структуру в программе можно только один раз, а определить – любое количество раз.

Определение данных с типом структуры имеет следующий вид:

  1. [имя переменной] имя_структуры

    1. Организовать обращение к элементам структуры.

  1. Для того чтобы сослаться в команде на поле некоторой структуры, используется следующее выражение:

  2. имя_переменной.имя_поля_структуры,

  3. Фрагмент программы. Найти из списка студентов отличника по всем предметам.

  4. Model small

  5. .586p

  6. Stud struc

  7. Name db 20 dup (‘’)

  8. Phisika db ?

  9. Matem db ?

  10. Stud ends

  11. .data

Bufer Stud ;зарезервировали пустую структуру

S1 Stud

S2 Stud

S3 Stud <”Сидоров”,’5’,’2’,’5’>

mov bx, offset s1

mov al, [bx].Phisika

  1. cmp al, ‘5’

  2. jne m2

mov al, [bx].Matem

  1. cmp al, ‘5’

  2. jne m2

  3. ;нашли одного из отличников, надо вывести его фамилию

  4. m2: mov al, s2.Phisika ;ищем следующего отличника

  5. mov ah, s2.Matem

  6. cmp ax, ‘55’

  7. jne m3

  8. ;нашли одного из отличников, надо вывести его фамилию

  9. m3: ;ищем следующего отличника

Объединение - тип данных, позволяющий трактовать одну и ту же область памяти как имеющую разные типы и имена.

Описание объединений в программе напоминает описание структур, то есть сначала описывается шаблон, в котором с помощью директив описания данных перечисляются имена и типы полей:

имя_объединения UNION

имя_объединения ENDS

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

  1. Model small

  2. .586p

  3. st union

  4. stu1 dw ?

  5. stu2 db ?

  6. stu3 dd ?

  7. st ends

  8. .data

  9. q st <> ;пустое объединение

  10. z st <12ffh> ;заполнили объединение значением

  11. mov q.stu2, al ;в переменную положили содержимое регистра al

  12. mov q.stu3, edx

  13. mov bx, z.stu1

  14. mov dx, offset q.stu1

  1. Запись - структурный тип данных, состоящий из фиксированного числа элементов длиной от одного до нескольких бит. При описании записи для каждого элемента указывается его длина в битах и, что необязательно, некоторое значение. Суммарный размер записи определяется суммой размеров ее полей и не может быть более 8, 16 или 32 бит. Если суммарный размер записи меньше указанных значений, то все поля записи “прижимаются” к младшим разрядам

  2. Использование записей в программе, так же, как и структур, организуется в три этапа:

  1. Описание шаблона записи

  1. имя_записи RECORD

2. Для использования шаблона записи в программе необходимо определить переменную с типом данной записи, для чего применяется следующая синтаксическая конструкция (рис. 7):

  1. 3. Организация работы с записями. Обычные механизмы адресации бессильны, поскольку они работают на уровне байтов, а не отдельных битов.

      • каждому имени элемента записи ассемблер присваивает числовое значение, равное количеству сдвигов вправо, которое нужно произвести, для того чтобы этот элемент оказался прижатым к началу ячейки памяти;

      • размер элемента записи в битах можно узнать с помощью оператора width;

      • оператор mask позволяет локализовать биты нужного элемента записи;

      • все действия по преобразованию элементов записи производятся с помощью логических команд;

      • команда setfield устанавливает значение некоторого поля записи

setfield имя_элемента_записи регистр_ назначение, регистр_источник

      • команда getfield осуществляет выборку некоторого поля записи

getfield имя_элемента_записи регистр_назначение, регистр_ источник

Процедуры. Макрокоманды

  1. Процедура, часто называемая подпрограммой, - это правильным образом оформленная совокупность команд, которая будучи однократно описана, при необходимости может быть вызвана в любом месте программы. Процедура представляет собой группу команд для решения конкретной подзадачи и обладает средствами получения управления из точки вызова задачи более высокого уровня и возврата управления в эту точку. В простейшем случае программа может состоять из одной процедуры.

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

      • в начале программы, до первой исполняемой команды;

      • в конце, после команды возвращающей управление операционной системе;

      • промежуточный вариант, тело процедуры располагается внутри другой процедуры или основной программы. В этом случае необходимо предусмотреть обход процедуры командой jmp;

      • в другом модуле.

  1. Синтаксис описания процедуры:

  2. Имя_процедуры PROC заголовок

  3. Команды, директивы тело процедуры

  4. [ret] возврат из процедуры

  5. [имя_процедуры] ENDP конец процедуры

  6. Вызов процедуры осуществляется командой

  7. CALL [модификатор] имя_процедуры

  8. Команда call передает управление по адресу с символическим адресом имя_процедуры, с сохранением в стеке адреса возврата, команды следующей после команды call.

  9. Возврат из процедуры осуществляется по команде

  10. RET [число]

  11. Команда ret считывает адрес возврата из стека и загружает его в регистры cs и ip/eip, возвращая таким образом управление команде, следующей за командой call. Число – необязательный параметр, обозначающий количество элементов, удаляемых из стека при возврате из процедуры. Размер элемента зависит от используемой модели сегментации 32 или 16 разрядной.

  12. Передача аргументов из/в процедуру может осуществляться через регистры, переменные или стек.

  1. Пример.

    1. Model small

    2. .stack 100h

    3. .data

    4. w db 25 dup (?)

    5. .code

    6. vvod proc

    7. mov ah, 0ah

    8. lea dx, w

    9. int 21h

    10. ret

    11. vvod endp

    12. main:

    1. Call schet

    2. Call vvod

    3. exit:

    4. mov ax,4c00h

    5. int 21h

    6. schet proc

    7. ..

    8. ret

    9. schet endp

    10. end main

  2. Макрокоманда является одним из многих механизмов замены текста программы. С помощью макрокоманды в текст программы можно вставлять последовательности строк и привязывать их к месту вставки.

  3. Макрокоманда представляет собой строку, содержащую некоторое имя – имя макрокоманды, предназначенное для того, чтобы быть замещенным одной или несколькими другими строками при трансляции.

Для работы с макрокомандой вначале необходимо задать ее шаблон-описание, так называемое макроопределение.

Имя_макрокоманды MACRO [список_формальных_аргументов]

Характеристики

Тип файла
Документ
Размер
2,76 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6543
Авторов
на СтудИзбе
300
Средний доход
с одного платного файла
Обучение Подробнее