Stosb (STOre String Byte) — сохранить байт из регистра al в цепочке;
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

stosw (STOre String Word) — сохранить слово из регистра ax в цепочке;

stosd (STOre String Double Word) - сохранить двойное слово из регистра eax в цепочке.

Эта операция-примитив позволяет произвести действие, обратное команде lods, то есть сохранить значение из регистра-аккумулятора в элементе цепочки. Эту операцию удобно использовать вместе с операцией поиска (сканирования) scans и загрузки lods, с тем, чтобы, найдя нужный элемент, извлечь его в регистр и записать на его место новое значение.

Сложные структуры данных

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

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

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

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, 030h         ;в ax загружаем 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…

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

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

Дата: 2019-12-22, просмотров: 249.