Формирование массива из 10 двухбайтных чисел; переписать во второй массив в порядке увеличения

Страницы работы

Содержание работы

ФГОУ     ВПО     СФУ

Политехнический институт

Кафедра «Приборостроение»

Лабораторная работа №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

чало

 
 

Похожие материалы

Информация о работе