0 / 0 / 0
Регистрация: 21.12.2013
Сообщений: 3
|
|||||||||||
1 | |||||||||||
Ассемблерная вставка: копирование содержимого массива типа char в n-раз больший массив11.05.2014, 11:13. Показов 1299. Ответов 6
Метки нет Все метки)
(
Собственно задание: Написать программу, осуществляющую копирование содержимого массива типа char в n-раз больший массив, при этом каждый элемент массива должен повторяться n-раз, т. е., например, из массива 'a', 'b', 'c', при n=3, должен быть сформирован массив 'a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c' Ввод-вывод массивов осуществлять в виде строк. Основную часть программы заменить ассемблерной вставкой.
Вот код на паскале: Кликните здесь для просмотра всего текста
Собственно вопрос как в ассемблерной вставке обратиться к элементам массива?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
|
|
11.05.2014, 11:13 | |
Ответы с готовыми решениями:
6
Из массива A скопировать в массив B элементы, величины которых лежат в диапазоне [-3;4] (C + ассемблерная вставка) Копирование в текстовый файл из потока fstream массива типа char
Преобразование массива типа char в массив типа float |
0 / 0 / 0
Регистрация: 21.12.2013
Сообщений: 3
|
||||||
04.01.2017, 14:57 [ТС] | 2 | |||||
0
|
Модератор
![]() ![]() |
|||||||||||
05.01.2017, 12:06 | 3 | ||||||||||
Сильно сомневаюсь, что встроенный ассемблер 16-битного Turbo Pascal знает про расширенные регистры (edx, ecx, ebx).
Кроме того, не проще ли использовать строчные операции?
или
Кстати, последний mov ds,dx -- не нужен, поскольку ds в этом фрагменте не меняется. Нужен был бы внутри процедуры, пришлось бы указатель на источник грузить как lds si,ms, на приёмник как les di,md.
1
|
3405 / 1824 / 489
Регистрация: 28.02.2015
Сообщений: 3,699
|
||||||
06.01.2017, 18:39 | 4 | |||||
bormant,
правельнее было бы так:
0
|
Модератор
![]() ![]() |
||||||
06.01.2017, 21:36 | 5 | |||||
Constantin Cat,
не совсем. Про переменную величину N проглядел, виноват. В остальном замечания следующие: 1) сохранять ES не требуется 2) пересылка через стек медленнее, чем через регистр, 3) строки в 255 символов, незачем умножать на 16-битное d, 4) d: Byte было б в самый раз, сл-но mov cl,d; mul cl -- свободны dx, bx, в них можно хранить множитель. Итого в сухом остатке:
0
|
3405 / 1824 / 489
Регистрация: 28.02.2015
Сообщений: 3,699
|
|
06.01.2017, 23:33 | 6 |
В именно этом коде нет, а вообще - да;
в учебных программах - это не имеет значения. Да, но в вопросе было: Строка это только частный случай массива символов. Правильнее было бы получить длину строки(снова этот частный случай), выделить n-памать, скопировать и посимвольно вывести.
0
|
Модератор
![]() ![]() |
|
07.01.2017, 04:56 | 7 |
Constantin Cat,
Про учебные задачи - отклоняется. В учебных задачах имеет значение не приобретать дурных привычек. В ассемблер пошли зачем, сэкономить такты? Вот и экономьте такты. Про массив типа Char - отклоняется - 1) сохраняете однобайтную длину, 2) string часть условия. Добавлено через 11 минут Получение длины строки есть (xor ax,ax; lodsb), память под приемник выделена, ограниченв 255 байтами. Нормальные условия вполне. Проверку на выход за его пределы вы дописали.
0
|
07.01.2017, 04:56 | |
Помогаю со студенческими работами здесь
7
ассемблерная вставка, динамический массив Ассемблерная вставка и динамический массив
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |