Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

04.12.2008, 02:01
|
|
Познающий
Регистрация: 03.12.2008
Сообщений: 56
Провел на форуме: 140714
Репутация:
29
|
|
Ребят, помогите пожалуйста... Через консоль должно вводиться шестнадцатиричное число. Для ввода использую ReadConcole. Как работать с переменной, куда ввел все это, как с числом в шестнадцатиричной системе, а не как со строкой...
Использую MASM 10.
|
|
|

04.12.2008, 04:46
|
|
Участник форума
Регистрация: 20.12.2007
Сообщений: 295
Провел на форуме: 1777055
Репутация:
347
|
|
Ребят, помогите пожалуйста... Через консоль должно вводиться шестнадцатиричное число. Для ввода использую ReadConcole. Как работать с переменной, куда ввел все это, как с числом в шестнадцатиричной системе, а не как со строкой...
вот пример ввода строки, содержащей 16-ое число. процедура Ascii2Hex переводит ее именно в числовой вид
Код:
.386
.model flat, stdcall
option casemap :none
include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
includelib c:\masm32\lib\kernel32.lib
include c:\masm32\include\user32.inc
includelib c:\masm32\lib\user32.lib
Ascii2Hex PROTO :DWORD
cprintf PROTO C :DWORD, :DWORD, :VARARG
.data
msgStart db "# Enter num: "
outformat db "%u", 0
buf db 128 dup (0)
.data?
hOut dd ?
hIn dd ?
bw dd ?
.code
start:
invoke GetStdHandle, STD_INPUT_HANDLE
mov hIn, eax
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov hOut, eax
invoke WriteFile, eax, offset msgStart, sizeof msgStart, offset bw, 0
invoke ReadFile, hIn, offset buf, sizeof buf - 1, offset bw, 0
mov esi, bw
mov BYTE PTR [buf + esi - 2], 0
invoke Ascii2Hex, offset buf
invoke cprintf, hOut, offset outformat, eax
invoke ExitProcess, 0
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
; Перевети hex-строку в число
Ascii2Hex proc uses ebx esi lpHexString:DWORD
mov esi, lpHexString
xor eax, eax
xor ebx, ebx
@@:
mov al, BYTE PTR [esi]
test al, al
jz @exit
shl ebx, 4
.IF al > 040h
sub al, 007h
.ENDIF
xor al, 030h
or ebx, eax
inc esi
jmp @B
@exit:
mov eax, ebx
ret
Ascii2Hex endp
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;Печатать форматированный текст в консоли
cprintf proc C hOutHandle:DWORD, lpFormat:DWORD, arglist:VARARG
LOCAL locbuf[2048] :BYTE
LOCAL dwWritten :DWORD
invoke wvsprintf, addr locbuf, lpFormat, addr arglist
mov ecx, eax
invoke WriteFile, hOutHandle, addr locbuf, ecx, addr dwWritten, 0
ret
cprintf endp
end start
|
|
|

05.12.2008, 00:47
|
|
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
Провел на форуме: 379101
Репутация:
136
|
|
Kaas бинарь свой скинь
|
|
|

07.12.2008, 02:10
|
|
Познающий
Регистрация: 01.03.2008
Сообщений: 99
Провел на форуме: 613745
Репутация:
51
|
|
Ребята, кто может помочь изучающему асм немного? Литература конечно есть, но это немного не то, практики нет, в которой и познаётся теория. Если вдруг в ком проснулось альтруистичное начало - чиркните мне в icq 192693716
|
|
|

11.12.2008, 04:41
|
|
Познающий
Регистрация: 03.12.2008
Сообщений: 56
Провел на форуме: 140714
Репутация:
29
|
|
Подскажите, пожалуйста, как работать с введенной строкой как с десятичным числом?
|
|
|

11.12.2008, 09:59
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
также как и с обычными числами, но предварительно переведя его из строки в число.
Алгоритм перевода примерно такой:
1) получаешь длинну строки
2) перебираешь поочереди каждый символ.
3) отнимаешь от символа 48 и получаешь какбыла непосредственно значение.
4) умножаешь число полученное на предудущем этапе на 10 и к нему прибавляешь то, что получилось от символа.
5) повторяешь заного всё пока недостигнут конец строки
|
|
|

16.12.2008, 03:36
|
|
Участник форума
Регистрация: 22.11.2007
Сообщений: 159
Провел на форуме: 732568
Репутация:
156
|
|
Можно я тоже попользуюсь коллективным разумом античата? 
Цель - написать на ассемблере программу получающую состояние ком порта и работающую в досе.
Как по вашему это наиболее грамотно сделать? Вопрос и о самой программе и об инфраструктуре.
Сейчас сделал виртуалбокс с досом, попытался настроить так чтобы com порт виртуалки смотрел в COM1 основной машины, но vmbox ругнулся и сказал что прав нет. Это из-за того что XP на основной машине не позволяет работать с портами напрямую?
И ещё: если в старый комп с досом воткнуть в com порт мышь, не ставя при этом драйверов - можно ли будет в своей программе (использующей прерывание 14h например) видеть изменение состояния ком порта? А если поставить дрова останется ли возможность работать с портом напрямую? Есть ли разница в данном случае где это всё будет работать в win98 или чистом dos?
Вобщем любые идеи, ссылки, исходники приветствуются, а хорошие - плюсуются.
Заранее спасибо.
Последний раз редактировалось reversys; 16.12.2008 в 05:05..
|
|
|

