Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.178.133] |
|
Сообщ.
#1
,
|
|
|
Работает ли SHL с ячеёками памяти ???
|
Сообщ.
#2
,
|
|
|
Естественно
|
Сообщ.
#3
,
|
|
|
Я тут ознакомился для чего тебе этого:
http://www.sources.ru/NonCGI/Forum9/HTML/000124.html Это сильно! )))))) Процессоры i486 и выше при операциях сдвига (sal, shl, rol и т.д.) используют только первые пять бит счетчика (то есть до 31). Так, как ты делаешь, тебе как минимум нужны 128 разрядные регистры или операнды, чтоб битик, который ты двигаешь, остался в пределах видимости )) Так что и здесь лучше использовать команды сопроцессора f2xm1 (2^x - 1) |
Сообщ.
#4
,
|
|
|
Ну совсем ваыручиллл =)
|
Сообщ.
#5
,
|
|
|
Ну совсем ваыручиллл =)
|
Сообщ.
#6
,
|
|
|
Не торопись, я не до конца объяснил.
f2xm1 - хитрая команда, -1 < x < 1 Вычислять надо по формуле y^x = 2 ^ (x * log2(y)) Пусть x, y - числа типа integer, z - типа extended, тогда fild [y] fyl2x fild [x] fmul st,st(1) f2xm1 fld1 fadd st,st(1) fst [z] Надеюсь, ничего не напутал! |
Сообщ.
#7
,
|
|
|
Мало того, что с кодом облажался
fild x fild y fyl2x f2xm1 fld1 fadd st,st(1) fst z Да и толку нет от этого кода! На промежуточном этапе число выходит за диапазон Можно втупую сделать: y := 2; x := 100; asm fild y mov cx,x sumloop: fadd sp,sp(0) loop sumloop fst z end |
Сообщ.
#8
,
|
|
|
Брьььь а все ли процессоры у которых математический сопроцессор есть енто поддерживают ?
|
Сообщ.
#9
,
|
|
|
Операции у всех практически одинаковые (это стандарт IEE), но состав операндов и мнемоника могут различаться
|
Сообщ.
#10
,
|
|
|
Если хочешь, чтоб совсем было хорошо (хотя сейчас это дело ненужное) и если ты эстет, проверь наличие сопроцессора.
Наиболее корректный и простой способ: FPU_Test PROC finit mov cx,0Ch @@WaitLoop1: loop @@WaitLoop1 mov ax,5A5Ah push ax fstcw WORD PTR [sp] mov cl,0FFh @@WaitLoop2: loop @@WaitLoop2 pop ax and ax,1F3Fh cmp ax,33Fh ret FPU_Test ENDP Если в результате ZF=1, как минимум 8087 есть |
Сообщ.
#11
,
|
|
|
Поторопился отослать, потом обратил внимание, что адресацию сделал через SP, то есть в 16-размерном коде и на процессорах ниже 386 работать не будет.
Исправляюсь: FPU_Test PROC push bp mov bp,sp mov ax,5A5Ah push ax finit mov cx,0Ch @@WaitLoop1: loop @@WaitLoop1 fstcw WORD PTR [bp-2] mov cl,0FFh @@WaitLoop2: loop @@WaitLoop2 mov ax,[bp-2] and ax,1F3Fh cmp ax,33Fh mov sp,bp pop bp ret FPU_Test ENDP |
Сообщ.
#12
,
|
|
|
2 rivitna: Пять первых бит счётчика использует уже 80186
|
Сообщ.
#13
,
|
|
|
2 7in:
Согласен! Спасибо за поправку! Даже использовал этот факт, чтобы отличать 8086 от 80186. Если что еще заметишь, не стесняйся - не безгрешен. |