Вопрос № 179157: Здравствуйте уважаемые эксперты! Помогите пожалуйста решить задачу на ассемблере: Дана последовательность байтов (положительные числа). Просуммировать их в цикле. Вывести 16-ричное представление суммы. Для организации вывода применить операции...
Вопрос № 179157:
Здравствуйте уважаемые эксперты! Помогите пожалуйста решить задачу на ассемблере:
Дана последовательность байтов (положительные числа). Просуммировать их в цикле. Вывести 16-ричное представление суммы. Для организации вывода применить операции сдвига битов. Примечание: сумма может не помещаться в один байт.
В ассемблере я не очень, так что прошу с подробными комментариями. Программа Tasm 5.0. Заранее спасибо!
; сегмента данных d_s
segment n=10 ; количество элементов массива A db 1,2,3,4,5,6,7,8,9,10 ; определить массив HexStr db '0123456789ABCDEF' ; для перевода в 16 СС d_s ends
main PROC ; точка входа .286 ; разрешить команды 80286 mov ax,d_s ; копируем адрес mov ds,ax ; сегмента данных
mov cx,n ; определим количество итераций xor si,si
; индекс первого элемента xor dx,dx ; dx=0 тут получим сумму массива next: add dl,A[si] ; dl=элемент массив А adc dh,0 ; учтем возможный перенос inc si ; перейти к следующему элементу loop next ; продолжить цикл
; выведем значение на экран rol dx,4 ; переместим старшие 4 разряда в младшие mov cx,4 ; количество итераций цикла, так как в 16 разрядном регистре 4 тетрады next_ch: mov bx,dx ; bx=dx and bx,0fh ; выделим слажшую тетраду mov al,HexStr[bx] ;
получить из строки соответствующий цифре символ для вывода int 29h ; вывести al на экран rol dx,4 ; перейти к следующей тетраде loop next_ch ; продолжить цикл
mov ax,0c07h ; ожидаем нажатие клавиши int 21h ; вызов DOS
mov ax,4C00h ; выход из программы int 21h ; вызов DOS main ENDP c_s ends END main ; определить точку входа в программу
Ответ отправил: Airyashov, Студент
Ответ отправлен: 20.06.2010, 16:34
Номер ответа: 262192
Оценка ответа: 5 Комментарий к оценке: Спасибо!
Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"?
Отправить SMS#thank 262192
на номер 1151 (Россия) |
Еще номера »
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.