19.12.2008, 15:18
|
|
Познающий
Регистрация: 20.01.2008
Сообщений: 65
Провел на форуме: 664107
Репутация:
25
|
|
мне нужно обьяснить как работают кусочки кода (коментами если можна) место откуда нужно писать коментарии в исходнике там немножко - помогите кто может((
Код:
# Переменные
a:
.long 1
b:
.long 2
c:
.long 3
d:
.long 4
cc:
.byte 10
.text
LC0:
.ascii "a=%d b=%d c=%d d=%d\12\0"
LC1:
.ascii "a=%d b=%d c=%d d=%d\12\0"
.globl _xxx
.def _xxx; .scl 2; .type 32; .endef
_xxx:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
subl $12, %esp
pushl d
pushl c
pushl b
pushl a
pushl $LC0
call _printf
addl $32, %esp
leave
ret
.globl _func
.def _func; .scl 2; .type 32; .endef
_func:
pushl %ebp
movl %esp, %ebp
movl %eax, %ecx
imul %eax
imul %ecx
movl %eax,%edx
movl $2,%eax
mull %ecx
#xor %edx, %edx
subl %eax, %edx
incl %edx
movl %edx,%eax
pop %ebp
leave
ret
.globl _func1
.def _func1; .scl 2; .type 32; .endef
_func1:
pushl %ebp
movl %esp, %ebp
movl 16(%ebp), %eax
imul %eax
movl 12(%ebp), %ebx
imul %ebx
movl %eax, %ecx
movl 16(%ebp), %eax
movl 8(%ebp), %ebx
imul %ebx
addl %ecx, %eax
movl 4(%ebp), %edx
subl %edx, %eax
pop %ebp
leave
ret
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl %esp, %ebp
#Начиная отсюда нужно написать обьяснения как #работают задачки
#Выполнить сравнение двух чисел a и b: если a>b, то #a=a-b; если a=b, то a=2*a; если a<b, то b=b-a.
movl $20, %ecx
xorl %ebx, %ebx
h:
movl %ecx, %eax
imul %eax
addl %eax, %ebx
movl %ebx, a
loop h
call _xxx
#Выполнить сравнение двух чисел a и b: если a>b, то #a=a-b; если a=b, то a=2*a; если a<b, то b=b-a.
movl a, %eax
movl b, %ebx
cmpl %ebx, %eax
jg v
je x
jl z
v:subl %ebx, %eax
movl %eax, a
jmp s1
x:movl a, %eax
imul $2, %eax
movl %eax, a
jmp s1
z:mo
vl b,%ebx
movl a, %eax
subl %eax, %ebx
movl %ebx, b
jmp s1
s1:
call _xxx
#Создать функцию y(x)=x3-2*x+1, которая через #регистр eax получает аргумент и возвращает #результат.
movl a, %eax
call _func
movl %eax, a
call _xxx
#Создать функцию y(x,a,b,c)=a*x2+b*x-c, которая #через стек получает аргументы x, a, b, c и возвращает #результат
pushl x
pushl a
pushl b
pushl c
call _func1
movl %eax, c
addl $16,%esp
call _xxx
#Вычислить N! (N=30) двумя способами: используя цикл, #рекурсию.
movl $1, %eax
movl $1, %ebx
x3:
cmpl 30, %eax
jle x1
jg x2
x1:imul %eax, %ebx
incl %ebx
jmp x3
x2:m
ovl %eax, d
call _xxx
|
|
|

22.12.2008, 02:15
|
|
Познающий
Регистрация: 13.02.2007
Сообщений: 41
Провел на форуме: 137010
Репутация:
26
|
|
парни, есть проблема с открытием файла (tasm)
1. делаю файл hook, кладу в папку где лежит мой скомпилированный .com
2. в самой проге основной код такой:
Код:
mov ax, 3D02h ;открыть файл на чтение и запись
mov dx, offset fn
int 21h
...
fn db "hook",'0' ;имя файла
после этого в ax оказывается цифра 05h что, судя по зубкову, означает - доступ запрещен.
Почему??
|
|
|

22.12.2008, 02:31
|
|
Участник форума
Регистрация: 03.01.2008
Сообщений: 156
Провел на форуме: 414311
Репутация:
110
|
|
2Kaas
бугога ))) имя файла у тебя hook0[много всякого мусора]x00
Делай так :
Хотя странно, должен был вернуть 02h :/
Открой отладчик (codeview хотя бы) и посмотри, что у тебя в регистрах на каждом шаге.
Да ещё, когда ты запускал прогу свою, был ли открыт гденибудь ещё этот файл ... пока всё, что пришло в мою больную голову :\
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|