ХАНДЫФАР

Эти функции выполняют округление вещественного числа, находящегося на вершине стека математического сопроцессора (ST(0)), в соответствии с указанным режимом округления:

RoundFloor: Округление вниз (к меньшему целому).
RoundCeil: Округление вверх (к большему целому).
RoundNearest: Округление к ближайшему целому.

Параметры:

  • ST(0): Вещественное число на вершине стека математического сопроцессора.

Возвращаемое значение:

  • Результат округления сохраняется в ST(0).

Состояние флагов:

  • Функция не изменяет состояние флагов.

Особенности:

  • Функции используют команды математического сопроцессора для выполнения округления.

  • RoundFloor использует команду FRNDINT с режимом округления вниз (устанавливается через FSTCW и FLDCW).

  • RoundCeil использует команду FRNDINT с режимом округления вверх (устанавливается через FSTCW и FLDCW).

  • RoundNearest использует команду FRNDINT с режимом округления к ближайшему целому (режим по умолчанию).

  • Функции не изменяют значения регистров, кроме ST(0).

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fmtstr _db "Результат: %d\0"
  6. ____number1 dq 45.3
  7. ____number2 dq 213.3
  8. ____result _dw ?
  9. data ends
  10. code segment public
  11. ____assume _ds:data, cs:code
  12. ____include Handyfar.inc
  13. ____main proc
  14. ________call____SetDataSegment
  15. ________fld_____qword ptr[number1]
  16. ________fadd____qword ptr[number2]
  17. ________call____RoundFloor
  18. ________fistp___word ptr[result]
  19. ________push____result
  20. ________lea_____ax, ds:[fmtstr]
  21. ________call____PrintFormatString
  22. ________add_____sp, 2
  23. ________xor_____al, al
  24. ________call____ExitProcess
  25. ____main endp
  26. code ends
  27. end main
Эти функции выполняют округление вещественного числа, находящегося на вершине стека математического сопроцессора (ST(0)), в соответствии с указанным режимом округления:

RoundFloor: __Округление вниз (к меньшему целому).
RoundCeil: ___Округление вверх (к большему целому).
RoundNearest: Округление к ближайшему целому.

Параметры:

  • ST(0): Вещественное число на вершине стека математического сопроцессора.

Возвращаемое значение:

  • Результат округления сохраняется в ST(0).

Состояние флагов:

  • Функция не изменяет состояние флагов.

Особенности:

  • Функции используют команды математического сопроцессора для выполнения округления.

  • RoundFloor использует команду FRNDINT с режимом округления вниз (устанавливается через FSTCW и FLDCW).

  • RoundCeil использует команду FRNDINT с режимом округления вверх (устанавливается через FSTCW и FLDCW).

  • RoundNearest использует команду FRNDINT с режимом округления к ближайшему целому (режим по умолчанию).

  • Функции не изменяют значения регистров, кроме ST(0).

  1. title Автор: Довгополов Евгений Сергеевич
  2. .model small
  3. .stack 100h
  4. data segment public
  5. ____fmtstr _db "Результат: %d\0"
  6. ____number1 dq 45.3
  7. ____number2 dq 213.3
  8. ____result _dw ?
  9. data ends
  10. code segment public ________________; Начало сегмента кода
  11. ____assume _ds:data, cs:code
  12. ____include Handyfar.inc____________; Подключаем файл с функциями
  13. ____main proc ______________________; Начало процедуры main
  14. ________call____SetDataSegment______; Вызываем процедуру SetDataSegment
  15. ________fld_____qword ptr[number1]__; Загружаем на вершину стека мат. сопроцессора number1
  16. ________fadd____qword ptr[number2]__; Выполняем сложение переменной number1(st(0)) и number2
  17. ________call____RoundFloor__________; Вызываем процедуру RoundFloor(st(0))
  18. ________fistp___word ptr[result]____; Сохраняем значение в переменной result и выталкиваем из стека
  19. ________push____result______________; 2-й: Сохраняем значение переменной result в стеке
  20. ________lea_____ax, ds:[fmtstr]_____; 1-й: Загружаем адрес строки формата fmtstr в регистр ds:ax
  21. ________call____PrintFormatString___; Вызываем процедуру PrintFormatString(ax:fmtstr, result)
  22. ________add_____sp, 2_______________; Выравниваем стек
  23. ________xor_____al, al______________; Обнуляем регистр al
  24. ________call____ExitProcess_________; Вызываем процедуру ExitProcess
  25. ____main endp ______________________; Конец процедуры main
  26. code ends __________________________; Конец сегмента кода
  27. end main ___________________________; Конец файла. Точкой входа указывается процедура main
Made on
Tilda