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

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

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

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

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

textual
Листинг программы
  1.                 mov     ax,100
  2.                 push    ax
  3.                 mov     bp,sp
  4.                 fild    word ptr [bp]
  5.                 pop     ax
  6.  
  7.                 ; Несколько значений:
  8.                 mov     bp,sp
  9.                 mov     ax,100
  10.                 push    ax
  11.                 fild    word ptr [bp-2]
  12.                 mov     word ptr [bp-2],200
  13.                 fild    word ptr [bp-2]
  14.                 mov     word ptr [bp-2],300
  15.                 fild    word ptr [bp-2]
  16.                 pop     ax
  17.  
  18.                 ; С сохранением bp:
  19.                 push    bp
  20.                 mov     bp,sp
  21.                 mov     ax,100
  22.                 push    ax
  23.                 fild    word ptr [bp-2]
  24.                 mov     word ptr [bp-2],200
  25.                 fild    word ptr [bp-2]
  26.                 mov     word ptr [bp-2],300
  27.                 fild    word ptr [bp-2]
  28.                 leave                   ; mov sp,bp + pop bp
  29.  
  30.                 ; Вариант не самый безопасный, но тоже рабочий:
  31.                 cli                     ; запрещаем прерывания, иначе наши числа затрутся при вызове прерывания, при пошаговой отладке тоже (cli тут не поможет)
  32.                 mov     bp,sp
  33.                 mov     word ptr [bp-2],100
  34.                 fild    word ptr [bp-2]
  35.                 mov     word ptr [bp-2],200
  36.                 fild    word ptr [bp-2]
  37.                 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы