注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

深夜是徘徊在潮湿睫毛上的我的梦以及他的梦

是直到最后都无法放手的一种气息,是我们生命中最后的思念……

 
 
 

日志

 
 

FC显示一个数的汇编代码,附除法算法  

2010-01-14 23:30:46|  分类: FC教程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

 

这当然要用到10进制的。但CHR里的字都是个位的字符。那要将数值转化成数位。那就是求除10后的余数了。

draw_sum000:      ;;显示一个数的代码,

 lda sum_input    ;;sum_input就是要显示的数
 sta mod1         ;;除数是mod1=sum_input
 lda #10
 sta mod2         ;;被除数是mod2=10
 jsr mod_div      ;;进行带余除法,调用子程序mod_div
 lda mod1         ;;除法结果,余数保存在mod1
 sta sum3         ;;sum3=mod1...就是10进制的个位
 lda div          ;;除法结果,商保存在div...就是相当于10进制数右移1位
 sta mod1         ;;mod1=div
 jsr mod_div      ;;再做一次除法,mod2不变=10
 lda mod1
 sta sum2         ;;sum2=mod1...就是10进制的十位...就是相当于10进制数再右移1位
 lda div
 sta sum1         ;;sum1=div...就是10进制的百位...最多就只是百位。不用除了
 jsr vwait_start       ;;等1个vbanlk,到达黑屏的瞬间。
 lda draw_sum000_h     ;;下面是指定位置显示3位数字。
 sta $2006
 lda draw_sum000_l
 sta $2006
 lda #48               ;;下面是将数位较对相应的tile。因为我的CHR里0字就是48,1字是49,2字是50等
 clc
 adc sum1
 sta $2007
 lda #48
 clc
 adc sum2
 sta $2007
 lda #48
 clc
 adc sum3
 sta $2007
 jsr vwait_end
 rts

;;除法子程序mod_div

mod_div:       ;;辗转除法(初中学过的求最小公约数的方法)

 clc           ;;进位或借位C清零
 lda #0
 sta div       ;;div将会是商

mod_1:
 lda mod2      ;;mod1是除数,mod2是被除数,
 cmp mod1      ;;mod1-mod2
 beq mod_2     ;;Z=1即为零 mod1=mod2 则跳到mod_2
 bcs mod_3     ;;C=1即借位了,mod1<mod2 则跳到mod_3

mod_2:         ;;跳到这里表示除数大于等于被除数,或以进行除法
 lda mod1
 sec           ;;取C=1...我猜这行可以删
 sbc mod2      ;;a=mod1-mod2
 sta mod1      ;;mod1=a
 inc div       ;;div=div+1
 jmp mod_1     ;;跳回mod1,,,只要是mod1>=mod2,就用mod1=mod1-mod2,这样div就累加1,直到mod1<mod2,那样div就正好是商

mod_3:         ;;跳到这里表示除数比被除数小,不用除了,除数就是余数。
 rts

  评论这张
 
阅读(640)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018