Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Assembler

Автор: akaGM
Дата сообщения: 18.05.2012 16:11
wedl
если ты это сам писал, то у тебя не будет никаких проблем в исполнении другого алгоритма, или эти проблемы я просто не понял...
Автор: wedl
Дата сообщения: 18.05.2012 16:23
akaGM, в том то и дело что алгоритм я брал не свой, моих знаний пока увы ещё не хватает что бы перелопатить сей алгоритм(
Автор: akaGM
Дата сообщения: 18.05.2012 16:42
wedl

ну ты же можешь закодить формулу :)

bres = (bsrc ROL (i mod M))
Автор: delover
Дата сообщения: 18.05.2012 17:53
wedl
Дело в том что нужно реализовать ввод 21 как адрес на строку. Я бы clrr заменял на xor но там интересная формула, а я не спец писать перебирающие алгоритмы.
Автор: wedl
Дата сообщения: 18.05.2012 23:03

Цитата:
delover

clrr это
clrr macro reg
xor reg,reg
endm

Автор: MERCURY127
Дата сообщения: 19.05.2012 13:47
akaGM, серп у меня потому, что я сельский житель Посоветуйте, пожалуйста, книги/статьи/образцы, где бы на пальцах (те на конкретных регистрах, на реальном коде) была бы показана длинная арифметика (целое/плавающее сложение/умножение/деление) и тригонометрия на ССЕ2, а то вендоры грозятся скоро сопроцессор выкинуть ...
wedl, (bsrc ROL (i mod M)), в предположении, что источник - ASCIIZ строка

l1:
xor cl, cl
l2:
lodsb
or al, al
jz l3
rol al, cl
stosb
inc cl
cmp cl, M
jz l1
jmp l2
l3:
Автор: wedl
Дата сообщения: 19.05.2012 15:21
MERCURY127

Цитата:
источник - ASCIIZ строка

программа читает данные из файла, что за файл не важно так как мы берем любой файл просто как битовую последовательность
Автор: MERCURY127
Дата сообщения: 19.05.2012 15:27
эмм... БИТОВАЯ последовательность? и сколько бит надо за раз сдвигать???
Автор: akaGM
Дата сообщения: 19.05.2012 16:02
MERCURY127
глянь у интела
http://software.intel.com/file/24753
http://software.intel.com/file/24960

и вообще у них там полазь...
Автор: wedl
Дата сообщения: 19.05.2012 23:17
MERCURY127
Каждый файл есть битовая последовательность.
Мне надо открывать файл> шифровать>создавать новый файл>записывать туда шифрованную последовательность
Процедуры открытия и создания файлов у меня есть. А вот с реализацией алгоритма беда
Автор: akaGM
Дата сообщения: 19.05.2012 23:28
wedl

Цитата:
Каждый файл есть битовая последовательность.

ну вообще-то файл -- это байтовая последовательность, а биты придётся выделять/обрабатовать самому...
Автор: wedl
Дата сообщения: 19.05.2012 23:52
да байтовая, я опечатался
Автор: akaGM
Дата сообщения: 20.05.2012 01:07
wedl
ну а основу алгоритма тебе написали уже...
вместо ASCIIZ будет просто последовательность байт (0 -- тоже значимый байт) и цикл по размеру файла...
что трудного?
Автор: cp58
Дата сообщения: 20.05.2012 01:24
wedl

Цитата:
Подскажите пожалуйста как лучше реализовать приведенный мной ниже алгоритм шифрования:

Какой ассемблер?

Второй вопрос: зачем все это, если, конечно, не для учебы?
Автор: akaGM
Дата сообщения: 20.05.2012 01:33
он сорс приводил
http://dl.dropbox.com/u/56949969/tail.asm

судя по всему стандартный x86 (masm, скорее всего)
Автор: cp58
Дата сообщения: 20.05.2012 01:58
akaGM

Цитата:
судя по всему стандартный x86 (masm, скорее всего)

Похоже на то.

wedl
Подгружать по 4 байта для скорости, контролировать размер.
Алгоритм в общих чертах, переменные вместо оптимизации на регистрах для наглядности.

Код: mov eax, dword ptr [i]
mov ebx, dword ptr [M]
xor edx, edx
div ebx
mov eax, dword ptr [bsrc]
mov ecx, edx
rol eax, cl
Автор: wedl
Дата сообщения: 20.05.2012 12:13
cp58
для учебы, для обучения..и поэтому у меня пока ещё есть все таки некоторые проблемы с реализацией.
Цитата:
akaGM

Цитата:
судя по всему стандартный x86 (masm, скорее всего)

tasm
Автор: akaGM
Дата сообщения: 20.05.2012 12:28
тогда наверняка 16-разрядный...
если файлы мешьше 64К, читай их целиком в буфер, и этот буфер побайтно хреначь...
Автор: Maksim_Avrorov
Дата сообщения: 23.05.2012 10:16
Задался целью вывести АСКИ-коды вводимых символов. Как думаете, какой функцией можно вывести эти самые нули и единицы. Я пробовал получилось вот такая программа:

code segment
assume cs:code, ds:data
    mov ax, data
    mov ds, ax
    
mov ah,01h
    int 21h
    mov dl, al
    
mov ah, 02h
    int 21h
    
mov ax, 4c00h
    int 21h
code ends

Но как я выяснил она мне выводит вводимый символ, а не АСКИ-код этого вводимого символа. Может кто-нибудь знает как реализовать вывод АСКИ-кода?
Автор: akaGM
Дата сообщения: 23.05.2012 12:02

Цитата:
выводит вводимый символ, а не АСКИ-код этого вводимого символа

