русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


Шановні українці! Матеріал був перекладений з російської мови. Тому можуть бути незначні помикли...

Асемблер співпроцесор. Приклади завдань

Приклад 1: Обчислити 6 значень функції: Yn = 4x/(x + 5) (х змінюється від 3 з кроком 1,25). Результат округлити до цілого, розмістити в пам'яті і вивести на екран.


1.1 Текст програми


.386 ; директива визначення типу мікропроцесора
.model flat,stdcall ; завдання лінійної моделі пам'яті
option casemap:none ; відміну малих і великих літер
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\fpu.inc
include \masm32\include\user32.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\fpu.lib

.data ; директива визначення дані

_x dd 3 ; збереження в 32-розрядному комірці пам'яті змінної х
_y dd 0 ; резервування 32-х розрядів пам'яті для змінної у
tmp1 dd ? ; резервування 32-х розрядів пам'яті для змінної tmp1
tmp2 dd ? ; резервування 32-х розрядів пам'яті для змінної tmp2
hod dd 1.25
krok dd 5
_umnoj dd 4 ; множення на 4
probel dd 09h ; для виводу на екран
res dd 0
ifmt db "Yn = %d",0
st1 db "Yn = 4x/(x + 5) ",0
st2 dd 10 dup(?),0
st3 dd 10 dup(?),0

.code ; директива початку коду програми
_start: ; директива початку коду програми
lea edi,st2
lea esi,st3
xor eax,eax ; обнулення регістрів
xor ebx,ebx
xor ecx,ecx
xor edx,edx
finit ; ініціює співпроцесора
mov ecx,6
fild _x
m1:
переносів st(0)
fiadd krok
переносів st(1)
fimul _umnoj
fmul st(0),st(1)
fistp dword ptr [edi]
fistp dword ptr [esi]
fadd hod

add edi,4

loop m1

lea edi,st2
mov eax[edi+20]

invoke wsprintf \
ADDR st2 \
ADDR ifmt \
eax
invoke MessageBox \
NULL \
addr st2 \
addr st1 \
MB_OK
invoke ExitProcess,0
end _start ; зак?нчення програми


1.2 Результат роботи програми


 

 

Приклад 2 : Визначити номер (х) елемента функції: xn = + 5, при якому сума елементів перевищить 12 000. Результат розмістити в пам'яті і вивести відповідні повідомлення.


2.1 Текст програми


.386 ; директива визначення типу мікропроцесора
.model flat,stdcall ; завдання лінійної моделі пам'яті
option casemap:none ; відміну малих і великих літер
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\fpu.inc
include \masm32\include\user32.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\fpu.lib

.data ; директива визначення дані

_x dd 0 ; збереження змінної х
_y dd 0 ; резервування 32-х розрядів пам'яті для змінної у
tmp1 dd ? ; резервування 32-х розрядів пам'яті для змінної tmp1
tmp2 dd ? ; резервування 32-х розрядів пам'яті для змінної tmp2
hod dd 1
krok dd 3
plus dd 5
mem dw ?
_MASK equ 0C00h
limit dd 12000
ifmt db "№ = %d",0
st1 db "Висновок номера елемента",0
st2 dd 10 dup(?),0
st3 dd 10 dup(?),0

.code ; директива початку коду програми
_start: ; директива початку коду програми
lea edi,st2
lea esi,st3
xor eax,eax ; обнулення регістрів
xor ebx,ebx
xor ecx,ecx
xor edx,edx
mov edx,limit
finit ; ініціалізація співпроцесора
fstcw mem
OR mem,_MASK
fldcw mem
mov ecx,6
m1:
inc _x
fild _x
fild krok
fyl2x
переносів st(0)
frndint
fsub st(1),st(0)
frndint
f2xm1
fiadd hod
fldz
fadd st(0),st(2)
f2xm1
fiadd hod
fmul st(0),st(1)
fiadd plus
fistp dword ptr [edi]
fistp dword ptr [esi]
fistp dword ptr [esi]
mov eax[edi]
add ebx,eax
add edi,4
add esi,4
cmp edx,ebx
jns m1

mov eax,_x

invoke wsprintf \
ADDR st2
ADDR ifmt \
eax
invoke MessageBox \
NULL \
addr st2 \
addr st1 \
MB_OK
invoke ExitProcess,0
end _start ; зак?нчення програми


2.2 Результат роботи програми


 

Приклад 3: Обчислити 4 значення функції: Y = 3 * log2(x2+1), x змінюється від 0,2 з кроком 0,3.


3.1 Текст програми


.386 ; директива визначення типу мікропроцесора
.model flat,stdcall ; завдання лінійної моделі пам'яті
option casemap:none ; відміну малих і великих літер
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\fpu.inc
include \masm32\includeuser32.inc

includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\fpu.lib

.data ; директива визначення дані

_x dd 0.2 ; збереження в 32-розрядному комірці пам'яті змінної х
_y dd 0 ; резервування 32-х розрядів пам'яті для змінної у
tmp1 dd ? ; резервування 32-х розрядів пам'яті для змінної tmp1
tmp2 dd ? ; резервування 32-х розрядів пам'яті для змінної tmp2
hod dd 0.3
umnoj dd 3
const dd 4
mem dw ?
_MASK equ 0C00h
ifmt db "Y = %d",0
st1 db "Висновок функції",0
st2 dd 10 dup(?),0
st3 dd 10 dup(?),0

.code ; директива початку коду програми
_start: ; директива початку коду програми
lea edi,st2
lea esi,st3
xor eax,eax ; обнулення регістрів
xor ebx,ebx
xor ecx,ecx
xor edx,edx
finit ; инициализания співпроцесора
fstcw mem
OR mem,_MASK
fldcw mem
mov ecx,4

переносів _x
переносів _x
m1:
fild umnoj
переносів st(1)
fmulp st(2),st(0)
fyl2x
переносів hod
fadd st(2),st(0)

fistp dword ptr [edi]
dec const
jz m2
fistp dword ptr [esi]
переносів st(0)
mov eax[esi]
add edi,4
add esi,4
loop m1
m2:

 

invoke FpuFLtoA, 0, 10, ADDR st2, SRC1_FPU or SRC2_DIMM
invoke MessageBox, NULL, addr st2, addr st1, MB_OK
invoke ExitProcess, NULL ; повернення управління ОС Windows
; але звільнення ресурсів

end _start ; директива закінчення програми з ім'ям start

3.2 Результат роботи програми


Переглядів: 4558

Повернутися взміст


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн