打印

一道A51汇编题求助高手。

[复制链接]
楼主: wxj1952
手机看帖
扫描二维码
随时随地手机跟帖
21
wlq_9| | 2008-8-14 09:17 | 只看该作者 回帖奖励 |倒序浏览

同意12L和20L

不会51算不算高手?不会混编算不算高手?
得LZ指引,出来的更多是电子代码操作工.

使用特权

评论回复
22
wxj1952|  楼主 | 2008-8-14 11:21 | 只看该作者

高手不是背指令的。Keil就没用LZ。用了就不规则了。

我觉得高手写的程序有2个特点:(编程规则?)
1、独立性。模块化思想,以后可以重复调用;无需每逢此问题就要重新思考、重新编写。
2、易读性。让别人/自己将来看得懂。如果以后连自己写的程序都看不懂了,只能重新来过,浪费精力。

  就LZ问题来说,Keil 的相关源程序大意归纳为:

A块: IF(A<R7)  F1  ;可以单独调用。
B块: IF(A>R7)  F2 ;独立块可调用,与A块无关。
C(与A、B关联): F3 ;(A<>R7)。也可以写成独立块

***************************************************

比较一下,我们写的程序大意:

 IF(A<R7)  GOTO  F1  ;把最直接的关联反而放远了。
 IF(A==R7) GOTO F3  ;不独立,关联不清晰。
       F2   !(A=<R7)  ;

(没什么不可以,就是没有规则。只能自己用。)

能改进么?

下一贴贴出Keil的源程序。


使用特权

评论回复
23
myfaith| | 2008-8-14 13:18 | 只看该作者

程序批评家

门牌号为1952的用户的帖以后我得躲远点...一脚踏错门了,赶紧撤

使用特权

评论回复
24
zusen| | 2008-8-14 13:39 | 只看该作者

KEIL不用是KEIL的事了,嘿嘿

使用特权

评论回复
25
NE5532| | 2008-8-14 16:36 | 只看该作者

问题你考我们怎么用汇编写啊

keil怎么编译我不管。

使用特权

评论回复
26
HWM| | 2008-8-14 17:19 | 只看该作者

二十年前已经给学生玩过的玩意儿,LZ的题目还真显眼了。

使用特权

评论回复
27
mohanwei| | 2008-8-14 18:58 | 只看该作者

路过

使用特权

评论回复
28
wxj1952|  楼主 | 2008-8-14 21:23 | 只看该作者

高人怎么没看出问题来?

 CLR C
    SUBB A,R7
    JZ  F3
    JC  F2
F1:


这个程序应该是无懈可击了。但是它没注意限制了F1/F2/F3 的代码长度。例如:(F1+F3)必须小于256字节才行。

CLR C
    SUBB A,R7
    JZ  F3
    JC  F2
F1:
.
.
.
.
F3:
.
.
.
.


F2:   ;相对页地址。

说明:Keil的程序是用A51汇编写的。(不是用C51。)它就考虑到了这个问题。
所以说,看起来简单。实际上很多细节想不到。

    HWM老师年过不惑,大概20年前就在学校里讲过这类问题?还是说SBB指令的用法?何不借此给我们这样菜鸟级别的人论道论道?我们现在的学校和师资水平可和你们当时差太远了。
    
    一道实际应用中的小破问题,能够让人有2、3点想不到,也值得出了。

使用特权

评论回复
29
NE5532| | 2008-8-14 21:29 | 只看该作者

楼主,我来跟你辩论专用和通用的问题了

哲学依据:矛盾的普遍性原则

越专用的东西,越简单明了,但是有限制条件;越通用的东西为了满足更多的外部条件,就越复杂。

这个就是你的编译器和我们汇编语言之间的差别。

你的题目没有给任何限制条件,只说要求最简,你说我们靠哪边?

不要把编译器当神仙,ICC就被我在书里批判了的。

何况跳转长度不够的问题,编译器自己都会报警,你为啥就会想到2、3点呢?

使用特权

评论回复
30
NE5532| | 2008-8-14 21:41 | 只看该作者

