Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kurs_work (1).doc
Скачиваний:
6
Добавлен:
01.04.2025
Размер:
482 Кб
Скачать
☆
    1. Вывод результата вычислений

Еще одной задачей, которую необходимо решить в процессе выполнения курсовой работы, является преобразование вещественного значения в вид, пригодный для его визуализации на экране консоли. Следует заметить, что процедура преобразования вещественного числа из двоичного машинного представления в символьную форму не симметрична рассмотренной выше обратной операции. В приложении В приведена ассемблерная программа, выполняющая преобразование вещественного числа в коротком формате (32 бита) в символьное представление и вывод на экран консоли. Алгоритм преобразования понятен из комментариев, которыми снабжен текст приведенной программы.

Вывод на экран результата удобно организовать с использованием функции MS DOS 09h (int 21h).

ПЕРЕЧЕНЬ ССЫЛОК

    1. Методические указания по оформлению курсовых проектов и работ /Сост.: Ю.Э. Паэранд, П.В. Охрименко – Алчевск: ДГМИ, 2002.-50с.

    2. Юров В. Assembler: учебник.- СПБ.: «Питер», 2000.- 624 с.

    3. Юров В. Assembler: специальный справочник.- СПБ.: «Питер», 2000.- 496 с.

    4. Юров В. 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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]