Ассемблер сопроцессор: Вычислить 4 значения функции: Y = 3 * log2(x2+1), x изменяется от 0,2 с шагом 0,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\include\user32.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

fld _x
fld _x
m1:
fild umnoj
fld st(1)
fmulp st(2),st(0)
fyl2x
fld hod
fadd st(2),st(0)

fistp dword ptr [edi] dec const
jz m2
fistp dword ptr [esi] fld 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

Реклама

Ассемблер сопроцессор: Определить номер (х) элемента функции: xn = 3х + 5, при котором сумма элементов превысит 12 000. Результат разместить в памяти и вывести соответствующие сообщения.

Определить номер (х) элемента функции: xn = 3х + 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
fld 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 ; зак?нчення программы

Ассемблер сопроцессор: Вычислить 6 значений функции: Yn = 4x/(x + 5) (х изменяется от 3 с шагом 1,25). Результат округлить к целому, разместить в памяти и вывести на экран.

Вычислить 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:
fld st(0)
fiadd krok
fld 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 Результат работы программы

Вывод данных в файл: для функции Y = 40Х + 10 получить первое значение, превышающей 512, начиная с Х = 1. Значение аргумента и функции записать в ячейки памяти.

.386 ;директива определения типа микропроцессора

. Model flat, stdcall ; задачи линейной модели памяти
; И соглашения ОС Windows
option casemap: none; отличие малых и больших букв

include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

BSIZE equ 40; количество байтов, которые записываются в файл
. Data; директива определения данных
fName BYTE «info_file.txt», 0; ячейки для файла
fHandle DWORD? ; Резервирования в памяти 32-разрядной
;ячейки с именем fHandle для дескриптора сохранения файлов
cWritten DWORD? ; Резервирования 32-разрядной ячейки памяти
; С именем cWritten для адреса символов вывода
st1 db ‘Аргумент =’, 0
st1_kol = $ — st1
st2 db ‘Значение функции =’, 0
st2_kol = $ — st2
st3 db 100 dup (0)
stemp db 3 dup (0)
stemp2 db 3 dup (0)
ifmt db «% d», 0
_x dw 1
_y dw 0
const40 dw 40
const10 dw 10
temp db 15
prom db 0

. Code; директива начала сегмента-данных
start:; метка начала программы с именем start

mov eax, 0
mov ebx, 0
mov ecx, 0
mov edx, 0

lea edi, st3
lea esi, st1
mov ecx, st1_kol
m1:
mov al, [esi] mov [edi], al
inc esi
inc edi
loop m1

m2:
mov ax, _x
mul const40
add ax, const10
mov _y, ax
. IF (_y> 512)
jmp _end
. ELSE
inc _x
jmp m2
. ENDIF
_end:
mov eax, 0
mov ax, _x

invoke wsprintf, \; API-функция преобразования числа
ADDR stemp, \; адрес буфф, куда будет записана помет. символов
ADDR ifmt, \; адрес строки преобразования формата
eax; регистр, содержимое которого превращается

lea esi, stemp
mov ecx, 3
dec edi
z1:
mov al, [esi] mov [edi], al
inc edi
inc esi
loop z1
mov al, 10
mov [edi], al
inc edi
mov al, 13
mov [edi], al
inc edi

lea esi, st2
mov ecx, st2_kol
m3:
mov al, [esi] mov [edi], al
inc esi
inc edi
loop m3
dec edi

mov eax, 0
mov ax, _y
invoke wsprintf, \; API-функция преобразования числа
ADDR stemp2, \; адрес буфф, куда будет записана помет.символов
ADDR ifmt, \; адрес строки преобразования формата
eax; регистр, содержимое которого превращается
lea esi, stemp2
mov ecx, 6
dec esi
z2:
mov al, [esi] mov [edi], al
inc edi
inc esi
loop z2

invoke CreateFile, ADDR fName,; адрес имени файла с символами
GENERIC_WRITE, \; запись в файл
0, NULL,; параметры многозадачности
CREATE_ALWAYS,; уничтожить и создать новый файл
FILE_ATTRIBUTE_ARCHIVE, 0

mov fHandle, eax; программирование дескриптора устройства
invoke WriteFile, fHandle,; дескриптор устройства
ADDR st3,;адрес области памяти,сохраняющий символы
BSIZE,, Количество символов
ADDR cWritten,; адрес памяти,где хранится число
NULL; записанных в файл символ_в
invoke CloseHandle,fHandle; дескриптор файла
invoke ExitProcess,0 ; возврат управления Windows
; И освобождения ресурсов
end start; директива окончания программы с именем start