Хостинг портала RFpro.ru: Московский хостер Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64 РАССЫЛКИ ПОРТАЛА RFPRO.RU Лучшие эксперты данной рассылки Номер выпуска: | 1453 | Дата выхода: | 29.05.2011, 02:30 | Администратор рассылки: | Лысков Игорь Витальевич (Старший модератор) | Подписчиков / экспертов: | 216 / 64 | Вопросов / ответов: | 1 / 1 | Вопрос № 183305: Здравствуйте, уважаемые эксперты! Прошу помощи в следующем вопросе: Необходимо разработать программу обработки символьной информации, реализующую функции: - инициализация ( вывод титульной таблички ); - передача строки символо... Вопрос № 183305: Здравствуйте, уважаемые эксперты! Прошу помощи в следующем вопросе: Необходимо разработать программу обработки символьной информации, реализующую функции: - инициализация ( вывод титульной таблички ); - передача строки символов, длиной не более Nmax, из задан- ной области памяти в буферную область; - выполнение заданного в задании 1 преобразования введенной строки, вывода результирующей строки символов на экран и передача в приемную область памяти. Также разработать на языке Pascal тестирующую программу для проверки функционирования ассемблерной программы. Ассемблерную программу включить в программу нa Pascal по принципу встраивания (in-line).
Задание 1. Преобразование введенных во входной строке десятичных цифр в шестнадцатиричную систему счисления и вывод на экран. Предпочтителен MASM 6.11, заранее огромное спасибо. Отправлен: 24.05.2011, 01:55 Вопрос задал: Митиоглов Борис (Посетитель) Всего ответов: 1 Страница вопроса » Отвечает Зенченко Константин Николаевич (Модератор) : Здравствуйте, Митиоглов Борис !
Программа на паскале(ТР7):
Код : program q183305; const nMax=10; type tA=array[1..nMax]of integer; procedure convert(z:tA;var y:string;x:integer);external; {$L q183305} var a:tA; b:string; c:integer; begin{main} c:=nMax; while c>0 do{цикл ввода массива} begin write('Enter A[',c:2,']:='); readln(a[c]); dec(c); end; convert(a,b,nMax);{конвертируем массив в строку} writeln('Result:',b);{выводим результат} readln; end.{main}
Подпрограмма на ассемблере(TASM):
Код : model small code public convert proc convert ;организуем стековый кадр push bp mov bp,sp ;загружаем переменные подпрограммы mov cx,[bp+04];{nMax} mov di,[bp+06];{offset string} mov es,[bp+08];{segment string} mov si,[bp+10];{offset matrix} mov ds,[bp+12];{segment matrix} ; mov bx,di;запоминаем адрес длины строки inc di;переходим на поле строки @00: lodsw;очередное число push bx;сохраняем счетчик в стеке mov bx,4;длина слова @01: push ax;сохраняем число and ax,0Fh;младшая тетрада cmp al,9;больше 9 - 16-я цифра jbe @@02;нет переход add al,7;корректируем 16-ю цифру @02: add al,'0';переводим число в символ mov es:[bx+di],al;записываем в строку pop ax;востанавливаем число shr ax,1;сдвигаем проверенную тетраду shr ax,1 shr ax,1 shr ax,1 dec bx;уменьшаем счетчик jnz @@01;не ноль переходим mov al,' ';символ разделитель mov es:[di],al;записываем в строку mov ax,5;константа коррекции add di,ax;в регистрах pop bx;востанавливаем указатель на длину строки add es:[bx],al;корректируем длину строки loop @@00;пока СХ больше нуля преходим ; ;убираем стековый кадр mov sp,bp pop bp ;освобождаем память под переменными подпрограммы ret 10 endp end
Подпрограмма convert подключается в основную программу во время компиляции. Слишком большое nMax делать не нужно, т.к. длина строки в паскале 256 символов, а под 16-ое число отводится 4-е символа и один символ разделитель, всего получается 50 с копейкой. вопросы задавайте в мини-форум. Удачи! ----- Итерация от человека. Рекурсия — от Бога. — Л. Питер Дойч Ответ отправил: Зенченко Константин Николаевич (Модератор) Ответ отправлен: 26.05.2011, 13:31 Номер ответа: 267395 Украина, Киев Тел.: +38-097-238-60-03 Адрес: Украина, Киев
Оценка ответа: 5 Вам помог ответ? Пожалуйста, поблагодарите эксперта за это! Как сказать этому эксперту "спасибо"? | Отправить SMS #thank 267395 на номер 1151 (Россия) | Еще номера » | Оценить выпуск » Нам очень важно Ваше мнение об этом выпуске рассылки! Скажите "спасибо" эксперту, который помог Вам! Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА на короткий номер 1151 (Россия) Номер ответа и конкретный текст СМС указан внизу каждого ответа. Полный список номеров » * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов) ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются. *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании. |
Комментариев нет:
Отправить комментарий