MCS51汇编代码-----求一个数的阶乘

MCS51汇编代码-----求一个数的阶乘,第1张

MCS51汇编代码-----求一个数的阶乘

记录一次实验
使用MCS51指令集写的阶乘代码
通过在特定位置30h给一个值,计算值的阶乘,并存在寄存器a
本代码缺陷:只能运算5及其以下的阶乘,因为寄存器a,b都是单字节的
我使用的乘法指令是mul ab,它只支持单字节乘法运算,并用2个字节保存运算后的结果
当运算6的阶乘,654*3=360 ,360用一个寄存器存不下来,而接下来的运算就无意义了
如果你有更好的方案,欢迎一起讨论

基础汇编指令

只能A×B , 结果的高位在B上面,低位放在A上面


汇编代码
org	0000h
	ljmp    main
	org     1000h
main:	
	mov     r0,#30h  ;数据存放地址0x30
	mov		b,@r0	 ;数据放到b
	mov		a,b		 ;数据复制到a

	subb	a,#01h	 ;a中数据-1	
	mov		b,a
	add		a,#01h	 ;a中的数据还原回来
	mov 	30h,b	 
	;假设最初0x30放的是05h, 运行到这后,a=05h  b=04h  0x03处为04h
flag:
	mov		b,@r0 	  ;地址为r0(30h)处的数放到b
	mul		ab		  ;只能a*b
	djnz	30h,flag  ;将30h处的数-1,如果不为0,跳到flag
	end
		
keil验证

将代码写入文件,文件后缀asm

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5690882.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存