程序在这里卡住,编译通不过了,请帮忙看一看......

[复制链接]
 楼主| 89cpu 发表于 2008-1-12 18:42 | 显示全部楼层 |阅读模式
一本书上的汇编程序, 是一段ERR(出错处理) 程序;
但是,程序在这里卡住,编译通不过了,请帮忙看一看......

以下是程序:
......

;****************************
;ERR(出错处理) 程序    ;
;****************************

 ERR:CLR EA                 ;关中断
     MOV DPTR, #ERR1        ;准备返回地址
     PUSH DPL               ;压栈
     PUSH DPH               ;
     RETI                   ;中断返回
ERR1:MOV 56H,#0AAH          ;建立上电标志(出错标志)
     MOV 57H, #55H
     MOV A,#00H             ;准备返回地址
     PUSH A                 ;压栈
     PUSH  A
     RETI                   ;中断返回
     NOP
     NOP
     LJMP ERR               ;软件陷阱

     ORG 07FAH
     NOP
     NOP
     NOP
     LJMP ERR               ;软件陷阱

     END                    ;程序结束

--------------------------------------------

谢谢!

2008-01-12  18:45

相关帖子

 楼主| 89cpu 发表于 2008-1-12 18:48 | 显示全部楼层

是北京航空航天大学的“51系列单片机设计实例”一书。

是一段软件陷阱程序。
是该书附带的光盘里的程序。




 楼主| 89cpu 发表于 2008-1-12 19:18 | 显示全部楼层

即使去掉一句PUSH A也不行的。还是通不过。

PUSH A                 ;压栈
PUSH A

*-*******************************
即使去掉一句PUSH A也不行的。还是通不过。
5880527 发表于 2008-1-12 19:30 | 显示全部楼层

呵呵,作者竟然犯这样的低级错误,还陷阱呢,真服了

 楼主| 89cpu 发表于 2008-1-12 19:49 | 显示全部楼层

5880527,你好!错在哪里了呢?

我用KEIL编译时发现的。
通不过。

低级错误?请指出。
我没编过软件陷阱程序。只是在书上看到。

我是想按那书上的程序做出个试验板的。
是关于倒计时的一个程序。

谢谢!
5880527 发表于 2008-1-12 19:55 | 显示全部楼层

把PUSH A改成PUSH ACC就解决了

computer00 发表于 2008-1-12 19:57 | 显示全部楼层

哈哈,A是寄存器...不能push...ACC是地址,才能push...

 楼主| 89cpu 发表于 2008-1-12 22:20 | 显示全部楼层

哎!我真要找堵墙撞死得了!!

可是! 那书的作者也太那个了吧?!
还随书附带光盘呢!

谢谢!
 楼主| 89cpu 发表于 2008-1-12 22:25 | 显示全部楼层

这书的作者一定要暴光!

我随后拍了照片上来! 

程序匠人 发表于 2008-1-12 22:38 | 显示全部楼层

先别急着骂作者

如果这只是其中一段程序,那么也许作者在此程序之前,有过预定义之类的。把ACC预定义成A。或者也有可能作者用的编译器和你不一样。

先搞清楚再说。
hotpower 发表于 2008-1-12 22:43 | 显示全部楼层

哈哈~~~匠人说不过去~~~肯定是错了~~~没人用A替代ACC的~~~

程序匠人 发表于 2008-1-12 23:10 | 显示全部楼层

不过也是,匠人查了一下以前写的51程序也是用acc

;**************************************
;脉冲输入中断
;**************************************
INT1_MC:PUSH    ACC
        PUSH    PSW
        LCALL   MC_INC                  ;脉冲+1
        POP     PSW
        POP     ACC
        RETI
------------------------------------------
确实是用“PUSH    ACC”
hotpower 发表于 2008-1-12 23:23 | 显示全部楼层

哈哈~~~就没有PUSH/POP A这条指令~~~

 楼主| 89cpu 发表于 2008-1-13 00:00 | 显示全部楼层

那么是不是不是说那两句PUSH A都改成PUSH ACC就行了?

为什么用两句PUSH  A啊?

改后是:
PUSH  ACC
PUSH  ACC吗?


 楼主| 89cpu 发表于 2008-1-13 00:04 | 显示全部楼层

预定义(伪定义)里没发现有关于把ACC预定义成A的语句啊?!

程序匠人 发表于 2008-1-12 22:38 侃单片机 ←返回版面    

10楼: 先别急着骂作者 

如果这只是其中一段程序,那么也许作者在此程序之前,有过预定义之类的。把ACC预定义成A。或者也有可能作者用的编译器和你不一样。

先搞清楚再说。 
 
*-*-*-***************************************************************
预定义(伪定义)里没发现有关于把ACC预定义成A的语句.
是一个错误了.
对出学者来说, 这无疑是致命的.
还好现在有了网络,有了21IC的这么多的老师,多谢!
 楼主| 89cpu 发表于 2008-1-13 00:20 | 显示全部楼层

但是: 他们附带的光盘里,有HEX文件的啊???!!!

但是: 他们附带的光盘里,有HEX文件的啊.

按他们的那程序, 怎么能得出HEX文件的呢?

疑惑!
程序匠人 发表于 2008-1-13 00:22 | 显示全部楼层

所以匠人让你先别急着骂作者嘛

一般这种代码都是经过验证的。

也许是印刷时的疏漏,也许还有别的可能。

程序匠人 发表于 2008-1-13 00:30 | 显示全部楼层

能够从书中发现错误也是很不容易的

需要细心和运气。匠人看了那么多书,从来都是囫囵吞枣,没有发现过一次错误。惭愧!
 楼主| 89cpu 发表于 2008-1-13 00:31 | 显示全部楼层

那么正确的应该是:

我不是急着骂作者啊!
关键是买来了这书, 按着书上的程序又整不出来. 着急啊!

最终结果:
是不是说把那两句PUSH A都改成PUSH  ACC就行了呢?

我改了后是可以通过KEIL的编译了.但需要用两句么?
 楼主| 89cpu 发表于 2008-1-13 00:42 | 显示全部楼层

程序匠人,我在好几本单片机的书上发现了错误.

包括人民邮电出版社的[][51单片机开发入门与典型实例]].
发了邮件提醒出版社及作者,人家的回复都是无所谓的样子啊!!!!

我不在乎买他们这本书的钱,我又不是靠这个混饭吃的!

但是: 
我担心的是:他们这样会害人啊!至少也是耽误了别人的时间和精力啊!
因为:别人是掏腰包买了他们出版社的东西, 却发现是个滥货!

这个可真是不应该啊!

J国, 你什么能多一些责任感呢?!





您需要登录后才可以回帖 登录 | 注册

本版积分规则

21

主题

184

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部