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

11.12.2008, 09:59
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
С нами:
10097606
Репутация:
3349
|
|
также как и с обычными числами, но предварительно переведя его из строки в число.
Алгоритм перевода примерно такой:
1) получаешь длинну строки
2) перебираешь поочереди каждый символ.
3) отнимаешь от символа 48 и получаешь какбыла непосредственно значение.
4) умножаешь число полученное на предудущем этапе на 10 и к нему прибавляешь то, что получилось от символа.
5) повторяешь заного всё пока недостигнут конец строки
|
|
|

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

19.12.2008, 15:18
|
|
Познающий
Регистрация: 20.01.2008
Сообщений: 65
С нами:
9634990
Репутация:
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
С нами:
10125997
Репутация:
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
С нами:
9660439
Репутация:
110
|
|
2Kaas
бугога ))) имя файла у тебя hook0[много всякого мусора]x00
Делай так :
Хотя странно, должен был вернуть 02h :/
Открой отладчик (codeview хотя бы) и посмотри, что у тебя в регистрах на каждом шаге.
Да ещё, когда ты запускал прогу свою, был ли открыт гденибудь ещё этот файл ... пока всё, что пришло в мою больную голову :\
|
|
|

07.01.2009, 22:09
|
|
Участник форума
Регистрация: 27.03.2008
Сообщений: 288
С нами:
9538880
Репутация:
83
|
|
народ, у меня проблема, причём очень странная:
запуская ml.exe имя файла /AT
я получаю через 3-5 секунд ответ: "Программа не умещается в памяти"
вот код программы
Код:
CSEG segment
org 100h
Begin:
mov ah,9
mov dx,offset Message
int 21h
int 20h
Message db 'Hello, world!$'
CSEG ends
end Begin
Помогите пожалуйста разбраться с этой х***й
ноут Asus EEE PC 9
|
|
|

08.01.2009, 18:21
|
|
Флудер
Регистрация: 18.01.2005
Сообщений: 2,298
С нами:
11215046
Репутация:
1844
|
|
Сообщение от ronald
народ, у меня проблема, причём очень странная:
запуская ml.exe имя файла /AT
я получаю через 3-5 секунд ответ: "Программа не умещается в памяти"
вот код программы
Код:
CSEG segment
org 100h
Begin:
mov ah,9
mov dx,offset Message
int 21h
int 20h
Message db 'Hello, world!$'
CSEG ends
end Begin
Помогите пожалуйста разбраться с этой х***й
ноут Asus EEE PC 9
Ссори за нескромный вопрос.. Ты ком файл пытаешься в Висте запустить? 
|
|
|

