cmdhi and ah, 0f0h mov
; Выводим содержимое регистров сопроцессора
lea dx,cs:r87_msg @@out_str
; Выводим содержимое управляющего регистра
@@out_ch 'C','N','T','R','='
mov ax, cs:regs_87.cr call Print_word
; Выводим содержимое регистра состояния
@@out_ch ' ','S','T','A','T','E','='
mov ax, cs:regs_87.sr call Print_word
; Выводим содержимое регситра тегов
@@out_ch ' ','T','A','G','='
mov ax, cs:regs_87.tg call Print_word
; Выводим содержимое указателя адреса
@@out_ch ' ','C','M','D','A','D','R','='
mov ax, cs:regs_87. cmdhi and ah, 0f0h mov al, ah mov cl, 4 ror al, cl call Print_byte mov ax, cs:regs_87.cmdlo call Print_word @@out_ch ' '
; Выводим содержимое указателя операнда
@@out_ch ' ','O','P','R','A','D','R','='
mov ax, cs:regs_87.oprhi and ah, 0f0h mov al, ah mov cl, 4 ror al, cl call Print_byte mov ax, cs:regs_87.oprlo call Print_word
; Выводим содержимое непустых численных регистров
lea dx,cs:nr_msg @@out_str
mov cx, 8 ; количество регистров - 8 mov dx, 0 ; индекс текущего регистра mov bx, cs:regs_87.tg ; содержимое регистра тегов
; Цикл по стеку численных регистров
nreg_loop:
; Проверяем поле регистра тегов, соответствующее ; текущему обрабатываемому численному регистру
mov ax, bx and ax, 0c000h cmp ax, 0c000h
; Если это поле равно 11B, считаем, что данный ; численный регистр пуст, переходим к следующему
je continue
; Выводим на экран содержимое численного регистра
call Print_numreg
continue:
; Сдвигаем содержимое регистра тегов для ; обработки поля, соответствующего следующему ; регистру.
rol bx, 1 rol bx, 1 inc dx ; увеличиваем индекс текущего регистра
loop nreg_loop
lea dx,cs:hit_msg @@out_str
; Ожидаем нажатия на любую клавишу
mov ax,0 int 16h
; Восстанавливаем содержимое регистров
frstor cs:regs_87
pop bp pop ds pop dx pop cx pop bx pop ax popf
ret
trace_msg db 13,10,'>---- BREAK ----> At address ','$' hit_msg db 13,10,'Hit any key...','$' r87_msg db 13,10,13,10,'Coprocessor state:',13,10,'$' nr_msg db 13,10,'Numeric Registers:',13,10,'$'
Содержание Назад Вперед