Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прогр.docx
Скачиваний:
23
Добавлен:
21.12.2018
Размер:
2.58 Mб
Скачать

Блок-схема вывода на экран вещественного числа, которое хранится в регистре st(0) сопроцессора.

Деление с остатком, используя команды целочисленного деления

Пример 2: Выполнить деление положительных чисел В/С; 1000/53=18,46/53. (real3.asm)

.386

.model flat, stdcall

includelib import32.lib

extrn ExitProcess:PROC

extrn MessageBoxA:PROC

.data

Ttl db "Rezultat deleniya raven",0h

Msg db 8 dup(' '),0h

db 0h

B DW 1000

C DW 53

.code

start:

mov ax,B

mov bx,C

mov dx,00h

div bx

cmp dx,0000h

jz m3 ; если остатка нет, то переходим на метку m3.

mov cx,ax

mov ax,C

mov bx,dx ; сохраняем остаток в bx

mov si,10

mov edi,7

lp2: xor dx,dx

div si

xchg ax,dx

add al,'0'

Если остаток есть, то переводим делитель в десятичную систему исчисления и записываем в поле Msg с конца

mov byte ptr [Msg+edi],al

xchg ax,dx

dec di

or ax,ax

jne lp2

mov byte ptr [Msg+edi],'/'

dec di

mov si,10

mov ax,bx

lp3: xor dx,dx

div si

xchg ax,dx

add al,'0'

mov byte ptr [Msg+edi],al

xchg ax,dx

dec di

or ax,ax ; устанавливает флаг ZF в 1 если в АХ не 0

jne lp3

mov byte ptr [Msg+edi],','

dec di

mov si,10

mov ax,cx

lp4: xor dx,dx

div si

xchg ax,dx

add al,'0'

mov byte ptr [Msg+edi],al

xchg ax,dx

dec di

or ax,ax

jne lp4

jmp m4

m3:

mov si,10

mov edi,7

lp5: xor dx,dx

div si

xchg ax,dx

add al,'0'

mov byte ptr [Msg+edi],al

xchg ax,dx

dec di

or ax,ax

jne lp5

m4:

push 0h

push offset Ttl

push offset Msg

push 0h

call MessageBoxA

push 0h

call ExitProcess

end start

Блок-схема вывода результата при делении с остатком Трансцендентные операции fpu

1)

 Команда:

FSIN

 Назначение:

Синус

Вычисляет синус числа, находящегося в ST(0), и сохраняет результат в этом же регистре. Операнд считается заданным в радианах и не может быть больше 263 или меньше -263.

2)

 Команда:

FCOS

 Назначение:

Косинус

Вычисляет косинус числа, находящегося в ST(0), и сохраняет результат в этом же регистре. Операнд считается заданным в радианах и не может быть больше 263 или меньше -263.

3)

 Команда:

FSINCOS

 Назначение:

Синус и косинус

Вычисляет синус и косинус числа, находящегося в ST(0), помещает синус в ST(0) и затем помещает косинус в стек (так что синус оказывается в ST(1), косинус — в ST(0). Операнд считается заданным в радианах и не может быть больше 263 или меньше -263.

4)

 Команда:

FPTAN

 Назначение:

Тангенс

Вычисляет тангенс числа, находящегося в регистре ST(0), заменяет его на вычисленное значение и затем помещает 1 в стек, так что результат оказывается в ST(1), ST(0) содержит 1. Операнд считается заданным в радианах и не может быть больше 263 или меньше -263.

5)

 Команда:

FPATAN

 Назначение:

Арктангенс

Вычисляет арктангенс числа, получаемого при делении ST(1) на ST(0), сохраняет результат в ST(1) и выталкивает ST(0) из стека (помечает ST(0) как пустой).

Массивы

Существующие базовые типы данных:

  • Непосредственные данные, представляющие собой числовые или символьные значения, являющиеся частью команды.

  • Данные, описываемые с помощью ограниченного набора директив резервирования памяти. При обработке этих директив ассемблер сохраняет информацию о местоположении данных и типе данных.

В язык ассемблера была введена возможность использования нескольких сложных типов данных. Они строятся на основе базовых типов данных.

TASM поддерживает следующие сложные типы данных:

  • массивы;

  • структуры;

  • объединения;

  • записи.