Вопрос № 35276: Помогите разобраться в общем алгоритме работы, я что-то не улавливаю (bl=1A).
00401310 |> 803E 00 |CMP BYTE PTR DS:[ESI],0 {Сравнение первого символа с нулём
00401313 |. 74 15 |JE SHORT crackme#.0040132A {Прыгаем из процедуры, если первый ...Вопрос № 35286: Здравствуйте!
Пожалуйста, мне нужен исходник(в нем должно быть самое необходимое) на Ассемблере, как сложить два числа в десятичной системе и вывести на экран результат сложения (От начала да конца, с шапкой). Дело в том, что я почти уже понял Ас...Вопрос № 35299: Здравствуйте уважаемые эксперты. Мне нужно открыть текстовый файл,
прочитать его и поменять значение всех символов. Я действовал так:
Open_file:
mov ax,3D02h ;открываем
mov dx,80h+1Eh ;смещение DTA+смещение имени файла
int 21h ; ...Вопрос № 35341: Есть программа которая копирует данные из одного файла в другой
Вопрос:
1.как сделать чтобы при записи к каждому символу(ascii коду) добавлялось число.
Метод типа: читать первый символ в буфер, добавлять число и записывать в другой, не по...
Вопрос № 35.276
Помогите разобраться в общем алгоритме работы, я что-то не улавливаю (bl=1A).
00401310 |> 803E 00 |CMP BYTE PTR DS:[ESI],0 {Сравнение первого символа с нулём
00401313 |. 74 15 |JE SHORT crackme#.0040132A {Прыгаем из процедуры, если первый сивол - 0
00401315 |. 8A06 |MOV AL,BYTE PTR DS:[ESI] {В AL присваивается первый символ
00401317 |. 02C1 |ADD AL,CL {Складываются AL и CL
00401319 |. 32C1 |XOR AL,CL ---
0040131B |. F6F3 |DIV BL ---
0040131D |. 66:C1E8 08 |SHR AX,8 ---
00401321 |. 04 41 |ADD AL,41 {В AL прибавляется 41
00401323 |. 8807 |MOV BYTE PTR DS:[EDI],AL {Результат (символ) заносится в AL
00401325 |. 47 |INC EDI {-Подготавливаем
00401326 |. 46 |INC ESI {- приёмник и счётчик
00401327 |. 41 |INC ECX {- для следующих символов
00401328 |.^EB E6 |JMP SHORT crackme#.00401310 {Прыгаем на начало процедуры генерации
Отправлен: 12.02.2006, 19:29
Вопрос задал: Meganop (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: EPDSota
Здравствуйте, Meganop!
Простейший алгоритм (необратимый)...
Эта функция преобразует оканичивающуюся нулем строку символов в строку целиком состоящую из больших латинских букв.
Его можно заменить спростым выбором сиволов из таблицы.
Так как вариантов входных символов 255 (256-1 (нулевой символ - признак конца строки) ), а на выходе - только 26 вариантов каждого символа.
То каждый символ на выходе на входе имеет 255/26 или 9-10 вариантов входных символов. вероятность угадывания строки на входе для получения нужной строки на выходе равна 26 в степени количество символов в выходной(входной) строке.
Приложение:
--------- Открыть глаза навстречу солнцу
Ответ отправил: EPDSota (статус: Практикант)
Отправлен: 17.02.2006, 10:33
Вопрос № 35.286
Здравствуйте!
Пожалуйста, мне нужен исходник(в нем должно быть самое необходимое) на Ассемблере, как сложить два числа в десятичной системе и вывести на экран результат сложения (От начала да конца, с шапкой). Дело в том, что я почти уже понял Ассемблер как язык. Осталось мелкие технические подробности на типо этой, и можно будет вплотную приступить к практике.
Хочу сказать, что этим Вы мне не сделаете поблажку, как "ленивому студенту", просто я ведь учу язык, а не создаю его, все таки, пожалуйста, помогите!!!
Отправлен: 12.02.2006, 21:01
Вопрос задал: Retcom (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Boriss
Здравствуйте, Retcom!
Вот писал я как-то пример почти по Вашему запросу: ввод десятичного числа (здесь преполагается только положительное число) и вывод суммы. Посмотрите прикрепленный файл
Прикреплённый файл: Загрузить >> Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа. --------- Вывод - то место в тексте, где вы устали думать
Ответ отправил: Boriss (статус: Профессор)
Отправлен: 13.02.2006, 12:33 Оценка за ответ: 4 Комментарий оценки: Ввожу: masm proga.asm Результат: proga.asm(35):error A2005:symbol redefinition:@@1 proga.asm(71):error A2005:symbol redefinition:@@1
Вопрос № 35.299
Здравствуйте уважаемые эксперты. Мне нужно открыть текстовый файл,
прочитать его и поменять значение всех символов. Я действовал так:
Open_file:
mov ax,3D02h ;открываем
mov dx,80h+1Eh ;смещение DTA+смещение имени файла
int 21h ;
jc Error_file ;если не открылся - ошибка
Read_file:
mov ah,3Fh ;чтение файла
int 21h
jc Error_file
mov si,byte ptr buffer ;первый символ
shr si ;меняем его значение
mov byte ptr buffer,si ;и заносим обратно в буфер
mov ax,4201h ;перемещаем указатель файла назад на 1
dec cx
dec cx
mov dx,cx ;DX = 0FFFFh
int 21h
mov ah,40h ;записать в файл
inc cx
inc cx ;1 байт
mov dx,offset buffer ;из буфера
int 21h
jmp short Read_file
Tasm5.0 выдает ошибку. Подскажите пожалуйста, что я делаю не так.
Отправлен: 13.02.2006, 00:37
Вопрос задал: Gogenot (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Беляев Валерий (ака seaman)
Здравствуйте, Gogenot!
Используй вместо si, например bl:
mov bl, byte ptr buffer ;первый символ
shr bl, 1 ;меняем его значение
mov byte ptr buffer, bl ;и заносим обратно в буфер
si-принципиально бвубайтный регистр. Чтобы в него занести один байт надо использовать movzx.
Еще посоветовал бы читать/писать не побайтно, а хотя бы посекторно.
Ответ отправил: Беляев Валерий (ака seaman) (статус: 3-ий класс)
Отправлен: 13.02.2006, 08:21 Оценка за ответ: 5
Отвечает: Евгений Иванов
Здравствуйте, Gogenot!
Во первых:
mov al,byte ptr buffer ;первый символ
shr al, 1 ;меняем его значение
mov byte ptr buffer,al ;и заносим обратно в буфер
Во вторых, не советовал бы использовать CX между вызовами INT 21h. Содержимое запросто может портиться. Используй SI, DI или местные переменные в стеке.
Удачи!
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 13.02.2006, 08:57 Оценка за ответ: 5
Вопрос № 35.341
Есть программа которая копирует данные из одного файла в другой
Вопрос:
1.как сделать чтобы при записи к каждому символу(ascii коду) добавлялось число.
Метод типа: читать первый символ в буфер, добавлять число и записывать в другой, не подходит.
2.вопрос связан с первым, после того как текст был загружен в буфер (buffer) можно обрашаться непосредственно к каждому символу.
add byte ptr buffer[1],2
как сделать цикл:
mov i,0
cikl:
inc i
add byte ptr buffer[i],2
jc exit
jmp cikl
данный пример не правельный, компилятор пишет что i константа
Вобшем подскажите что делать!
Приложение:
Отправлен: 13.02.2006, 15:02
Вопрос задал: Gwest (статус: 1-ый класс)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Boriss
Здравствуйте, Gwest!
Это называется косвенной адрессацией. Для этого нужно использовать регистры, но не все можно. Используйте BX, SI или DI.
.model tiny
.code
org 100h
start:
xor BX, BX
mov CX, 8
cikl:
add byte ptr buffer[bx], 2
inc bx
LOOP cikl
ret
buffer db 1,2,3,,4,5,6,7,8,9,10
end start
--------- Вывод - то место в тексте, где вы устали думать
Ответ отправил: Boriss (статус: Профессор)
Отправлен: 13.02.2006, 15:57 Оценка за ответ: 5
Отвечает: PRiSon
Здравствуйте, Gwest!
1. А что может быть проще....или вам нужен алгоритм с наворотами??
2.Попробуй вот так:
mov si,i
mov bx,offset buffer
cikl:
inc si
add byte ptr ds:[bx+si],2
jc exit
jmp cikl
советую использовать не переменные а Регистры так проц быстрее сооброжает..
Приложение:
--------- Стремление-значит получится.
Ответ отправил: PRiSon (статус: 2-ой класс)
Отправлен: 13.02.2006, 16:01 Оценка за ответ: 5
Отвечает: Евгений Иванов
Здравствуйте, Gwest!
Я бы посоветовал выделить буфер не один байт размером, а побольше, допустим, 64 Кб (или 512 Кб в win32).
Потом обрабатываешь буфер и выгружаешь его в выходной файл.
всего хорошего.
--------- Что имеем - не храним, потерявши - плачем
Ответ отправил: Евгений Иванов (статус: Профессор)
Отправлен: 13.02.2006, 17:16 Оценка за ответ: 5 Комментарий оценки: Хм... вот только я думал что ecx только под wind'у