На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Перед отправкой сообщения внимательно прочтите правила раздела!!!
1. Запрещается обсуждать написание вирусов, троянов и других вредоносных программ!
2. Помните, что у нас есть FAQ раздела Assembler и Полезные ссылки. Посмотрите, возможно, там уже имеется решение вашего вопроса.

3. Настоятельно рекомендуем обратить особое внимание на правила форума, которые нарушаются чаще всего:
  3.1. Заголовок темы должен кратко отражать её суть. Темы с заголовками типа "Срочно помогите!" или "Ассемблер" будут отправляться в Корзину для мусора.
  3.2. Исходники программ обязательно выделяйте тегами [code]...[/code] (одиночные инструкции можно не выделять).
  3.3. Нежелательно поднимать старые темы (не обновлявшиеся более года) без веской на то причины.

Не забывайте также про главные Правила форума!

Добро пожаловать и приятного вам общения!!! ;)
 
Модераторы: Jin X, Qraizer
  
> И ещё один
    Работает ли SHL с ячеёками памяти ???
      Естественно
        Я тут ознакомился для чего тебе этого:
        http://www.sources.ru/NonCGI/Forum9/HTML/000124.html
        Это сильно! :)))))))
        Процессоры i486 и выше при операциях сдвига (sal, shl, rol и т.д.) используют только первые пять бит счетчика (то есть до 31).
        Так, как ты делаешь, тебе как минимум нужны 128 разрядные регистры или операнды, чтоб битик, который ты двигаешь, остался в пределах видимости :)))
        Так что и здесь лучше использовать команды сопроцессора
        f2xm1 (2^x - 1)
          Ну совсем ваыручиллл =)
            Ну совсем ваыручиллл =)
              Не торопись, я не до конца объяснил.
              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]
              Надеюсь, ничего не напутал! :)
                Мало того, что с кодом облажался :(
                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
                  Брьььь а все ли процессоры у которых математический сопроцессор есть енто поддерживают ?
                    Операции у всех практически одинаковые (это стандарт IEE), но состав операндов и мнемоника могут различаться
                      Если хочешь, чтоб совсем было хорошо (хотя сейчас это дело ненужное) и если ты эстет, проверь наличие сопроцессора.
                      Наиболее корректный и простой способ:
                      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 есть
                        Поторопился отослать, потом обратил внимание, что адресацию сделал через 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
                          2 rivitna: Пять первых бит счётчика использует уже 80186
                            2 7in:
                            Согласен!
                            Спасибо за поправку!
                            Даже использовал этот факт, чтобы отличать 8086 от 80186.
                            Если что еще заметишь, не стесняйся - не безгрешен.
                            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                            0 пользователей:


                            Рейтинг@Mail.ru
                            [ Script execution time: 0,0297 ]   [ 15 queries used ]   [ Generated: 27.04.24, 20:37 GMT ]