а что такое аски-код символа?
ESC = 27 -- так, или как?
Автор: Maksim_Avrorov
Дата сообщения: 23.05.2012 13:19
Ну в шестнадцатеричном представлении символ ESC = 1B , 0 = 30 , 1 = 31 и т.п.
Я ввожу символ, а компьютер воспринимает его как аски-код (это в моём представлении).
Автор: Yvaliko
Дата сообщения: 23.05.2012 15:16
Maksim_Avrorov
А для каких целей интересуетесь? Если просто что бы знать что что означает, то в Dos Navigator есть замечательная ASCII табличка по Ctrl+B
Автор: Maksim_Avrorov
Дата сообщения: 23.05.2012 15:22
Я хочу сделать программу, которая вводимый символ преобразовывала в аски-код и выводила его на экран.
Автор: akaGM
Дата сообщения: 23.05.2012 15:27
if key <= 31 then
обработка контрол-кода
else
печать как есть...
Автор: Yvaliko
Дата сообщения: 23.05.2012 15:32
Maksim_Avrorov
Тогда придется немного допилить алгоритм. Сперва выводим содержимое регистра как есть, потом преобразуем в читаемый вид и выводим снова.
Сейчас попробую набросать.

Добавлено:
Вот набросал нечто более менее наглядное.

Код: .model tiny
.code
ORG 100h
start:
mov cx,100h
cycle:
mov ax,100h
sub ax,cx
mov ascii,al
shl ax,4
shr al,4
cmp ah,9
ja F1
or ah,30h
mov hex1,ah
jmp next
F1:
add ah,37h
mov hex1,ah
next:
cmp al,9
ja F2
or al,30h
mov hex2,al
jmp next2
F2:
add al,37h
mov hex2,al
next2:
lea dx,ascii
mov ah,9
int 21h
loop cycle
int 20h
data:
ascii db 0
db '='
hex1 db 0
hex2 db 0
db 0dh,0ah,'$'
end start
Автор: ForposT_ForeveR
Дата сообщения: 28.05.2012 10:29
Здравствуйте.
Сначала распишу всё задание полностью:
1. Необходимо в программе C# считать файл, на каждой строке которого находится арифметическое выражение.
2. Затем необходимо сгенерировать код на ассемблере, который бы вычислял каждое выражение.
3. Откомпилировать программу и запустить, как ехе файл.

Теперь, что касается ассемблера.
Необходимо на ассемблере решать арифметические выражения вида:
А := K + 4 * (10-8) / 8
P := A + 8

A,K,P - это переменные, которые мы получаем из файла
4,8,10,8 - числа
+-*/ - арифметические знаки
() скобки

Как я вижу решение этого задания:
Разбиваем выражение на элементарные действия, т.е.
Сначала в А заносим значение 10-8, затем 4 умножаем на значение в А и т.д.

Однако, для того, чтобы реализовать само присваивание, умножение, деление - необходимы шаблоны на ассемблере, которые буду вставлять в нужное место. Если мои рассуждения верны, то прошу помощи в данных шаблонах. Если же нет - подскажите, пожалуйста, как можно реализовать поставленную задачу.
И ещё, как себя поведет ассемблер, если мы будем суммировать переменную, которая была не объявлена? Как в примере переменная "К", ещё надо будет заменять на ноль или выдавать ошибку?

P.S.
Готов рассчитаться за помощь.
Автор: Yvaliko
Дата сообщения: 28.05.2012 14:38
ForposT_ForeveR
Всего один вопрос. Переменные это целые положительные числа без знака?

Цитата:
И ещё, как себя поведет ассемблер, если мы будем суммировать переменную, которая была не объявлена?

Если в коде ты попробуешь подставить имя переменной которой нигде нет, то он конечно ругнется. Тут вопрос немного в дургом. Существует ли переменная? Если есть число из файла, значит его можно загрузить в регистр и работать с ним не выделяя под него отдельную переменную.
Автор: akaGM
Дата сообщения: 28.05.2012 15:10
странное какое-то задание...
я лично не понял эту межъязыковую C#-ASM связь...
Автор: ForposT_ForeveR
Дата сообщения: 28.05.2012 17:21
В C# я обязан написать все свои учебные работы.
Мне в C# необходимо написать этакий генератор асмовских файлов, которые бы решали арифметические выражения, затем я его откомпилирую тасмом и получу ехе, ч.т.д.
В ходе данной работы ещё много чего требовалось, однако всё это уже решил. Остался только асм.
Говорят, что есть какой-то скриптовый язык, на котором пишешь, а ещё уже написанный конвертер, который сам всё переведет в асм. Говоря по секрету, мне он тоже подойдет. Лишь бы уже решить этот вопрос с асмом.
Очень прошу, если кто может чем-то помочь пишите на alexey @ f_o_r_p_o_s_t.md (без _) и (два-девять-три-один-пять-ноль-два-девять-семь ICQ).
Готов рассчитаться за помощь.
Автор: MERCURY127
Дата сообщения: 28.05.2012 18:00
хе-хе... C# (.NET & Co) для того и изобретали, чтоб ни у кого не было соблазна не то что в АСМ, а даже в классический Си выходить... Препода надо сдать Мелкомягким, за сей страшный грех...

Добавлено:

Цитата:
Мне в C# необходимо написать этакий генератор асмовских файлов, которые бы решали арифметические выражения, затем я его откомпилирую тасмом и получу ехе, ч.т.д.

это не проблема, вопрос только, как данные туда сюда перегонять? через комстроку что ли?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

Предыдущая тема: .NET GUI компоненты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.