Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты данной рассылки Номер выпуска: | 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 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий