3 / 3 / 0
Регистрация: 04.04.2012
Сообщений: 26
|
|
1 | |
Упростить план реализации программы на TASM ассемблере20.04.2012, 17:20. Показов 1508. Ответов 19
Метки нет (Все метки)
Задание. Зашифровать строку по таблице. Таблица считается известной.
В моем понимании я должен: 1) в сегменте данных задать строку A B C D E .... и так весь англ алфавит 2) задать строку Z X V C D A .... буквы англ алфавита стоящие в порядке не соответствующем порядку англ алфавиту. 3) реализовать ввод с клавиатуры произвольного массива D C R T.... 4) подпрограмма будет искать в 1 массиве позицию буквы из введенного массива( пример D ищем ее позицию в первом массиве это номер 4) 5) нужно из второго массива извлечь букву с позиции (по моему примеру из позиции 4 т.е буква С) 6) сохранить эту букву в новом массиве на позиции 1 так как в веденном массиве D стоит на первой позиции или наверное лучше перезаписать ее на место D в веденном массиве 7) и так с каждой введенной буквой Пожалуйста напишите как можно упростить мой план действий который я буду реализовывать на Tasm ассемблере.( опыт программирования очень маленький)
0
|
20.04.2012, 17:20 | |
Ответы с готовыми решениями:
19
Вычислить выражение y=c/4-62d/a2+1 на ассемблере tasm Ребят. Хочу научиться программировать на ассемблере и составил план Шифр файла на ассемблере (TASM). Интересный алгоритм) Установить план производства изделий А и В, обеспечивающий максимальный доход от реализации |
Клюг
7675 / 3190 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
|
||||||
20.04.2012, 19:37 | 3 | |||||
Искандар, не-а. В общем случае рисуем массив на 256 кодов и по нему делаем xlatb... без в/в всего-то
0
|
3 / 3 / 0
Регистрация: 04.04.2012
Сообщений: 26
|
|
20.04.2012, 20:15 [ТС] | 4 |
Пожалуйста объясните на пальцах что да как я очень плохо разбираюсь в ассемблере не разу с цепочками только с числами.
; ds:si -> inp buf это строка источник в ней будет ? ; es:di -> out buf строка приемник в ней будет ? ; es:bx -> table это походу строка(таблица) для xlatb в ней будет сделай очень прошу развернутые коменты к строкам кода.
0
|
Клюг
7675 / 3190 / 382
Регистрация: 03.05.2011
Сообщений: 8,380
|
|
20.04.2012, 20:35 | 5 |
; ds:si -> inp buf это строка, вводимая с клавиатуры, п. 3)
; es:di -> out buf закодированная строка, п. 6) ; es:bx -> table это таблица перекодировки, пп. 4), 5) ; cx - длина строки
0
|
3 / 3 / 0
Регистрация: 04.04.2012
Сообщений: 26
|
|
20.04.2012, 20:41 [ТС] | 6 |
0
|
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
|
|
21.04.2012, 06:23 | 8 |
Объясните, пожалуйста, какие регистры надо заполнять для команды xlat. Давненько писал программу с этой коммандой. А сейчас совершенно не помню, как она работает.
0
|
Ушел с форума
16339 / 7658 / 1076
Регистрация: 11.11.2010
Сообщений: 13,704
|
||||||||||||||||||||||||||
21.04.2012, 07:55 | 9 | |||||||||||||||||||||||||
programmisto, у тебя Google отключен?
XLAT =Table looK-up tranSLATion - Табличное преобразование выполнение команды флаги не изменяет
IF AddresSize = 16 THEN AL = DS:[BX + ZeroExtend(AL)]; ELSE (* AddressSize = 32 *) AL = DS:[EBX + ZeroExtend(AL)]; FI; Описание: Команда XLAT, используя индекс из регистра AL, выбирает элемент из таблицы, расположенной в памяти по адресу DS: (E)BX, и помещает его в AL. Регистр AL должен содержать беззнаковый индекс элемента в таблице. Сама таблица адресуется регистровой парой DS:BX (для атрибута размера адреса равного 16 бит), или регистровой парой DS: EBX (для атрибута размера адреса равного 32 бита). Для операнда команды XLAT допускается замещение сегмента по умолчанию. Мнемоника XLATB является синонимом XLAT и используется для краткости, а также для того, чтобы показать размерность операции выборки (байт) Иногда вместо арифметических и логических преобразований выгоднее использовать преобразование одного кода в другой. Преобразование кода длиной не более 8 бит (всего 256 комбинаций) наиболее просто реализуется с помощью хранения выходных кодов в массиве длиной до 256 байт и использования исходного кода в качестве индекса в этом массиве. В микропроцессоре предусмотрена специальная команда для выполнения этих действий – команда XLAT. В команде XLAT предполагается, что базовый адрес массива байт находится в регистре EBX, а преобразуемый байт – в регистре AL. Преобразуемое значение кода берется из массива кода и помещается в регистр AL. Фрагмент программы, преобразующей двоичный код в код семисегментного индикатора:
Несмотря на свою привлекательность, XLAT ограничена размером регистра AL и может преобразовывать код длиной не более 8 бит (всего 256 комбинаций). Чтобы преодолеть это ограничение, XLAT можно имитировать командами: lea reg,[base+reg*scale+offset] или mov reg,[base+reg*scale+offset]
1
|
3 / 3 / 0
Регистрация: 04.04.2012
Сообщений: 26
|
|
21.04.2012, 14:59 [ТС] | 10 |
Прошу не ругайтесь понимаю написал чушь, но может все же поможете добить задачу вот что получилось TASM через дос бокс. Помогите кто чем сможет ( всему рад советам что дописать что переписать, кодам короче все что поможет буфер еще где-то надо задействовать=) В поисковиках искал но для exe и tasm примеров команд очень мало=((
Код
code segment public assume cs:code, ds:data, ss: stek start: mov ax,data ; настроим на начало сегмента данных mov ds,ax ;сохранение начального адреса сегмента данных в регистр ds mov es,ax ; es - тот же сегмент данных ; (для команд обработки цепочек) mov dx,offset strA ; вывод строки 'Введите строку' mov ah,9 ;запись номера функции вывода строки int 21h;прерывание mov dx,offset str1 ;сохранение адреса выделенной области памяти под строку mov ah,0Ah ;запись номера функции ввода строки int 21h ;прерывание MOV BX,OFFSET Table_k ;таблица перекодировки MOV SI,OFFSET Str1 ;указать цепочку источник MOV DI,OFFSET strR ;истинная таблица MOV CX,LENGTH Str1 ; длина строки @@: lodsb xlatb stosb loop @@ code ends;конец кода программы data segment public;сегмент данных str1 db 26,0; выделение памяти под строку strbuf db 256 dup (?); задание буфера strA db 'Input String',13,10,'$';строка «Введите строку» Table_k db '7Ah,78h,76h,63h,62h,61h,64h,66h,67h,65h,68h,69h,6Ah,6Bh,6Ch,6Dh,6Eh,6Fh,70h,71h,72h,73h,74h,75h,77h,79h'; таблица перекодировки strR db '61h,62h,63h,64h,65h,66h,67h,68h,69h,6Ah,6Bh,6Ch,6Dh,6Eh,6Fh,70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,7Ah'; истенная таблица strend db 13,10,'$';переход на новую строку data ends;конец сегмента данных Stek segment stack;сегмент стека dw 128 dup (?) Stek ends ;конец сигмента стека end Start ; конец программы
0
|
Заблокирован
|
||||||
22.04.2012, 15:35 | 11 | |||||
Для ввода строки нужен массив. Str1 db 26,0 - это не буфер для ввода, это просто переменная размером два байта. Массив нужно объявить так: str1 db 26 dup (0).
Команда xlatb заменяет символ в аl на символ в таблице. Из задания ясно, что у вас будут две таблицы: 1) весь алфавит целиком и 2) алфавит "вперемешку". Для корректного кодирования придется использовать xlatb 2 раза. mov bx, offset table1 xlatb mov bx, offset table2 xlatb Где табл1 - оригинальный алфавит, табл2 - ваш набор символов. Добавлено через 22 часа 46 минут вот оно мое творение:
1
|
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
|
|
22.04.2012, 17:27 | 12 |
А зачем использовать дважды. Можно вычесть 64 и переводить по второй таблице и все (то есть не используя Table1)
0
|
3 / 3 / 0
Регистрация: 04.04.2012
Сообщений: 26
|
|
22.04.2012, 23:03 [ТС] | 14 |
да
programmisto, прав одной таблица хватит для кодировки но вот вычитать все таки надо 61 а не 64 хотя пока понял это только опытным путем (вычитал 61 и 64 ) но и логически думаю пойму=))
0
|
155 / 125 / 3
Регистрация: 22.06.2011
Сообщений: 1,784
|
|
22.04.2012, 23:36 | 15 |
halif, хорошо хоть понял
0
|
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
|
|
23.04.2012, 09:32 | 16 |
Это ещё почему? Нашел кодировку Windows. Вот че там написано:
61 - = 62 - > 63 - ? 64 - @ 65 - A и т. д. А с шестидесяти пяти начинаются крупные английские буквы.
0
|
116 / 136 / 0
Регистрация: 15.04.2012
Сообщений: 1,031
|
|
23.04.2012, 14:11 | 18 |
В книге "Справочник школьника: 5-11 классы. Информатика". А проверить я проверю.
Добавлено через 5 минут Под ДОСом написал вывел символ с кодом 65, он у меня английскую A вывел.
0
|
Ушел с форума
16339 / 7658 / 1076
Регистрация: 11.11.2010
Сообщений: 13,704
|
|
23.04.2012, 14:13 | 19 |
programmisto, буквы не английские (немецкие, французские и т.п.), а латинские
Искандар, а для чего две таблицы? заводишь одну на 256 символов и на место с номером 41h (символ "A") ставишь символ "Z" и т.п.
0
|
Заблокирован
|
|
23.04.2012, 14:58 | 20 |
Mikl___, Я по ходу задание неправильно понял halif предположил что надо две строки делать, а я подумал, что надо иненно двумя строками делать
0
|
23.04.2012, 14:58 | |
23.04.2012, 14:58 | |
Помогаю со студенческими работами здесь
20
План программы Проверка программы TASM Неправильный код программы на TASM Программы на Ассемблере Компиляция и запуск программы в GUI TASM Заголовок для программы транслятор tasm Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |