Занесение в FPU-стек регистров общего назначения - Assembler

Узнай цену своей работы

Формулировка задачи:

Еще раз всем привет! Возник маленький вопрос по поводу использования регистров общего назначения в FPU. Я имею опыт работы с паскалем (хоть и не очень большой) и от того переменные просто не выношу.. Вопрос нужно ли создавать отдельные переменные для занесения в стек чисел, или можно сделать это через регистры? (AX,BX,CX и тд). И еще насчет флагов: как я понимаю, в Turbo Debugger отображаются не все флаги (по крайней мере у Зубкова их количество больше (если, конечно, я опять что-нибудь не напутал)). Кажется, там нет С0, С1, С2 и С3 (и мб не только их). Как получить значения этих флагов? (Я знаю 2 способа : перевести их в флаги CPU или просто изучить работу команд Jcc). Если есть что-то более доступное и простое в использовании, то мне очень интересно)) А еще, слава кодерам, уделяющим мне своё время!!!!!))

Решение задачи: «Занесение в FPU-стек регистров общего назначения»

textual
Листинг программы
                mov     ax,100
                push    ax
                mov     bp,sp
                fild    word ptr [bp]
                pop     ax
 
                ; Несколько значений:
                mov     bp,sp
                mov     ax,100
                push    ax
                fild    word ptr [bp-2]
                mov     word ptr [bp-2],200
                fild    word ptr [bp-2]
                mov     word ptr [bp-2],300
                fild    word ptr [bp-2]
                pop     ax
 
                ; С сохранением bp:
                push    bp
                mov     bp,sp
                mov     ax,100
                push    ax
                fild    word ptr [bp-2]
                mov     word ptr [bp-2],200
                fild    word ptr [bp-2]
                mov     word ptr [bp-2],300
                fild    word ptr [bp-2]
                leave                   ; mov sp,bp + pop bp
 
                ; Вариант не самый безопасный, но тоже рабочий:
                cli                     ; запрещаем прерывания, иначе наши числа затрутся при вызове прерывания, при пошаговой отладке тоже (cli тут не поможет)
                mov     bp,sp
                mov     word ptr [bp-2],100
                fild    word ptr [bp-2]
                mov     word ptr [bp-2],200
                fild    word ptr [bp-2]
                sti

Объяснение кода листинга программы

Код выполняет следующие действия:

  1. Переменная ax содержит число 100.
  2. В стек FPU заносится слово ax.
  3. Переменная bp содержит адрес вершины стека FPU.
  4. В стек FPU заносится слово bp-2.
  5. Содержимое слова bp-2 меняется на 200.
  6. В стек FPU заносится слово bp-2.
  7. Содержимое слова bp-2 меняется на 300.
  8. В стек FPU заносится слово bp-2.
  9. Переменная ax содержит число 100.
  10. Стек FPU освобождается.
  11. Переменная bp содержит адрес вершины стека FPU.
  12. Содержимое слова bp-2 меняется на 200.
  13. Содержимое слова bp-2 меняется на 300.
  14. Переменная ax содержит число 100.
  15. Стек FPU освобождается.
  16. Запрещаются прерывания.
  17. Переменная bp содержит адрес вершины стека FPU.
  18. В стек FPU заносится слово bp-2.
  19. Содержимое слова bp-2 меняется на 200.
  20. В стек FPU заносится слово bp-2.
  21. Содержимое слова bp-2 меняется на 300.
  22. Разрешаются прерывания.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы