Нужна помощь с ассемблером.

  • Автор темы net_vlad
  • Дата начала
Статус
Закрыто для дальнейших ответов.
N

net_vlad

Гость
#1
Вкратце. Прога реализует алгоритм гаммирования. Для работы нужны два файла: plain.txt и secret.txt.
Первый содержит открытый текст, второй изначально пустой, после отработки в него помещается зашифрованный текст. Алгоритм симметричен.
Собственно, проблема: при работе с большими файлами (например, полная версия Властелина колец в txt - порядка 2.7 метра) файл шифруется не в полном объеме, а только некоторая часть от начала. Количество обработанной инфы от случая к случаю произвольно. Но кодирует правильно. Выручайте!

Итак, сам код:

.model tiny
.code
.386
org 100h
ginger:
xor cx,cx
mov ax,3D00h
lea dx,plain
int 21h
mov bp,ax

mov ax,3D02h
lea dx,secret
int 21h
mov sp,ax

mov si,0
encoding:
mov bx,si
mov ax,word ptr a
mul bx
add ax,word ptr b
push ax

mov bx,bp
mov ah,3Fh
mov cx,2
lea dx,buffer
int 21h
mov di,ax
cmp di,0
je get_out

pop ax
mov bx,word ptr buffer
xor ax,bx
mov word ptr buffer,ax

mov ah,40h
mov bx,sp
mov cx,2
cmp di,1
jne go_on
mov cx,1
go_on:
lea dx,buffer
int 21h

inc si
jmp encoding

get_out:
ret

a dw 0DADh
b dw 07D8h
plain db 'plain.txt',0
secret db 'secret.txt',0
buffer db 2 dup(?)
end ginger

Ну и в прикрепленном архиве - файлы для работы проги плюс сам код.
P. S. Использовал компилятор MASM 6.11.
 

Вложения

  • 855.6 КБ Просмотры: 51
F

Fossil Code

Гость
#2
При работе с файлами под досом в прерываниях используется 32-битовый указатель текущей позиции файла, содержащийся в двух регистрах. Словом, может переполняться указатель. Можно попробовать читать/писать буферами относительно текущей позиции в файле.
 
S

supak21

Гость
#3
народ помогите решить две задачки на ассемблре:
1)найти min(b(i)), которое состоит из целых чисел i=1,2...10
2)протрабулировать функцию y(x), задан в виде:
y(x)=ax+b, если i<x<=5
y(x)=bx+a, если 5<x<=10
где a - max(a(i)), a b -max(b(i)); i=1,2,...,5
Нахождение max оформить в виде программного шага
табуляция x=1
всем кто поможет огромное мпасибо )

помогите решить на ассемблере:
1)найти min(b(i)), которое состоит из целых чисел i=1,2...10
2)протрабулировать функцию y(x), задан в виде:
y(x)=ax+b, если i<x<=5
y(x)=bx+a, если 5<x<=10
где a - max(a(i)), a b -max(b(i)); i=1,2,...,5
Нахождение max оформить в виде программного шага
табуляция x=1
 
Статус
Закрыто для дальнейших ответов.