ФГОУ ВПО СФУ
Политехнический институт
Лабораторная работа №4
Выполнил:
ст-т гр. Р54-4
Беккер А.Н.
Проверил:
преп-тель
Тронин О.Н.
Красноярск 2007
Задание: Сформировать массив из 10 двухбайтных чисел. Переписать во второй массив в порядке увеличения. Использовать обращение к тексту программы с помощью подпрограммы.
Текст программы:
model small ; директива модели памяти model с параметром small
.data ; упрощенная директива сегмента данных
array1 dw 5h,2h,7h,10h,1h,3h,4h,8h,6h,9h ; инициализация двухбайтного 10-элементного массива-источника
array2 dw 10 dup (?) ; выделение памяти под двухбайтный 10-элементный массив-приемник
max dw ? ; выделение памяти под вспомогательную переменную max
offs dw 0 ; выделение памяти под вспомогательный индекс массива offs
.stack 256h ; упрощенная директива для 256-байтного сегмента стека
……………………………………………………………………………………………………………….
call bekker ;вызов процедуры bekker
.code ; упрощенная директива сегмента кода
bekker proc ; начало процесса bekker
mov max,ax ; в max записывается новый максимальный элемент массива с индексом si
mov offs,si ; индексу offs присваивается индекс si максимального элемента массива
add si,2 ; индекс si увеличивается на 2
dec cx ; декремент cx
ret ; возврат в основную процедуру.
bekker endp ; конец процедуры bekker
………………………………………………………………………………………………………………..
main proc ; начало процедуры main
mov ax,@data ; инициализация сегментного...
mov ds,ax ; ...регистра ds
mov di,18 ; инициализация индекса массива-приемника
mov bx,10 ; инициализация глобального счетчика циклов (коим будет регистр bx)
globcycle: ; пользовательская метка globcycle
mov max,0 ; реинициализация вспомогательной переменной max
mov cx,10 ; реинициализация локального счетчика циклов
mov si,0 ; реинициализация индекса массива-источника
loccycle:
jcxz endcycle ; проверка на ноль регистра cx с переходом по true к метке endcycle
mov ax,array1[si] ; si-й элемент первичного массива записывается в ax
cmp max,ax ; сравнение вида max<=ax и переход...
jle lessequal ; ...по true к метке lessequal
add si,2 ; в противном случае увеличиваем индекс массива на 2 (так как массив типа word)
dec cx ; декрементируем cx
jmp loccycle ; безусловно возвращаемся в начало цикла
lessequal:
mov max,ax ; в max записывается новый максимальный элемент массива с индексом si
mov offs,si ; индексу offs присваивается индекс si максимального элемента массива
add si,2 ; индекс si увеличивается на 2
dec cx ; декремент cx
jmp loccycle ; безусловный переход в начало цикла
endcycle:
mov si,offs ; запись в регистр si индекса максимального элемента массива
mov array1[si],0 ; обнуление максимального элемента массива, полученного в 1-м глобальном цикле
mov ax,max ; запись максимального элемента массива max в регистр ax
mov array2[di],ax ; запись во вторичный массив по индексу di максимального элемента массива max
sub di,2 ; уменьшение индекса вторичного массива на 2
dec bx ; декремент глобального счетчика циклов bx
cmp bx,0 ; сравнение bx с нулем и по false...
jne globcycle ; ...переход к началу глобального цикла
mov ax,4c00h ; формирование функции стандартного выхода
int 21h ; формирование прерывания типа 21h и стандартный выход
main endp ; конец процедуры main
end main ; конец программы с точкой входа main
|
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.