mov chislo_32bit, eax; результат в память где хранится число
inc esi; увеличиваем индекс
call ravr1; делаем единицы
ret;
ravr3:
mov eax,0; обнуляем еах
mov al,[esi]; берем символ
sub al,30h; вычитаем 30ш чтобы получит число
mov ah,100; 100 в ah
mul ah; ax = al*ah
add eax,chislo_32bit; еах + то что было
mov chislo_32bit, eax; результат в память где хранится число
inc esi; увеличиваем индекс
call ravr2; делаем десятки и единицы
ret;
ravr4:
mov eax,0; обнуляем еах
mov al,[esi]; берем символ
sub al,30h; вычитаем 30ш чтобы получит число
mov bx,1000; 1000 в bx
mul bx; dx:ax = ax*bx
add eax,chislo_32bit; еах + то что было
mov chislo_32bit, eax; результат в память где хранится число
inc esi; увеличиваем индекс
call ravr3; делаем десятки и единицы
ret;
ravr5:
mov eax,0; обнуляем еах
mov al,[esi]; берем символ
sub al,30h; вычитаем 30ш чтобы получит число
mov bx,10000; 10000 в bx
mul bx; dx:ax = ax*bx
add eax,chislo_32bit; еах + то что было
mov chislo_32bit, eax; результат в память где хранится число
inc esi; увеличиваем индекс
call ravr4; делаем десятки и единицы
ret;
;Строка - [EBP+08H].
;Длина в ЕВХ
LENSTR PROC
ENTER 0,0
PUSH EAX
;----------------------
CLD
MOV EDI,DWORD PTR [EBP+08H]
MOV EBX,EDI
MOV ECX,100 ;Ограничить длину строки.
XOR AL,AL
REPNE SCASB ;Найти символ 0.
SUB EDI,EBX ;Длина строки, включая 0.
MOV EBX,EDI
DEC EBX
;----------------------
POP EAX
LEAVE
RET 4
LENSTR ENDP
start:
;Перекодируем строки.
PUSH OFFSET STR_frec
PUSH OFFSET STR_frec
CALL CharToOemA@8
PUSH OFFSET STR_amp
PUSH OFFSET STR_amp
CALL CharToOemA@8
PUSH OFFSET STR_Xn
PUSH OFFSET STR_Xn
CALL CharToOemA@8
PUSH OFFSET STR_Xk
PUSH OFFSET STR_Xk
CALL CharToOemA@8
PUSH OFFSET STR_kod
PUSH OFFSET STR_kod
CALL CharToOemA@8
PUSH OFFSET STR_diskret
PUSH OFFSET STR_diskret
CALL CharToOemA@8
PUSH OFFSET STR_end
PUSH OFFSET STR_end
CALL CharToOemA@8
;Образовать консоль.
;Вначале освободить уже существующую.
CALL FreeConsole@0
CALL AllocConsole@0
;Получить HANDL1 ввода.
PUSH STD_INPUT_HANDLE
CALL GetStdHandle@4
MOV HANDL1,EAX
;Получить HANDL вывода.
PUSH STD_OUTPUT_HANDLE
CALL GetStdHandle@4
MOV HANDL, EAX
;Установить позицию курсора.
MOV CRD.X,0
MOV CRD.Y,0
PUSH CRD
PUSH HANDL
CALL SetConsoleCursorPosition@8
;Вывести строку.
PUSH OFFSET STR_frec;
CALL LENSTR ;В ЕВХ длина строки.
PUSH 0
PUSH OFFSET LENS
PUSH EBX
PUSH OFFSET STR_frec;
PUSH HANDL
CALL WriteConsoleA@20
;Ждать ввод строки.
PUSH 0
PUSH OFFSET LENS
PUSH 200
PUSH OFFSET chislo ;BUF
PUSH HANDL1
CALL ReadConsoleA@20
call string_to_hex;
mov eax,chislo_32bit;
mov frec,eax;
mov Xn,0;
mov Xk ,1;
;Вывести строку.
PUSH OFFSET STR_diskret;
CALL LENSTR ;В ЕВХ длина строки.
PUSH 0
PUSH OFFSET LENS
PUSH EBX
PUSH OFFSET STR_diskret;
PUSH HANDL
CALL WriteConsoleA@20
;Ждать ввод строки.
PUSH 0
PUSH OFFSET LENS
PUSH 200
PUSH OFFSET chislo ;BUF
PUSH HANDL1
CALL ReadConsoleA@20
call string_to_hex;
mov eax,chislo_32bit ;
mov diskret,eax;
;Вывести строку.
PUSH OFFSET STR_kod;
CALL LENSTR ;В ЕВХ длина строки.
PUSH 0
PUSH OFFSET LENS
PUSH EBX
PUSH OFFSET STR_kod;
PUSH HANDL
CALL WriteConsoleA@20
;Ждать ввод строки.
PUSH 0
PUSH OFFSET LENS
PUSH 200
PUSH OFFSET chislo ;BUF
PUSH HANDL1
CALL ReadConsoleA@20
call string_to_hex;
mov eax,chislo_32bit;
mov kod,al;
;Открыть файл.
PUSH 0 ;Должен быть равен 0.
PUSH 0 ;Атрибут файла (если создаем)
PUSH CREATE_ALWAYS ;Как открывать.
PUSH 0 ;Указатель на security attr.
PUSH 0 ;Режим общего доступа.
PUSH GEN ;Режим доступа.
PUSH OFFSET F_NAME ;Имя файла.
CALL CreateFileA@28
CMP EAX,-1; проверка на успешность
JE NO_PAR
MOV F_HANDL,EAX; если безуспешно то выход иначе полученный хендл в F_HANDL
;**************************************************************************************
; М-Модуляция, вход - kod (4 битное), выход m_mod (32 бита)
;**************************************************************************************
mov ebx, 0;
mov al, kod;
mov cx, 15;
mov ah,al;
and ah,00001000b;
ror ah,4;
rcr ebx,1;
qcikl:
mov ah, al;
and ah, 01;
jz qobhod;
xor al, 00001000b;
qobhod:
mov ah,al;
and ah,00001000b;
ror ah,4;
rcr ebx,1;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.