打印
[匠人手记]

【求助】3字节/1字节除法运算,调试出错

[复制链接]
3182|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kooshare|  楼主 | 2009-11-4 14:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
那位大哥帮帮忙,在线等。。。。


;3字节/1字节 除法子程序
      LDA #3;030303/03
      STA BEICHUSHU2;被除数高位为03
      STA BEICHUSHU1;被除数中位为03
      STA        BEICHUSHU0;被除数低位为03
      STA        CHUSHU;除数为03

      LDA CHUSHU
      BEQ SEC_DO;除数为0,跳出错
      CLR SHANG2;商高位
      CLR SHANG1;商中位
      CLR SHANG0;商低位
      CLR YUSHU;余数位
   
      LDX #8;X寄存器,循环控制
DIV_3_1_LP:      
      LSL BEICHUSHU0;被除数左移
      ROL BEICHUSHU1;被除数带c左移
      ROL BEICHUSHU2
      ROL YUSHU;余数带c左移
      BCS DIV_3_1_LP1; c为1跳转
      LDA CHUSHU
      SUB YUSHU
      BCC DIV_3_1_LP2; c为0跳转
DIV_3_1_LP1:      
      LDA YUSHU
      SUB CHUSHU
      STA YUSHU
      SEC
DIV_3_1_LP2:
      ROL SHANG0;商带c左移
      ROL SHANG1
      ROL SHANG2
      
      DECX
      BNE DIV_3_1_LP;计数减一不为零,跳转      
      CLC;清c
L177:      
      JMP L177
SEC_DO:
      SEC;置c
      JMP SEC_DO

相关帖子

沙发
程序匠人| | 2009-11-4 14:56 | 只看该作者
错在哪里?

使用特权

评论回复
板凳
kooshare|  楼主 | 2009-11-4 14:58 | 只看该作者
结果不正确

使用特权

评论回复
地板
kooshare|  楼主 | 2009-11-4 14:59 | 只看该作者
本帖最后由 kooshare 于 2009-11-4 15:03 编辑

2# 程序匠人
这里的计数器设置为24的时候
算出来的结果为 商00,ff,ff,余数06,
计数器设置为8的时候,算出来的结果为 ,商,00,00,00,余数03

使用特权

评论回复
5
程序匠人| | 2009-11-4 21:20 | 只看该作者
看样子你是照着《匠人手记》写的程序吧?

我不太熟悉你使用的这个asm,麻烦给下面几句翻译一下:

      LDA CHUSHU
      SUB YUSHU
      BCC DIV_3_1_LP2; c为0跳转
DIV_3_1_LP1:      
      LDA YUSHU
      SUB CHUSHU
      STA YUSHU

估计问题是出在这几句里面,针对里面的两次减法运算,你需要确认一下:
谁是减数?
谁是被减数?
结果放在哪里?
减法对C的影响如何?

使用特权

评论回复
6
kooshare|  楼主 | 2009-11-5 08:59 | 只看该作者
本帖最后由 kooshare 于 2009-11-5 09:00 编辑

非常感谢匠人的帮助,我是对着《匠人手记》写的程序。这个ASM是摩托罗拉HC05指令
#看样子你是照着《匠人手记》写的程序吧?

#我不太熟悉你使用的这个asm,麻烦给下面几句翻译一下:
翻译如下:
      LDA CHUSHU;除数放入A
      SUB YUSHU;A减余数,结果放入A,有借位则C=1,无借位C=0
      BCC DIV_3_1_LP2; c为0跳转
DIV_3_1_LP1:      
      LDA YUSHU;余数放入A
      SUB CHUSHU;A减除数,结果放入A
      STA YUSHU;将A中的值放入余数

#估计问题是出在这几句里面,针对里面的两次减法运算,你需要确认一下:
#谁是减数?
#谁是被减数?
#结果放在哪里?
#减法对C的影响如何?

使用特权

评论回复
7
程序匠人| | 2009-11-5 09:13 | 只看该作者
第一个问题:比较数据大小时,程序有误:
先分析你的程序 :
LDA CHUSHU;除数放入A
      SUB YUSHU;A减余数,结果放入A,有借位则C=1,无借位C=0 (即:除数-余数)
      BCC DIV_3_1_LP2; c为0跳转  (即:除数>=余数跳.)(很显然,这里错了,正确思路应该是:除数>余数跳)
DIV_3_1_LP1:      
      LDA YUSHU;余数放入A
      SUB CHUSHU;A减除数,结果放入A
      STA YUSHU;将A中的值放入余数

正确写法应该是:
LDA YUSHU;余数放入A
      SUB CHUSHU;A减除数,结果放入A,有借位则C=1,无借位C=0
      BCS DIV_3_1_LP2; c为1跳转(即:除数>余数跳)

DIV_3_1_LP1:      
      LDA YUSHU;余数放入A
      SUB CHUSHU;A减除数,结果放入A
      STA YUSHU;将A中的值放入余数

第2个问题:计数器应该设置为8

使用特权

评论回复
8
kooshare|  楼主 | 2009-11-5 09:24 | 只看该作者
匠人,您好,刚改了以后,结果为商,00,00,01,余数00,结果错误
后来我将计数器设置为24,则结果为商,01,01,01,余数00,结果正确

使用特权

评论回复
9
程序匠人| | 2009-11-5 09:33 | 只看该作者
哦,抱歉,我刚才搞错了,计数器应该设置为24(=被除数的位数)

关于这一条,书上也有误,当时勘误表里已经更新,我又给忘了。

使用特权

评论回复
10
kooshare|  楼主 | 2009-11-5 09:36 | 只看该作者
但是我看过勘误表,里面没有这个更新,呵呵,现在解决了,非常感谢匠人的帮忙!

使用特权

评论回复
11
程序匠人| | 2009-11-5 09:58 | 只看该作者
勘误表,请重新到这里下载更新: https://bbs.21ic.com/icview-119880-1-1.html  这个是刚才重新上传的。

另:结贴时,给出去的分数应该和你的悬赏分一致才行哦。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

61

帖子

1

粉丝