09.01.2009, 17:05
|
|
Познающий
Регистрация: 07.09.2005
Сообщений: 30
С нами:
10880557
Репутация:
2
|
|
Я неособо разбираюсь в masm и не могу скомпилировать данный код, чтоб был exe. Кто может помочь ? Может что дописать нужно. Алгоритм: md5 hashing algo.
Код:
.686
.model flat,stdcall
option casemap:none
.data?
MD5HashBuf db 64 dup(?)
MD5Digest dd 4 dup(?)
MD5Len dd ?
MD5Index dd ?
.code
MD5FF macro dwA, dwB, dwC, dwD, locX, rolS, constAC
mov edi,dwC
xor edi,dwD
and edi,dwB
xor edi,dwD
add dwA,[locX]
lea dwA,[edi+dwA+constAC]
rol dwA,rolS
add dwA,dwB
endm
MD5GG macro dwA, dwB, dwC, dwD, locX, rolS, constAC
mov edi,dwC
xor edi,dwB
and edi,dwD
xor edi,dwC
add dwA,[locX]
lea dwA,[edi+dwA+constAC]
rol dwA,rolS
add dwA,dwB
endm
MD5HH macro dwA, dwB, dwC, dwD, locX, rolS, constAC
mov edi,dwC
xor edi,dwD
xor edi,dwB
add dwA,[locX]
lea dwA,[dwA+edi+constAC]
rol dwA,rolS
add dwA,dwB
endm
MD5II macro dwA, dwB, dwC, dwD, locX, rolS, constAC
mov edi,dwD
xor edi,-1
or edi,dwB
xor edi,dwC
add dwA,[locX]
lea dwA,[edi+dwA+constAC]
rol dwA,rolS
add dwA,dwB
endm
align dword
MD5Transform proc
pushad
mov esi,offset MD5Digest
mov edi,offset MD5HashBuf
mov eax,[esi+0*4]
mov ebx,[esi+1*4]
mov ecx,[esi+2*4]
mov ebp,edi
mov edx,[esi+3*4]
;================================================= =============
MD5FF eax, ebx, ecx, edx, dword ptr [ebp+ 0*4], 7, 0D76AA478H
MD5FF edx, eax, ebx, ecx, dword ptr [ebp+ 1*4], 12, 0E8C7B756H
MD5FF ecx, edx, eax, ebx, dword ptr [ebp+ 2*4], 17, 0242070DBH
MD5FF ebx, ecx, edx, eax, dword ptr [ebp+ 3*4], 22, 0C1BDCEEEH
MD5FF eax, ebx, ecx, edx, dword ptr [ebp+ 4*4], 7, 0F57C0FAFH
MD5FF edx, eax, ebx, ecx, dword ptr [ebp+ 5*4], 12, 04787C62AH
MD5FF ecx, edx, eax, ebx, dword ptr [ebp+ 6*4], 17, 0A8304613H
MD5FF ebx, ecx, edx, eax, dword ptr [ebp+ 7*4], 22, 0FD469501H
MD5FF eax, ebx, ecx, edx, dword ptr [ebp+ 8*4], 7, 0698098D8H
MD5FF edx, eax, ebx, ecx, dword ptr [ebp+ 9*4], 12, 08B44F7AFH
MD5FF ecx, edx, eax, ebx, dword ptr [ebp+10*4], 17, 0FFFF5BB1H
MD5FF ebx, ecx, edx, eax, dword ptr [ebp+11*4], 22, 0895CD7BEH
MD5FF eax, ebx, ecx, edx, dword ptr [ebp+12*4], 7, 06B901122H
MD5FF edx, eax, ebx, ecx, dword ptr [ebp+13*4], 12, 0FD987193H
MD5FF ecx, edx, eax, ebx, dword ptr [ebp+14*4], 17, 0A679438EH
MD5FF ebx, ecx, edx, eax, dword ptr [ebp+15*4], 22, 049B40821H
;================================================= =============
MD5GG eax, ebx, ecx, edx, dword ptr [ebp+ 1*4], 5, 0F61E2562H
MD5GG edx, eax, ebx, ecx, dword ptr [ebp+ 6*4], 9, 0C040B340H
MD5GG ecx, edx, eax, ebx, dword ptr [ebp+11*4], 14, 0265E5A51H
MD5GG ebx, ecx, edx, eax, dword ptr [ebp+ 0*4], 20, 0E9B6C7AAH
MD5GG eax, ebx, ecx, edx, dword ptr [ebp+ 5*4], 5, 0D62F105DH
MD5GG edx, eax, ebx, ecx, dword ptr [ebp+10*4], 9, 002441453H
MD5GG ecx, edx, eax, ebx, dword ptr [ebp+15*4], 14, 0D8A1E681H
MD5GG ebx, ecx, edx, eax, dword ptr [ebp+ 4*4], 20, 0E7D3FBC8H
MD5GG eax, ebx, ecx, edx, dword ptr [ebp+ 9*4], 5, 021E1CDE6H
MD5GG edx, eax, ebx, ecx, dword ptr [ebp+14*4], 9, 0C33707D6H
MD5GG ecx, edx, eax, ebx, dword ptr [ebp+ 3*4], 14, 0F4D50D87H
MD5GG ebx, ecx, edx, eax, dword ptr [ebp+ 8*4], 20, 0455A14EDH
MD5GG eax, ebx, ecx, edx, dword ptr [ebp+13*4], 5, 0A9E3E905H
MD5GG edx, eax, ebx, ecx, dword ptr [ebp+ 2*4], 9, 0FCEFA3F8H
MD5GG ecx, edx, eax, ebx, dword ptr [ebp+ 7*4], 14, 0676F02D9H
MD5GG ebx, ecx, edx, eax, dword ptr [ebp+12*4], 20, 08D2A4C8AH
;================================================= =============
MD5HH eax, ebx, ecx, edx, dword ptr [ebp+ 5*4], 4, 0FFFA3942H
MD5HH edx, eax, ebx, ecx, dword ptr [ebp+ 8*4], 11, 08771F681H
MD5HH ecx, edx, eax, ebx, dword ptr [ebp+11*4], 16, 06D9D6122H
MD5HH ebx, ecx, edx, eax, dword ptr [ebp+14*4], 23, 0FDE5380CH
MD5HH eax, ebx, ecx, edx, dword ptr [ebp+ 1*4], 4, 0A4BEEA44H
MD5HH edx, eax, ebx, ecx, dword ptr [ebp+ 4*4], 11, 04BDECFA9H
MD5HH ecx, edx, eax, ebx, dword ptr [ebp+ 7*4], 16, 0F6BB4B60H
MD5HH ebx, ecx, edx, eax, dword ptr [ebp+10*4], 23, 0BEBFBC70H
MD5HH eax, ebx, ecx, edx, dword ptr [ebp+13*4], 4, 0289B7EC6H
MD5HH edx, eax, ebx, ecx, dword ptr [ebp+ 0*4], 11, 0EAA127FAH
MD5HH ecx, edx, eax, ebx, dword ptr [ebp+ 3*4], 16, 0D4EF3085H
MD5HH ebx, ecx, edx, eax, dword ptr [ebp+ 6*4], 23, 004881D05H
MD5HH eax, ebx, ecx, edx, dword ptr [ebp+ 9*4], 4, 0D9D4D039H
MD5HH edx, eax, ebx, ecx, dword ptr [ebp+12*4], 11, 0E6DB99E5H
MD5HH ecx, edx, eax, ebx, dword ptr [ebp+15*4], 16, 01FA27CF8H
MD5HH ebx, ecx, edx, eax, dword ptr [ebp+ 2*4], 23, 0C4AC5665H
;================================================= =============
MD5II eax, ebx, ecx, edx, dword ptr [ebp+ 0*4], 6, 0F4292244H
MD5II edx, eax, ebx, ecx, dword ptr [ebp+ 7*4], 10, 0432AFF97H
MD5II ecx, edx, eax, ebx, dword ptr [ebp+14*4], 15, 0AB9423A7H
MD5II ebx, ecx, edx, eax, dword ptr [ebp+ 5*4], 21, 0FC93A039H
MD5II eax, ebx, ecx, edx, dword ptr [ebp+12*4], 6, 0655B59C3H
MD5II edx, eax, ebx, ecx, dword ptr [ebp+ 3*4], 10, 08F0CCC92H
MD5II ecx, edx, eax, ebx, dword ptr [ebp+10*4], 15, 0FFEFF47DH
MD5II ebx, ecx, edx, eax, dword ptr [ebp+ 1*4], 21, 085845DD1H
MD5II eax, ebx, ecx, edx, dword ptr [ebp+ 8*4], 6, 06FA87E4FH
MD5II edx, eax, ebx, ecx, dword ptr [ebp+15*4], 10, 0FE2CE6E0H
MD5II ecx, edx, eax, ebx, dword ptr [ebp+ 6*4], 15, 0A3014314H
MD5II ebx, ecx, edx, eax, dword ptr [ebp+13*4], 21, 04E0811A1H
MD5II eax, ebx, ecx, edx, dword ptr [ebp+ 4*4], 6, 0F7537E82H
MD5II edx, eax, ebx, ecx, dword ptr [ebp+11*4], 10, 0BD3AF235H
MD5II ecx, edx, eax, ebx, dword ptr [ebp+ 2*4], 15, 02AD7D2BBH
MD5II ebx, ecx, edx, eax, dword ptr [ebp+ 9*4], 21, 0EB86D391H
;================================================= =============
add [esi+0*4],eax ; update digest
add [esi+1*4],ebx
add [esi+2*4],ecx
add [esi+3*4],edx
popad
retn
MD5Transform endp
MD5BURN macro
xor eax,eax
mov MD5Index,eax
mov edi,Offset MD5HashBuf
mov ecx,(sizeof MD5HashBuf)/4
rep stosd
endm
align dword
MD5Init proc uses edi
xor eax, eax
mov MD5Len,eax
MD5BURN
mov eax,offset MD5Digest
mov dword ptr [eax+0*4],067452301h
mov dword ptr [eax+1*4],0EFCDAB89h
mov dword ptr [eax+2*4],098BADCFEh
mov dword ptr [eax+3*4],010325476h
ret
MD5Init endp
align dword
MD5Update proc uses esi edi ebx lpBuffer:dword, dwBufLen:dword
mov ebx,dwBufLen
mov esi,lpBuffer
add MD5Len,ebx
.while ebx
mov eax,MD5Index
mov ecx,64
sub ecx,eax
lea edi,[MD5HashBuf+eax]
.if ecx <= ebx
sub ebx,ecx
rep movsb
call MD5Transform
MD5BURN
.else
mov ecx,ebx
rep movsb
add MD5Index,ebx
.break
.endif
.endw
ret
MD5Update endp
align dword
MD5Final proc uses esi edi
mov ecx, MD5Index
mov byte ptr [MD5HashBuf+ecx],80h
.if ecx >= 56
call MD5Transform
MD5BURN
.endif
mov eax,MD5Len
xor edx,edx
shld edx,eax,3
shl eax,3
mov dword ptr [MD5HashBuf+56],eax
mov dword ptr [MD5HashBuf+60],edx
call MD5Transform
mov eax,offset MD5Digest
ret
MD5Final endp
end
|
|
|

15.01.2009, 18:39
|
|
Участник форума
Регистрация: 27.03.2008
Сообщений: 288
С нами:
9538880
Репутация:
83
|
|
Ссори за нескромный вопрос.. Ты ком файл пытаешься в Висте запустить?
Чур меня, чур! Нет конешно!
|
|
|
|
 |
|
Похожие темы
|
| Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
|
Вопросы для новичков! (faq)
|
PEPSICOLA |
С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby |
92 |
14.05.2010 17:59 |
|
ОС с нуля
|
z01b |
С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby |
36 |
03.07.2008 15:30 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|