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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2008, 05:10   #1
Kandela
 
Регистрация: 14.02.2008
Сообщений: 5
По умолчанию Помогите с .386!!!

Ребят, помогите, плиз! Мне надо написать шифратор, а для этого необходимы 32-регистры. Нашла, что в MASM для этого нужно указать .386 Это только начало программы. Мне надо открыть файл через параметр в командной строке. Например:shifr e:\1.txt А после сохранить размер файла из связки dx:ax.

Вот код, все идет. Как его переписать под .386 директиву? Что нужно изменить?
Вот ссылка на userv.mac. Его тоже надо изменить, только как?
http://ifolder.ru/6254504
Вот код:

Код:
include userv.mac
data segment
file_name db 128 dup (?)  ; буфер для пути к файлу
handle dw ?
dlina dw ?

data ends
code segment
assume cs:code, ds:data

start:
;<-------------- копируем командную строку в file_name, вначале уберем ведущие
                 ;пробелы в командной строке перед путем к файлу
                 
mov di,81h ;помещаем в di 81h - адрес области параметров
mov al," "
mov cx,128 ;задаем счетчик, равный 128 - максимальной длине области параметров
repe scasb ;проверяем на " "
dec di
push di
pop si
mov ax,data
mov es,ax
mov cl,ds:[80h]
dec cl
lea di,file_name
rep movsb    ;копируем строку в память
mov al,00h
stosb        ;записываем в конец строки 00h
push es
pop ds
mov ax,data
mov ds,ax

;<-------------- открываем файл
mov al,02h ;режим доступа-чтение/запись
mov dx,offset file_name ;формируем указатель на имя файла
mov ah,3dh ;номер функции DOS - открытие файла
int 21h
jnc per1
jmp error1  ;если есть ошибки
per1:
mov handle,ax              ;сохранили дескриптор

;<------------------------ определяем размер файла
mov bx,handle              ;загрузили дескриптор
mov al,02h                 ;переместить в конец
mov cx,0                   ;смещение
mov dx,0                   ;        обнулено
mov ah,42h  ;номер функции DOS - установка позиции
int 21h
jnc per2
jmp error  ;если есть ошибки
per2:
 
jmp exit
error1:  cmp ax,2                ;если ошибка, если файл отсутствет
         je error_open
         jmp error
         error:  u_msg <13,10,'Proizoshla oshibka'>
         jmp exit
         error_open:  u_msg <13,10,'Nevernii put'>  ;если другая ошибка
         jmp exit
exit:
;<--------------- закрываем файл
mov ah, 3eh ;номер функции DOS - закрытие файла
mov bx, handle
int 21h
mov ax,0
mov ah,4ch
int 21h
code ends
sta segment stack
dw 64 dup(?)
sta ends
end start
Кто сказал, что девушка и ассемблер несовместимы?

Последний раз редактировалось rpy3uH; 22.04.2008 в 19:32.
Kandela вне форума Ответить с цитированием
Старый 22.04.2008, 05:12   #2
Kandela
 
Регистрация: 14.02.2008
Сообщений: 5
По умолчанию

Помогите, пожалуйста! Очень надо!
Кто сказал, что девушка и ассемблер несовместимы?
Kandela вне форума Ответить с цитированием
Старый 22.04.2008, 05:53   #3
Vedrus
ИСККОНный хакер
Форумчанин
 
Аватар для Vedrus
 
Регистрация: 08.11.2007
Сообщений: 195
По умолчанию

Код:
.686
.model flat, stdcall
option casemap :none

.data

.code

start proc
	mov	eax, ebx
start endp

end	start
#define QUESTION bb || !bb
Vedrus вне форума Ответить с цитированием
Старый 22.04.2008, 07:59   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Мне надо написать шифратор, а для этого необходимы 32-регистры.
Почему именно 32-битные?
Кстати у меня в МАСМ начало такое:
Код:
.386
	.model flat,stdcall
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.04.2008, 09:15   #5
Kandela
 
Регистрация: 14.02.2008
Сообщений: 5
По умолчанию Спасибо!

Спасибо большое!
Кто сказал, что девушка и ассемблер несовместимы?
Kandela вне форума Ответить с цитированием
Старый 12.08.2012, 16:41   #6
djonatan98
Форумчанин
 
Регистрация: 15.04.2012
Сообщений: 103
По умолчанию

Подправил

.386
model flat,stdcall
opcion casemap :none

include\masm32\include\windows.inc
include \masm32\macros\macros.asm
Uselib kernel32, user32,comctl32

WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD

.data
code segment db 0
assume cs:code, dsata

.data ?
file_name dp 128 dup (?) 0 ?
err db "Ошибка", 0

.code
start PROC

-----------------------------------

mov db,81h
mov al,
mov cx,128
repe scasb
dec db
push db
pop si
mov ax,data
mov es,ax
mov cl,ds:[80h]
dec cl
lea db,file_name
rep movsb
mov al,00h
stosb
push es
pop ds
mov ax,data
mov ds,ax

------------------------------------

mov al,02h
mov dx,offset file_name
mov ah,3dh
int 21h
jnc per1
jmp_next
.endif
jmp error1
jmp_next
.endif
per1:
mov handle,ax

------------------------------------

mov bx,handle
mov al,02h
mov cx,0
mov dx,0
int 21h
jnc per2
jmp error
jmp_next
per2:
jmp error
jmp error1: cmp ax,2
jmp_next
. endif
je error_open
jmp error
jmp error: u_msg
jmp_next
.endif
invoke MessageBox, hWin, chr$('Proizoshla oshibka')
jmp_next
.endif
jmp error_open: u_msg
invoke MessageBox, hWin, chr$('chr$ 13,10,'Nevernii put')
jmp_next
.endif

------------------------------------
mov ah, 3eh ;номер функции DOS - закрытие файла
mov bx, handle
int 21h
mov ax,0
mov ah,4ch
int 21h
code ends
sta segment stack
dw 64 dup(?)
sta ends
end start

Используй оператор условного перехода jmp_next.
Я не писал дешифраторы, поэтому погугли и найди функции копирования командной строки в файл.
djonatan98 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск