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

家电修理 2023-07-16 19:17www.caominkang.com电器维修

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

基础汇编指令

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


汇编代码
	0000h
	ljmp main
	  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		  ;只能ab
	djnz	30h,flag  ;将30h处的数-1,如果不为0,跳到flag
	end
		
keil验证

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

Copyright © 2016-2025 www.caominkang.com 曹敏电脑维修网 版权所有 Power by