Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основной текст лекций.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

Примеры использования операторов переходов и цикла при работе с массивами чисел

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

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

.model small

.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 ; со смещением в два байта, bx увеличивается на 2

loop beg

mov max, ax

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

int 21h ; Выход в DOS

end start

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

.model small

.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], al ; Сравнить текущий элемент массива с нулём

jg no ; он больше

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

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

loop beg

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

int 21h ; Выход в DOS

end start

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

.model small

.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,dl

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 ;на al 16-ая цифра

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

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