这是我的代码。
.486 ; директива визначення типу мікропроцесора
.model flat, stdcall ;визначення лінійної моделі пам’яті
选项案例图:无;розділенняверхньоготанижньогорегістрів
包含 d:\masm32\include\windows.inc
包含 d:\masm32\macros\macros.asm
包含 d:\masm32\include\masm32.inc
包含 d:\masm32\include\gdi32.inc
包含 d:\masm32\include pu.inc
包含 d:\masm32\include\user32.inc
include d:\masm32\include\kernel32.inc ;підключення бібліотек та
include d:\masm32\include\msvcrt.inc ;системних файлів
includelib d:\masm32\lib\msvcrt.lib
includelib d:\masm32\lib pu.lib
includelib d:\masm32\lib\masm32.lib
includelib d:\masm32\lib\gdi32.lib
includelib d:\masm32\lib\user32.lib
includelib d:\masm32\lib\kernel32.lib
uselib masm32、comctl32、ws2_32
.数据; директива визначення данних
msg_title db "标题", 0 ; встановлення заголовку повідомлення
_const2 DWORD 3.0 ;оголошення константи 2
_const3 DWORD 8.0 ;оголошення константи 3
_count dd 4 ; оголошення змінної з першим числом
_right dd 7 ; оголошення змінної з другим числом
_count1 DWORD 4.0 ;оголошення змінної з першим числом для роботи зі стеками
_一个 DWORD 1.0; оголошення змінної зі значенням 1
_result DWORD 1.0 ; оголошення змінної для результату
_title db "Лабораторна робота №5",0 ; встановлення заголовку
strbuf dw ?,0
_text db "masm32.Заєць Віталій ІН-202 ІІТЕ КНЕУ, каф. ІСЕ 2017 р. ",10 ,"Вивід результата через MessageBox: ", 10,
"Результат: "
_res1 db 14 DUP(0),10,13; формування повідомлення у вікні
.代码; директива початку сегменту команд
开始:; мітка початку програми
mov edx, 1 ;занесення 1 у регістр edx
mov ebx, _right; занесення значення другого числа у регістр ebx
mov ecx, _count; занесення значення першого числа у регіср ecx
finit ;ініціалізація спіпроцесора
.WHILE edx == 1 ; задання умови для запуску циклу
.IF ecx == 3 || ecx == 8 ; умова при якій будуть обходитись числа, при яких виникне ділення на ноль
loop m1 ;мітка m1
.ENDIF ; кінець умови IF
fld_count1; завантаження змінної count1 у верхівку стеку
fsub _const2 ;відмімання константи2 ;(n-3)
fld_count1; завантаження змінної count1 у верхівку стеку
fsub _const3 ;віднімання константи 3 ;(n-8)
fmul st(0), st(1) ;множеня вмісту регістрів (n-3)*(n-8)
fld_count1; завантаження змінної count1 у верхівку стеку
fdiv st(0), st(1) ;ділення n/((n-3)*(n-8))
fld _result ;завантаження _ 结果 у верхівку стеку
fmul st(0),st(1) ; множення значення з верхівки стеку на значення з першого
fstp _result ; збереження значення у змінну _result
m1: ; мітка m1
添加 ecx,1
fld_one
fld _count1 ;операцііїзізначеннямидлявиконання
fadd st(0), st(1) ;наступної ітерації
fstp_count1
添加 _count ,1
.IF ecx > ebx
fld _result ;умова для виходу з циклу
.中断
.ENDIF
.ENDW
调用 FpuFLtoA、0、10、ADDR _res1、SRC1_FPU 或 SRC2_DIMM
调用 MessageBox, 0, offset _text, offset _title, MB_ICONINFORMATION
调用 ExitProcess, 0
结束开始; завершення програми