Пример написания программы работы с массивами слов

· Дан массив из десяти слов, содержащих целые числа. Требуется найти максимальное значение в массиве.

Текст программы:

.data

· max dw ?

· mass dw 10,24,76,479,-347,281,-24,70,124,97

· .stack 100h

· .code

start: mov ax, @data

mov ds, ax ; Загрузить сегментный адрес данных

lea bx, mass ; Загрузить адрес смещения массива

mov cx, 10 ; Установить счетчик повторений цикла

mov ax, [bx] ; Первый элемент массива в Аккумулятор

beg: cmp [bx], ax ; Сравнить текущий элемент массива с максимальным

jl no ; он меньше

mov ax, [bx] ; он больше или равен

no: inc bx ; Следующий элемент

inc bx ; массива

loop beg

mov max, ax

quit: mov ax,4C00h ; Код завершения 0

int 21h ; Выход в DOS

end start

Заменить все отрицательные числа нулями. Массив байт.

.data

· mass db 1,2,7,-4,-34,28,-24,7,12,9

· .stack 100h

· .code

start: mov ax, @data

mov ds, ax ; Загрузить сегментный адрес данных

lea bx, mass ; Загрузить адрес смещения массива

mov cx, 10 ; Установить счетчик повторений цикла

mov al, 0

beg: cmp [bx], ax ; Сравнить текущий элемент массива с нулём

jg no ; он больше

mov [bx], al ; обнуление элемента массива

no: inc bx ; Следующий элемент массива

loop beg

quit: mov ax,4C00h ; Код завершения 0

int 21h ; Выход в DOS

end start

Найти сумму абсолютных величин. Массив байт.

.data

sum db ?

· mass db 1,2,7,-4,-3, 8,-2,7,12,9

· .stack 100h

· .code

start: mov ax, @data

mov ds, ax ; Загрузить сегментный адрес данных

lea bx, mass ; Загрузить адрес смещения массива

mov cx, 10 ; Установить счетчик повторений цикла

beg: mov dl, [bx]

cmp dl, 0 ; Сравнить текущий элемент массива с нулём

jg no ; он больше

neg dl ; изменение знака элемента массива

no: add sum,dx

inc bx ; Следующий элемент массива

loop beg

quit: mov ax,4C00h ; Код завершения 0

int 21h ; Выход в DOS

end start

xlat

На bx -адрес таблицы пересчёта, на al возвращается код числа

; таблица пересчёта символьного кода в 16-ный

tab1 db 48 dup(0),0,1,2,3,4,5,6,7,8,9, 7 dup(0),0ah

db 0bh,0ch,0dh,0eh,0fh, 26 dup(0)

db 0ah,0bh,0ch,0dh,0eh,0fh, 153 dup(0)

;таблица пересчёта из 16-ой цифры в ASCII код

tab2 db “0123456789ABCDEF”

Пример перевода введённого символа в 16-ый код:

mov ah,01h ; ввод с клавиатуры новой цифры

int 21h

mov a,al

lea bx,tab1 ; адрес таблицы пересчётов

xlat

mov b,al ;на al16-ая цифра

Пример вывода на экран монитора двухзначного числа:

lea bx,tab2 ; адрес таблицы пересчётов

mov b,al ;на alдве цифры

shr al,4 ; на alстаршая цифра

xlat

mov dl,al

mov ah,02h ; вывод на монитор старшей цифры

int 21h

 

mov al,b

and al,00001111b ;

xlat

mov dl,al

mov ah,02h ; вывод на монитор младшей цифры

int 21h

Варианты заданий

Дан массив из десяти знаковых чисел (слов или байт). Требуется:

1. Найти количество отрицательных чисел. Массив байт.

2. Найти сумму всех положительных и отрицательных чисел. Массив слов.

3. Найти сумму абсолютных величин массив байт.

4. Найти количество положительных чисел. Массив байт.

5. Поменять местами пары соседних чисел. Массив слов.

6. Переставить числа в обратном порядке. Массив байт.

7. Найти среднее арифметическое чисел. Массив слов.

8. Найти количество чисел больших 10h. Массив слов.

9. Найти наименьшее по абсолютной величине числа. Массив байт.

10. Найти наибольшее отрицательное число. Массив байт.

11. Найти сумму положительных элементов последовательности. Массив слов.

12. Найти среднее арифметическое квадратов ненулевых элементов последовательности. Массив слов.

13. Найти полусумму наибольшего и наименьшего чисел. Массив байт.

14. Найти среднее арифметическое отрицательных элементов последовательности. Массив слов.

15. Найти сколько в массиве чисел больше 12h и меньше 0Afh. Массив байт.

16. Найти есть ли в массиве два нуля, идущих подряд. Массив слов.

17. Найти сумму абсолютных величин, меньших 6. Массив байт.

18. Найти среднее арифметическое чисел больших 10. Массив слов.

19. Найти сколько чисел равно 12h. Массив байт.

20. Заменить все отрицательные числа их модулями. Массив байт.

21. Найти среднее арифметическое положительных чисел. Массив слов.

22. Найти количество чисел меньших 10h. Массив байт.

23. Найти наименьшее среди положительных чисел. Массив слов.

24. Найти наибольшее отрицательное число. Массив байт.