win32汇编实现阶乘和斐波那契数列

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

原文地址:https://www.cnblogs.com/1996313xjf/p/5866959.html