栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

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

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/690379.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号