Сопроцессор - Assembler
Формулировка задачи:
Имеется следующее задание:
В конечно итоге значение регистра bl будет равняться 1.
Подскажите почуму именно 1? Не могу до конца разобраться с некоторыми командами данного кода
xor bl,bl ;обнуляем bx finit ;инициализация сопроцессора fld1 ;ложим на стек 1 fld1 ;ложим на стек 1 fadd ;складываем 1+1 и на вершине стека будет 2 fsqrt ;на вершине стека теперь будет 2^1/2 fldpi ;ложим на стек число пи fcompp ;вещественное сравнение с двойным выталкиванием??? это как??? выталкивание==снять со стека????? fsstw ax ;эту команду не нашёл в интернете(проверял не описка) sahf ;STORE AH REGISTER INTO FLAGS до конца не понимаю как это работает ja al ;jump above - до конца не понимаю как это работает inc bl ;инкрементация регистра bl a1: inc bl ;инкрементация регистра bl
Всетаки в строке 9 должно быть
fstsw ax
Решение задачи: «Сопроцессор»
textual
Листинг программы
xor bl,bl ;обнуляем BL finit ;инициализация сопроцессора fld1 ;st(0)=1 fld1 ;st(0)=1 st(1)=1 fadd ;st(0)=st(0)+st(1)=2 st(1)=1 fsqrt ;st(0)=1,4142135623730950488016887242097 st(1)=1 fldpi ;st(0)=3,1415926535897932384626433832795 st(1)=1,4142135623730950488016887242097 st(2)=1 fcompp ;st(0)>st(1) ? содержимое st(0) и st(1) выталкивается теперь st(0)=1 fstsw ax ;содержимое регистра состояния в регистр АХ sahf ;содержимое из регистра AH в 8 младших битов регистра ЕFLAGS ja al ;если st(0)>st(1) переход на а1 (3,14 > 1,4142) inc bl ; <-- этого не происходит a1: inc bl
Объяснение кода листинга программы
Код выполняет следующие действия:
- Обнуляет BL.
- Инициализирует сопроцессор.
- Загружает 1 в ST(0).
- Загружает 1 в ST(1).
- Выполняет сложение ST(0) и ST(1), результат сохраняется в ST(0).
- Вычисляет квадратный корень из ST(0), результат сохраняется в ST(0).
- Загружает значение π в ST(0).
- Загружает 1,4142135623730950488016887242097 в ST(1).
- Выполняет сравнение ST(0) и ST(1), результат сохраняется в ST(0).
- Сохраняет содержимое регистра состояния в регистр AX.
- Сохраняет содержимое регистра AH в 8 младших битов регистра EFLAGS.
- Если ST(0) больше ST(1), то происходит переход на метку a1.
- Увеличивает BL на 1. Список действий:
- xor bl,bl
- finit
- fld1
- fld1
- fadd
- fsqrt
- fldpi
- fcompp
- fstsw ax
- sahf
- ja al
- inc bl
- a1: inc bl
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д