- •Кафедра специализированных компьютерных систем методические указания
- •1 Задание для курсовой работы
- •Формулировка задания
- •Варианты заданий
- •Указания к выполнению курсовой работы
- •Структурное оформление программы
- •Содержание и оформление пояснительной записки
- •Общая информация
- •Оформление программных документов
- •Краткие сведения о математическом сопроцессоре
- •Программная модель сопроцессора
- •Форматы представления вещественных чисел
- •Система команд сопроцессора
- •Использование обратной польской записи
- •Преобразование выражений в формат полиз
- •Алгоритм вычисления выражений
- •Ввод вещественных чисел с клавиатуры и вывод на экран
- •Ввод и преобразование символьной информации
- •Вывод результата вычислений
- •Приложение б
- •Приложение в Программа преобразования вещественного числа короткого формата (32 бита) в символьное представление
Вывод результата вычислений
Еще одной задачей, которую необходимо решить в процессе выполнения курсовой работы, является преобразование вещественного значения в вид, пригодный для его визуализации на экране консоли. Следует заметить, что процедура преобразования вещественного числа из двоичного машинного представления в символьную форму не симметрична рассмотренной выше обратной операции. В приложении В приведена ассемблерная программа, выполняющая преобразование вещественного числа в коротком формате (32 бита) в символьное представление и вывод на экран консоли. Алгоритм преобразования понятен из комментариев, которыми снабжен текст приведенной программы.
Вывод на экран результата удобно организовать с использованием функции MS DOS 09h (int 21h).
ПЕРЕЧЕНЬ ССЫЛОК
Методические указания по оформлению курсовых проектов и работ /Сост.: Ю.Э. Паэранд, П.В. Охрименко – Алчевск: ДГМИ, 2002.-50с.
Юров В. Assembler: учебник.- СПБ.: «Питер», 2000.- 624 с.
Юров В. Assembler: специальный справочник.- СПБ.: «Питер», 2000.- 496 с.
Юров В. Assembler: практикум.- СПБ.: «Питер», 2001.- 400 с.
Приложение А
Листинг программы ислледования команд сравнения
вещественных данных
.586p
masm
model use16 small
.stack 100h
.data ;сегмент данных
;исходный массив
mas dd -2.0, 45.7, -9.4, 7.3, 60.3, -58.44, 890e7, -98746e3
mas_h_0 dd 8 dup (0) ;массив значений больше либо равных 0
i_mas_h_0 dd 0 ;текущий индекс в mas_h_0
mas_l_0 dd 8 dup (0) ;массив значений меньших 0
i_mas_l_0 dd 0 ;текущий индекс в mas_l_0
.code
main proc ;начало процедуры main
mov ax, @data
mov ds, ax
xor esi, esi
mov cx, 8 ;счетчик циклов
finit ;приведение сопроцессора в начальное состояние
fldz ;загрузка нуля в st(0)
cycl:
fcom mas[esi*4] ;сравнение нуля в st(0) с очередным элементом массива mas
fstsw ax ;сохранение swr в регистре ax
sahf ;запись swr->ax-> регистр флагов
jp error ;переход по "плохому" операнду в команде fcom
jc hi_0 ;переход, если mas[esi*4]>= 0 (mas[esi*4]>=st(0))
;пересылка операнда mas[esi*4] меньшего 0 в массив mas_l_0
mov eax, mas[esi*4]
mov edi, i_mas_l_0
mov mas_l_0[edi*4], eax
inc i_mas_l_0
jmp cycl_bst
hi_0:
;пересылка операнда mas[esi*4] большего или равного 0 в массив mas_h_0
mov eax, mas[esi*4]
mov edi, i_mas_h_0
mov mas_h_0[edi*4], eax
inc i_mas_h_0
cycl_bst:
inc si
loop cycl
error:
;здесь можно вывести сообщение об ошибке в задании операндов
exit:
mov ax, 4c00h
int 21h
main endp
end main
Приложение б
Листинг программы вычисления выражения a+b*c-d/(a+b)
.586
masm
model use16 small
.stack 100h
.data
a dd 1.5
b dd 2.5
c dd 3.2
d dd 0.8
result dd 0.0
.code
start:
mov ax,@data
mov ds,ax
finit ;приведение сопроцессора в начальное состояние
fld a ;загрузка а в st(0)
fld b ;загрузка b в st(0)(a в st(1))
fld c ;загрузка c в st(0)( b в st(1),a в st(2))
fmul ;b*c в st(0)( a в st(1))
fadd ;a+b*c в st(0)
fld d ;загрузка d в st(0) (a+b*c в st(1))
fld a ;загрузка а в st(0) (d в st(1), a+b*c в st(2))
fld b ;загрузка b в st(0) (a в st(1), d в st(2),
;a+b*c в st(3))
fadd ;a+b в st(0) (d в st(1), a+b*c в st(2))
fdiv ;d/(a+b) в st(0) (a+b*c в st(1))
fsub ;a+b*c-d/(a+b) в st(0)
fst result ;результат вычислений из st(0) в память
mov ax,4c00h
int 21h
end start
