Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Boriss
Статус: Академик
Рейтинг: 2666
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2275
∙ повысить рейтинг »
vladisslav
Статус: 8-й класс
Рейтинг: 1318
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска:1415
Дата выхода:13.01.2011, 15:00
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:217 / 67
Вопросов / ответов:1 / 1

Вопрос № 181786: Здравствуйте, уважаемые эксперты! Прошу Вас помочь с задачей: В массиве А(12) (элемент - символ) найти минимальный в каждой тройке чисел, из низ выбрать максимальный. Среда, ассемблер 16 битный под DOS , tasm и tlink , использовать модель памяти smal...



Вопрос № 181786:

Здравствуйте, уважаемые эксперты! Прошу Вас помочь с задачей: В массиве А(12) (элемент - символ) найти минимальный в каждой тройке чисел, из низ выбрать максимальный. Среда, ассемблер 16 битный под DOS , tasm и tlink , использовать модель памяти small. Просьба написать к каждой строке пояснительный комментарий.

Отправлен: 08.01.2011, 14:22
Вопрос задал: Федоров Иван (Посетитель)
Всего ответов: 1
Страница вопроса »


Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, Федоров Иван !
Вот и программа.

Код:
;В массиве А(12) (элемент - символ) найти минимальный в каждой тройке чисел, 
;из низ выбрать максимальный

lenA equ 12 ;длина массива А

.model small ;модель памяти

.stack 512 ;стек 512 слов

.data ;сегмент данных
strA db 'Array A: $'
strMax db 0dh,0ah,'Max = $'
strAny db 0dh,0ah,'Press any key$'
A db lenA dup (?)

.code ;сегмент кода
start: mov ax, @data ;настроим сегменты данных
mov ds, ax
mov es, ax

lea dx, strA
mov ah, 9
int 21h ;строка приглаш ения для ввода А

;Введем масив А посимвольно, проверяя на цифру
lea di, A ;адрес массива А
mov cx, lenA ;длина массива А
c1: mov ah, 8 ;функция ввода кода без отображения
c2: int 21h
cmp al, '0' ;проверка на цифру
jb c2 ;нецифру игнорируем
cmp al, '9'
ja c2
mov dl, al ;сохраним для вывода
stosb ;сохраним
mov ah, 2 ;функция вывода символа из dl
int 21h
loop c1 ;вводим ровно 12 цифр

;Ищем максимальный из минимальных
lea si, A ;адрес массива А
mov cx, lenA/3 ;число троек 12/3=4
mov bh, 0 ;нусть минимальный=0 (самое маленькое значение)

c3: push cx ;сохраним число троек
mov cx, 3 ;число элементов в тройке
mov bl, 0ffh ;пусть минимальный=256 (самое большое значение)
;ищем минимальный в тройке
c4: lodsb ;очередное значение
cmp al, bl ;сравниваем с минимальным
jae c5 ;>= - обходим
mov bl, al ;сохраним новое
c5: loop c4 ;по всем 3 ;ищем максимальный из минимальных
cmp bl, bh ;сравним с максимальным
jbe c6 ;<= - обходим
mov bh, bl ;сохраним новое

c6: pop cx ;востановим счетчик групп
loop c3 ;по всем тройкам

lea dx, strMax ;адрес строки
mov ah, 9 ;функция вывода
int 21h ;выводим строку Max=

mov dl, bh ;найденный max
mov ah, 2 ;функция вывода символа
int 21h ;выведем

lea dx, strAny
mov ah, 9
int 21h ;press any key

mov ah, 8
int 21h ;ждем нажатия на клавишу

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

end start

-----
Люби своего ближнего, как самого себя

Ответ отправил: Лысков Игорь Витальевич (Старший модератор)
Ответ отправлен: 08.01.2011, 14:54
Номер ответа: 265288
Украина, Кировоград
Тел.: +380957525051
ICQ # 234137952
Mail.ru-агент: igorlyskov@mail.ru

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 265288 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.



    В избранное