倒过来踢馆了!

请问在Keil C的环境下,下列语句是否正确(文件名称x.asm)

 call func_a

使用特权

评论回复
31
wxj1952|  楼主 | 2008-8-14 23:14 | 只看该作者

ICC就被我在书里批判了的。

不知道您还有专著?告诉俺书名,也去买一本来拜读。

30楼早就是俺心目中崇拜的高人了,还这么在意别人指出的一点点不足?

“何况跳转长度不够的问题,编译器自己都会报警。”(幸亏承认是个“问题”,否则我准备挨批了。)就这么基础的问题还要靠编译器来报警?我主要是没想到,对不起,实在对不起。我不该指出您程序中的小问题。应该说无懈可击,NE5532 是能够做到最简约的天才优胜者。

和您比较,我是绝对的初学者。
Keil是高手,它的程序全世界卖。我只跟它学就足够了。

我一直在说A51宏汇编器,您怎么老跟我提C编译器?IF(A<>R7)不是C语句。是宏汇编语句。

对不起,是我的错。初次相识,心理学上已经早已了解透了。nol型性格。人才。



使用特权

评论回复
32
zusen| | 2008-8-15 07:45 | 只看该作者

不明白楼主为什么扯了来KEIL进来

我实在想不明白,这题目跟KEIL有啥干系~~~~~~

不明白,,,,闪人

使用特权

评论回复
33
xwj| | 2008-8-15 07:49 | 只看该作者

唉...

再次路过
再次叹息....

使用特权

评论回复
34
NE5532| | 2008-8-15 10:09 | 只看该作者

1952不必介意,我踢馆不是踢你本人

我是对事不对人哈。

愚作在我签名的链接里,如有荣幸,请多指教。

那个call的问题,当时郁闷了我N天的,所以才拿出来说。

在这里没必要争谁高谁低,否则就失去上网的乐趣了。

使用特权

评论回复
35
wxj1952|  楼主 | 2008-8-15 11:49 | 只看该作者

回zusen学长。

题目是我从Keil软件中挖出来的。像我这样的菜鸟不可能想到这类实际应用的做法。

    看来比keil高明的人还真不少,害得我现在都不敢再说KEIL的程序就是范例,谁高兴的话,我就以他为范例好了。

    目前为止,4楼的程序有门,他是真的思考过。敬佩这些认真埋头做事,从不喧嚣的人。
  CLR     C
        SUBB    A,R7
        JC      F3
        JZ      F2
        NOP
        LJMP    F4
F2:     NOP
        LJMP    F4
F3:     NOP
F4:    
***********************************************************

        CLR     C
        SUBB    A,R7
        JC      rel

是书上来的。有问题吗?

(我学乖了,如果现在直接指出(细节小)问题,事后明白人太多。还反受一场训导。郁闷。)

    

使用特权

评论回复
36
zusen| | 2008-8-15 11:54 | 只看该作者

KEIL是因语言而生

而不是语言应KEIL而生

逻辑问题

使用特权

评论回复
37
zusen| | 2008-8-15 11:56 | 只看该作者

其实楼主出这题目,本身就有贬低别人之意

学技术,先学会做人

之所以你在这里得不到尊重的原因

笑过,,,小屁孩

使用特权

评论回复
38
wxj1952|  楼主 | 2008-8-15 12:08 | 只看该作者

又受一场训导。

老师说得我不懂。

上次是哲学问题,这次是逻辑问题。下次大概要谈意识形态了。

语文的事我不懂。我只注重题目。无关的事我从来不扯。

天南地北而言它。就是不做题。手段?

使用特权

评论回复
39
wxj1952|  楼主 | 2008-8-15 12:11 | 只看该作者

老师开口骂人了!

小屁孩?
我从不以贬低别人的手法来抬高自己!

使用特权

评论回复
40
农民讲习所| | 2008-8-15 12:20 | 只看该作者

非常同意zusen的看法

1952确实要好好学习怎么做人.

使用特权

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

本版积分规则