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

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


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

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

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

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

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

Номер выпуска:1412
Дата выхода:03.01.2011, 21:30
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:220 / 67
Вопросов / ответов:1 / 1

Вопрос № 181678: Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующий вопрос:Помочь с решением задачи на ассемблере ( среда, ассемблер 16 битный под DOS , tasm и tlink , использовать модель памяти small) : Иммеются 2 массива A(10) и B(10) , образовать ма...



Вопрос № 181678:

Здравствуйте, уважаемые эксперты! Прошу Вас ответить на следующий вопрос:Помочь с решением задачи на ассемблере ( среда, ассемблер 16 битный под DOS , tasm и tlink , использовать модель памяти small) : Иммеются 2 массива A(10) и B(10) , образовать массив С(5) таким образом, что Сk= Ai*Bi+1 , где i четные элементы , i = 0,2,4...8,...
Просьба написать пояснение к операторам в программе .
Вот пример одной из програмы в данной среде.

Код:
.model small
.stack 48
.data
string db 10 dup (?),'$'
chet db 5 dup (?)
nech db 5 dup (?)
ic db 0
it db 0
.code
mov ax,@data
mov ds,dx
mov es,ax
mov ss,ax lea di,string
mov cl,10
mov ah,1
c1: int 21h
and al,ofh
sosb
loop c1
mov bl,2
mov bh,3
lea si,string
lea di,chet
lea bp,nech
mov cl,10
mov dh,0
c2: xor ax,ax
lodsb
mov dl,al
div bl
cmp ah,0
je cd
xor ax,ax
mov al,dl
div bh
cmp ah,0
je nd
jmp cc
cd: xor ax,ax
mov al,dh
div bl
cmp ah,0
jne c06
mov al,dl
or al,30h
stosb
inc ic
jmp cc
c06: cmp dl,0
je n06
cmp dl,6
je n06
cmp cc
nd: xor ax,ax
mov al,dh
div bl
cmp ah,0
je cc
n06: or dl,30h
mov [bp],dl
inc bp
inc it
cc: inc dh
loop c2
mov cl,ic
lea si,chet
lea di,string
rep movsb
mov cl,it
lea si,nech
rep movsb
mov al,' $'
mov ah,'^'
sc: scasb
jz vyvod
dec di
mov [di],ah
inc di
jmp sc
vyvod: mov dl,10
mov ah,2
int 21h
lea dx,string
mov ah,9
int 21h
mov ah,4ch
int 21h
end

Отправлен: 29.12.2010, 21:04
Вопрос задал: кирюша (Посетитель)
Всего ответов: 1
Страница вопроса »


Отвечает Лысков Игорь Витальевич (Старший модератор) :
Здравствуйте, кирюша!
Вводим два массива А и В, состоящие только из цифр
Строим массив С, после чего выводим его. Не забываем, что могут быть двуразрядные числа,
поэтому выводим не просто байт, а преобразовываем в последовательность цифр, разделяя их пробелом

Код:
;Имеются 2 массива A(10) и B(10) , образовать массив С(5) таким образом, 
;что Сk= Ai*Bi+1 , где i четные элементы , i = 0,2,4...8,...

.model small
.stack 512
.data
strA db 'Array A: $'
strB db 0dh,0ah,'Array B: $'
strC db 0dh,0ah,'Array C: $'
strAny db 0dh,0ah,'Press any key$'
A db 10 dup (?)
B db 10 dup (?)
C db 5 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, 10 ;длина массива А
c1: mov ah, 8 ;функция ввода кода без отображения
c2: int 21h
cmp al, '0' ;проверка на цифру
jb c2 ;нецифру игнорируем
cmp al, '9'
ja c2
mov dl, al ;сохраним для вывода
and al, 0fh ;превратим в число
stosb ;сохраним
mov ah, 2 ;функция вывода символа из dl
int 21h
loop c1 ;по всем

lea dx, strB
mov ah, 9
int 21h ;аналогично вводим массив В

lea di, B
mov cx, 10
c3: mov ah, 8
c4: int 21h
cmp al, '0'
jb c4
cmp al, '9'
ja c4
mov dl, al
and al, 0fh
stosb
mov ah, 2
int 21h
loop c3

mov cx, 5 ;длина массива С
xor si, si ;индекс в массивах А и В
lea di, C ;адрес массива С
c5: mov al, A[si] ;А[i]< br> mul B[si] ;A[i]*B[i]
inc al ;A[i]*B[i]+1
stosb ;C[j]=A[i]*B[i]+1
inc si ;i=i+2 (следующий четный индекс!)
inc si
loop c5 ;по всем четным индексам А и В и всем С[j]

lea dx, strC
mov ah, 9
int 21h ;выводим строку ArrayC

;выведем элементы, для этого преобразуем байт-число в последовательность цифр
lea si, C ;адрес массива С
mov cx, 5 ;5 элементов
mov bl, 10 ;будем делить на 10
c6: lodsb ;очередной байт
push cx ;сохраним количество элементов
xor cx, cx ;счетчик десятичных разрадов в числе
c7: mov ah, 0 ;превратим делимое в слово
div bl ;делим на 10, в al - частное, в ah - остаток
push ax ;сохраним остаток, как очередную цифру
inc cx ;посчитаем сораненные разряды
cmp al, 0 ;есть ли еще десятичные разряды?
jne c7
c8: pop ax ;извлекаем из стека в обратном порядке
mov dl, ah ;очередной разряд
or dl, '0' ;превратим в символ-цифру
mov ah, 2
int 21h ;выведем
loop c8 ;по всем разрядам
mov dl, ' '
int 21h ;отделим пробелом
pop cx ;восстановим число элементов массива
loop c6 ;по всему массиву

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

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

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

end start

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

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

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


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

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

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

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

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

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

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


    © 2001-2011, Портал RFPRO.RU, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.25 от 13.12.2010

    В избранное