Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2012, 17:07   #1
илья001
Пользователь
 
Регистрация: 18.05.2011
Сообщений: 21
По умолчанию Упростить план реализации программы на TASM ассемблере

Задание. Зашифровать строку по таблице. Таблица считается известной.
В моем понимании я должен:
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 ассемблере.( опыт программирования очень маленький)
илья001 вне форума Ответить с цитированием
Старый 20.04.2012, 20:17   #2
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

На самом деле намного всё проще:
1. Задаёте таблицу из 256 байт с таблицей соответствия ASCII кода - вашей таблице перекодирования.
а дальше можно идти двумя путями:
- получить строку с клавиатуры
- в цикле перекодировать посимвольно командой xlat
или
- считывать посимвольно
- сразу переводить перекодировку через xlat
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 20.04.2012, 20:48   #3
илья001
Пользователь
 
Регистрация: 18.05.2011
Сообщений: 21
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
На самом деле намного всё проще:
1. Задаёте таблицу из 256 байт с таблицей соответствия ASCII кода - вашей таблице перекодирования.
а дальше можно идти двумя путями:
- получить строку с клавиатуры
- в цикле перекодировать посимвольно командой xlat
или
- считывать посимвольно
- сразу переводить перекодировку через xlat
я вообще с цепочками не работал и вот как то даже ASCII таблицу задать не могу просто не видел покажите пример кода пожалуйста задачи таблицы.( data segment public
Код:
strA dw 'Input String',13,10,'$';строка dw?
              data ends;конец сегмента данных
                Stek segment stack;сегмент стека
        dw  128 dup (?) ; со стеком ставить 256? или 128 хватит?
                Stek ends;конец сегмента стека
            end start;конец програмы
вот нашел в гогле как я понял тут первый вариант реализации задачи?
Код:
если не затруднит как строка выглядеть будет?  ; ds:si -> inp buf  
                                    ; es:di -> out buf 
                                    ; es:bx -> table
;cx - counter
@@: lodsb    @@-здесь что должно быть?
xlatb
stosb
loop @B  @B -здесь что?

Последний раз редактировалось илья001; 20.04.2012 в 21:03.
илья001 вне форума Ответить с цитированием
Старый 20.04.2012, 21:31   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

вот тут коды:
http://www.asciitable.com/
забиваешь массив последовательно данными значениями, а затем меняешь буквы согласно плана замены.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 21.04.2012, 15:06   #5
илья001
Пользователь
 
Регистрация: 18.05.2011
Сообщений: 21
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
вот тут коды:
http://www.asciitable.com/
забиваешь массив последовательно данными значениями, а затем меняешь буквы согласно плана замены.
Спасибо огромное понял что такое ASCII таблица
Прошу не ругайтесь общими усилиями написали не рабочий код, но может все же поможете добить задачу вот что получилось 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 strbuf          ;сохранение адреса выделенной области памяти под вводимую строку
    mov ah,0Ah              ;запись номера функции ввода строки
    int 21h                 ;прерывание
    
    
        
    MOV SI,OFFSET Strbuf              ;указать цепочку источник
    MOV DI,OFFSET outstr              ;указать цепочку приемник
    MOV CX,LENGTH Strbuf             ; длина строки
    @@1: lodsb
    MOV BX,OFFSET Table1     ;истинная таблица перекодировки 
    xlatb                       ;берем символ из 
    MOV DX, OFFSET TABLe2                ;таблица перекодировки
    xlatb
    stosb
    loop @@1
    
code ends;конец кода программы
 
data segment public;сегмент данных
 
outstr db 256 dup(?)              ; строка для закодированной введенной строки
strbuf db 256 dup (?); задание буфера для ввода строки
strA db 'Input String',13,10,'$';строка «Введите строку»
table1 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'; истИнная таблица
Table2 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'; таблица перекодировки
 
 
strend db 13,10,'$';переход на новую строку
 
data ends;конец сегмента данных
Stek segment stack;сегмент стека
dw 128 dup (?)
Stek ends ;конец сигмента стека 
end Start ; конец программы

Последний раз редактировалось илья001; 21.04.2012 в 17:36.
илья001 вне форума Ответить с цитированием
Старый 22.04.2012, 21:36   #6
илья001
Пользователь
 
Регистрация: 18.05.2011
Сообщений: 21
По умолчанию

все сделал тему закрывайте .
илья001 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос по реализации командной строки в ассемблере. Стас_с Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 21.11.2011 17:28
Программа на ассемблере (TASM) prostofilya Помощь студентам 0 27.06.2009 22:14
Работа со строками на ассемблере (TASM) crashX Помощь студентам 3 03.06.2009 09:22
Что выбрать TASM или MASM для программирования на ассемблере? Alabay Помощь студентам 1 11.01.2009 11:48