- •V.1 Язык программирования asm-51
- •2. Структурное программирование на языке Assembler
- •3. Использование сегментов в ассемблере
- •4. Программы и подпрограммы. Связь по управлению и по данным
- •5. Прерывания и их обработка.
- •Контроллер прерываний и микропроцессоры 80х86.
- •6. Сопроцессор и его программирование
- •7. Виртуальная память
- •9. Лабораторные работы
- •Лабораторная работа № 1
- •Изучение среды программирования turbo assembler
- •И отладчика программ debuGger
- •Лабораторная работа № 2. Программирование циклов и условий. Работа с массивами.
- •Лабораторная работа № 3. Программы и подпрограммы. Связь по управлению и по данным
- •Лабораторная работа № 4. Сопроцессор и его программирование
- •Лабораторная работа 5 Использование средств bios на языке Ассемблер
- •Краткие сведения о прерываниях bios
Лабораторная работа № 2. Программирование циклов и условий. Работа с массивами.
В этой работе необходимо применить команду сравнения данных (CMP), команды условных и безусловных переходов (Jmp и Jcc), команду организации циклов (Loop), использование индексных регистров SI и DI и регистра CX.
Следующий пример (в котором сохранены детали обрамления программы из лабораторной работы № 1), выполняет обработку массива, в котором все отрицательные элементы заменяются на нули, а положительные увеличиваются вдвое, одновременно вычисляется сумма новых элементов массива.
; Самая первая программа для трассировки
;
assume cs:mycode,ds:mydate,ss:mystack
mycode segment para
start: push ds
xor ax,ax
push ax
mov ax,seg mydate
mov ds,ax
xor si,si ; обнуление
mov di,si
mov sum,si
mov cx,n ; подготовка цикла
cycl: mov ax,a[2*si] ; выборка элемента массива
cmp ax,zero ; сравнение с нулём
jl ifless ; переход, если «меньше»
; а если не меньше, то:
add ax,ax ; удвоение
jmp summa ; обход ветви «меньше»
ifless: mov ax,zero
summa: mov a[2*di],ax ; запись изменённого элемента
add ax,sum ; суммирование
mov sum,ax ; и запись суммы
inc si ; увеличение индексов
inc di
loop cycl
retf
mycode ends
mydate segment para
n dw 12
a dw 4,3,8,-5,-1,-9,6,7,2,-8,1,-3
sum dw ?
zero dw 0
mydate ends
mystack segment para stack ‘stack’
dw 100 dup (?)
mystack ends
end start
Требуется ввести эту программу и покомандно выполнить её, как описано в лабораторной работе №1, после чего выполнить один из вариантов задания:
-
По данному массиву целых чисел построить массивы частных и остатков от деления на простое число (например, на 3);
-
По данному массиву целых чисел построить массивы квадратов и кубов;
-
По данным двум массивам целых чисел построить массивы сумм и разностей их элементов;
-
По данному массиву целых чисел найти их среднее арифметическое и построить массив, элементы которого равны разности исходных элементов и полученного среднего;
-
По данному массиву целых чисел найти их минимум и построить массив, элементы которого равны разности исходных элементов и полученного минимума;
-
По данному массиву целых чисел найти их максимум и построить массив, элементы которого равны разности полученного максимума и исходных элементов;
-
В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти среди них минимум и максимум;
-
В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти их среднее;
-
В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти сумму элементов, больших 5;
-
В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти число элементов, меньших их среднего арифметического;
-
В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти их произведение;
-
В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти количество нечётных цифр;
-
В данном массиве цифровых символов заменить каждый символ на соответствующее двоичное число и найти количество простых чисел.