Консультация № 183642
16.06.2011, 12:26
53.60 руб.
0 1 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Задан массив из 6 чисел. Найти все числа которые заканчиваются на цифру 7 и поместить их в отдельный массив. Исходные числа положительные и заданы в байтовом формате, массив задаётся одним адресом. Прошу как можно подробнее расписать комментарии к программе. Заранее благодарен.

Обсуждение

давно
Посетитель
7438
7205
16.06.2011, 14:55
общий
это ответ
Здравствуйте, Посетитель - 377712!
Числа ищем делением на 10 и проверкой остатка, равно ли 7-ми.
Программа записывает все такие числа в отдельный массив и считает их количество.
Массив задан в программе. Результат смотрим в отладчике.

[code h=207];Задан массив из 6 чисел.
;Найти все числа которые заканчиваются на цифру 7 и поместить их в отдельный массив.
;Исходные числа положительные и заданы в байтовом формате, массив задаётся одним адресом.

.model small

.stack 100h

.data
array db 66, 17, 23, 207, 7, 55 ;массив чисел
N equ $-array ;длина массива (=6)
array7 db N dup (?) ;сюда запишем найденные числа

.code

main proc
mov ax, @DATA ;настроим сегментные регистры
mov ds, ax ;на сегмент данных
mov es, ax

lea si, array ;исходный массив
lea di, array7 ;сюда будем писать числа, которые заканчиваются на 7
mov cx, N ;количество исходных чисел
mov bl, 10 ;будем делить на 10 и смотреть остаток
xor dx, dx ;счетчик чисел, которые заканчиваются на 7
mainLoop: ;по всем
lodsb ;очередное число, si=si+1
mov ah, 0 ;сделаем из байта слово
div bl ;делим на 7, al - частное, ah - остаток
cmp ah, 7 ;остаток = 7 - число заканчивается на 7
jne next ;не равен - игнорируем
mov al, [si-1] ;равен - прочитаем его еще раз
stosb ;сохраним
inc dx ;посчитаем
next:
loop mainLoop ;по всем
mov ax, dx ;ax = чисел, которые заканчиваются на 7

mov ax,4c00h ;выход в ДОС
int 21h
main endp


end main
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа