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

14.06.2008, 22:28
|
|
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме: 2187381
Репутация:
518
|
|
lea dx,mesag
mesag db 'OMG$',0
|
|
|

14.06.2008, 23:22
|
|
Постоянный
Регистрация: 05.01.2007
Сообщений: 508
Провел на форуме: 2360904
Репутация:
1393
|
|
Сообщение от Delimiter
lea dx,mesag
mesag db 'OMG$',0
или mov dx, offset mesag 
|
|
|

14.06.2008, 23:34
|
|
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме: 2187381
Репутация:
518
|
|
2 zo1b
угу! 8)))
|
|
|

15.06.2008, 01:23
|
|
Members of Antichat - Level 5
Регистрация: 23.08.2007
Сообщений: 417
Провел на форуме: 14324684
Репутация:
3908
|
|
Объясните мне плиз, что делает этот кусок кода посредине программы на паскале)
Чем подробнее, тем лучше, желательно каждую строчку)
PHP код:
Procedure Rotate(D:integer; Var X,Y:integer);
Var C,S:integer;
X1,Y1:longint;
begin
if ((X=0) and (Y=0)) or (D=0) then exit;
asm
mov AX,D
mov BX,360
xor CX,CX
@m1:sub AX,BX
cmp AX,CX
jnl @m1
@m2:add AX,BX
cmp AX,CX
jl @m2
mov BX,90
@m3:cmp AX,BX
jl @m4
sub AX,BX
inc CX
jmp @m3
@m4:sub BX,AX
shl AX,1
shl BX,1
Test CL,1
jz @m5
xchg AX,BX
@m5:mov SI,AX
mov AX,word PTR TableCos[SI]
mov C,AX
mov AX,word PTR TableCos[BX]
mov S,AX
cmp CL,1
jl @ex
jg @m6
@m7:neg C
jmp @ex
@m6:neg S
cmp CL,3
jl @m7
@ex:end;
X1:=longint(X);
Y1:=longint(Y);
X:=(X1*C-Y1*S) shr 14;
Y:=(X1*S+Y1*C) shr 14;
end;
|
|
|

15.06.2008, 01:30
|
|
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме: 2187381
Репутация:
518
|
|
табличное определение синуса и косинуса, делается вместо вычисления ,для уменьшения количества тактов процессора для данных процедур....
угол дается в градусах... вычитая по 360 нормируем до индекса
Код:
mov AX,D ;угол в D
mov BX,360
xor CX,CX ;обнуление
@m1:sub AX,BX
cmp AX,CX
jnl @m1
в итоге в ax значение не превышающее 360 градусов
операция не искажающая значения синуса и косинуса
далее начинаю вычитать квадранты, видимо таблица содержит не все 360 градусов
Код:
mov BX,90
@m3:cmp AX,BX
jl @m4
sub AX,BX
inc CX
jmp @m3
в cx счетчик квадрантов
... далее получение индексов для таблицы и взятие значений.
... само взятие и запоминание в переменных
Код:
mov AX,word PTR TableCos[SI]
mov C,AX
mov AX,word PTR TableCos[BX]
mov S,AX
Последний раз редактировалось Delimiter; 15.06.2008 в 01:55..
|
|
|

15.06.2008, 01:55
|
|
Members of Antichat - Level 5
Регистрация: 23.08.2007
Сообщений: 417
Провел на форуме: 14324684
Репутация:
3908
|
|
поясни пожалуйста строчку "вычитая по 360 нормируем до индекса", и что такое квадранты?
|
|
|

15.06.2008, 01:58
|
|
Banned
Регистрация: 08.04.2005
Сообщений: 446
Провел на форуме: 2187381
Репутация:
518
|
|
ну к примеру 760 градусов .... вначале вычитаю
400=760-360
операция не изменяет значение синусов и косинусов
-40=400-360
а вот угол -40 уже устраивает нас
квадрант - это область получающаяся при делении плоскости прямыми X и Y.... их 4-ре штуки
в угловом эквиваленте квадрант = 90 градусов
... суть сводится к тому что таблица одна .... а используется так же и для получения синуов на правилах тригонометрии
/// если предстоит защита то посмотри матрицу поворота в инете полно описаний
Последний раз редактировалось Delimiter; 15.06.2008 в 02:11..
|
|
|

15.06.2008, 19:26
|
|
Постоянный
Регистрация: 04.12.2007
Сообщений: 424
Провел на форуме: 2364957
Репутация:
479
|
|
mov dx,stroka+100h ;fasm не знает что такое lea/offset
xor bx,bx
mov ah,09h
int 21h ;нормально выводит строку
xor ax,ax
mov cx,5 ;первые 5 букв
mov si,stroka+100h
@cy:lodsb ;буква из stroka -> аккумулятор
mov [string+100h],al ; тут он пытается записать букву из stroka в string
loop @cy
xor ax,ax
mov dx,string+100h
mov ah,09h
int 21h ;тут он выводит бред
int 20h
stroka db 'aldaskjfahslkdjahlsjdh',13,10,'$',0
string db 80 DUP(?)
Программа должна вывести сначал переменную stroka, она ее выводит, а затем должна перегнать ее в переменную string и вывести, но похоже прогша ее тупо не записывает в string.
Возможно ли через stosb?
//fasm
получилось так:
mov cx,5
mov si,stroka+100h
mov di,string+100h
@cy:lodsb
stosb
loop @cy
...................
string db '0000000000000000000000',13,10,'$',0
вопрос: как правильно будет через string dup (?)
Последний раз редактировалось ntldr; 15.06.2008 в 19:36..
|
|
|

15.06.2008, 19:43
|
|
Участник форума
Регистрация: 26.12.2004
Сообщений: 188
Провел на форуме: 1495357
Репутация:
107
|
|
исп. movsb
|
|
|

15.06.2008, 23:40
|
|
Постоянный
Регистрация: 30.04.2008
Сообщений: 323
Провел на форуме: 379101
Репутация:
136
|
|
Очевидно, что на stroka надо передать смещение в
из руководства по fasm
Код:
lea dx,[bx+si+1] ; load effective address to dx
ntldr в официальном мануале все функции описаны, очевидно
проблема в не понимании именно синтаксиса фасма.
руководство на русском
http://www.wasm.ru/baixado.php?mode=doc&id=133
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|