win32阶乘程序
.486 ;使用486处理器
.model flat,stdcall
include masm32includemsvcrt.inc
includelib masm32libmsvcrt.lib
.data
result0 dd 1;存储最终结果
inputdata dd ?;输入的阶乘的最大值
type0 db '%d',0
data4 db '请输入阶乘最大值ddddd: ',0
data1 db '请输入阶乘最大值: ',0
data2 db '阶乘结果为: ',0
.code
start:
invoke crt_printf,addr data1;打印字符串
invoke crt_scanf,addr type0,addr inputdata;type0表示输入的格式,inputdata表示输入的值存在哪里
mov eax,result0
mov ecx,2d
push eax
@@:;win32里面跳转的东西,目前不懂是什么,但是应该和@B联系,如果往下跳转应该是@F
pop eax
;mov eax,result0
mul cx
;mov result0,eax;其实两种方法都可以
inc ecx
push eax
cmp ecx,inputdata
jle @B
pop eax
mov result0,eax
invoke crt_printf,addr data2
invoke crt_printf,addr type0,result0
ret
;invoke crt__exit, 0 ;使用这个语句会使得exe立马退出
end start
win32汇编的斐波那契数列
.486
.model flat,stdcall
include masm32includemsvcrt.inc
includelib masm32libmsvcrt.lib;使用宏库
.data
result0 dd 0;存储最终结果的倒数第一个
result1 dd 1;存储最终结果的倒数第二个
inputdata dd ?;输入的斐波那契数列的个数
type0 db '%d',0
;data4 db '请输入阶乘最大值ddddd: ',0
data1 db '请输入斐波那契数列个数: ',0
data2 db '结果为: ',0
data3 db ' ',0
.code
start:
invoke crt_printf,addr data1
invoke crt_scanf,addr type0,addr inputdata
invoke crt_printf,addr data2
invoke crt_printf,addr type0,result0
invoke crt_printf,addr data3
invoke crt_printf,addr type0,result1
mov ecx,1d
@@:
mov eax,result0
mov ebx,result1
mov result0,ebx
add ebx,eax
mov result1,ebx
invoke crt_printf,addr data3
invoke crt_printf,addr type0,result1
inc ecx
cmp ecx,inputdata
jle @B
ret
;invoke crt__exit, 0
end start