打印

一道A51汇编题求助高手。

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

马上看出谁是中年人。他们有被尊重的“心理需要”

134楼的帖子最终满足了各位中年高手的“心理需要”,多位前辈终于心里感到释然。

使用特权

评论回复
82
wxj1952|  楼主 | 2008-8-20 16:01 | 只看该作者

此前不好说的一件事。

我是做业务的,可别老跟我谈深奥的 JZ 问题。
不过我做业务的经历中,时常能看到一些自称高手的明白人现场露怯,窘迫的样子很好笑。
比如前几日那场通信项目招标会,你家高手被人拒之门外的事:
提醒一下老总说的话:“CAN?要是CAN能行我还用找他?”

你家主子说别人HDLC太古老,装明白人推荐别人用CAN。结果不懂装懂沦为笑谈。

CAN总线为什么不行?高手大概又一个没想到。

标书 以375Kbps 在RS-485上跑HDLC帧 理论上传输距离800米(自己证明) 。

请问:同样环境条件下,CAN总线2端节点最远传输距离多少米?(自己证明过吗?)

所以,人应该有自知之明,自己没做过的技术,就拿来装相。“我新技术,你们老家伙都不懂。”结果好像显得比通信技术研究所一帮专业的技术人才还高明。露怯了自己还不知道,被人开了还莫名其妙。“为什么不能用?为什么不用!”

能不能用自己回去证明一下。(看看别人为什么开你。)可别光知道一个 JZ 就以为“见证高手”了。

当然,高手又要开始表演了,他们不说“不懂”,他们说“不屑”。
这种高手,是不是有点Q。

使用特权

评论回复
83
soho| | 2008-8-20 16:43 | 只看该作者

汇编,应该时常翻翻指令表

看看那个(些)指令被遗忘在角落了。

使用特权

评论回复
84
冷漠| | 2008-8-20 20:38 | 只看该作者

一直没想出来。

还是要人提示才恍然大悟。

这样可对?

CLR C
SUBB A,R7
JNC L001
F1   ;A<R7
.
.
L001: 
SETB C
SUBB A,R7
JC  L002
F2  ;A>R7
.
.
L002:
F3   ;A=R7
.
.

END


希望指正。学习了。

使用特权

评论回复
85
wxj1952|  楼主 | 2008-8-21 10:58 | 只看该作者

感谢82楼,看来我们差距不大,就差那么一点点。

这是不是说明,还是向别人学习快,看别人怎么做的,3天就想通了。——否则如果自己冥思苦想,像我这么笨的菜鸟,这么简单的问题,我去年就开始想了。

        一年我都没想出来。



使用特权

评论回复
86
AIRWILL| | 2008-8-21 15:42 | 只看该作者

我也颇有 XWJ 的感觉

这样的题目, 有意思吗?

使用特权

评论回复
87
sohu_xzy| | 2008-8-21 16:18 | 只看该作者

高手

      ORG    00H
      JMP    START
START:CLR    C
      MOV    20H,R7
      CJNE    A,20H,F11
      F3
      JMP    START
F11:       SUBB    A,R7
      JC    F22
      F1
      JMP    START
F22:       F2
          JMP    START

使用特权

评论回复
88
icmap| | 2008-8-21 19:37 | 只看该作者

用JZ比用82楼的方法更好

用JZ比用82楼的方法更好。用 JZ 的代码会更小点,而且可读性也更好。

使用特权

评论回复
89
wxj1952|  楼主 | 2008-8-21 19:49 | 只看该作者

问85楼。

我还没想通,也来装一回明白人。

  CJNE    A,20H,F11
.
.
F11: ...   ;这时的C既可能=1,也可能=0。
 
当A<20H时,C=1。

可是您写的是JC F2 (执行A>20H)。
JC F1  行不行,我也不知道。

利用CJNE 的参考做法,3楼已经做过了。

使用特权

评论回复
90
wxj1952|  楼主 | 2008-8-21 20:44 | 只看该作者

同意86楼,用JZ更好一点。

但是不通用,只能在F1/F2/F3代码长度已知不大的时候用。

67楼想了一个解决办法。代码已经不小了。3个LCALL G是为了通用?显然只能为了自己用。
要交给用户的软件,不可能是2套方案:要告诉用户,当F1/F2/F3代码长度已知不大的时候,请用第一套方案,当....请用LCALL GX方案。

67楼: 也可以适用于超出256字节的地址 

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

F3:

F2:

也可以适用于超出256字节的地址,可以添加 ljmp 或 lcall 指令,例如:

CLR C
    SUBB A,R7
    JZ  F3
    JC  F2
F1:
LCALL G1    ;这里提问一句:如果F1代码长度只有20字节,这个LCALL G1是 不是冗余语句?
.
.
F3:
LCALL G3  ;同上问
.
.
F2:
LCALL G2  ;同上问。但是82楼程序没这个问题,他的F1/F2/F3代码长度在一页范围内任意。所以更通用。
.
.


自己用没什么不可以,自己做的总是弥足珍贵的。

使用特权

评论回复
91
冷漠| | 2008-8-22 08:46 | 只看该作者

代码长度用尺子量?

我修改短点。

CLR C
SUBB A,R7
JNC L001
F1   ;A<R7
L001: SETB C
SUBB A,R7
JC  L002
F2  ;A>R7
L002: F3   ;A=R7

使用特权

评论回复
92
zidaozhou| | 2008-8-22 12:35 | 只看该作者

判断标准

我觉得用汇编写程序首先应该考虑指令的执行周期,然后再考虑指令代码空间,而不是只考虑指令的条数。

使用特权

评论回复
93
dengm| | 2008-8-22 18:21 | 只看该作者

在不破坏环境时, 等周期

;根据ACC>R7/ACC<R7 /ACC =R7 分别执行F1/F2/F3 程序段
    PUSH PSW
    XCH A, B
    XCH A, R7
    CJNE A, B, L_F12
L_F3: XCH A, R7
      XCH A, B
      POP PSW
      NOP
      NOP
      LJMP F3

L_F12:
      XCH A, R7
      XCH A, B
      JC L_F1
L_F2:   POP PSW
        LJMP F2

使用特权

评论回复
94
qingsongup| | 2008-8-22 18:25 | 只看该作者

回答

顶四楼的解答。判断进位标志位c即可。

使用特权

评论回复
95
dengm| | 2008-8-23 08:35 | 只看该作者

破坏 PSW 并用B

;根据ACC>R7/ACC<R7 /ACC =R7 分别执行F1/F2/F3 程序段
       MOV B, R7
       CJNE A, B, L_F12
         LJME F3
L_F12:
       JNC L_F1
         LJME F2
L_F1:
         LJMP F1

使用特权

评论回复
96
fjh| | 2008-8-25 22:04 | 只看该作者

dd

这种题,想说明什么?想考察什么?

使用特权

评论回复
97
wxj1952|  楼主 | 2008-8-26 12:56 | 只看该作者

回95楼fjh.

很多事,谁都能做。
有些事,只有一个人能做。

楼主的意思大概就是想从中找到那一个人吧。(猎头?)

还有从中可以看到中外程序员的差别。

使用特权

评论回复
98
myfaith| | 2008-8-26 12:59 | 只看该作者

以毒攻毒

借个假证给你

使用特权

评论回复
99
highgear| | 2008-8-26 23:01 | 只看该作者

出来打酱油

人不要皮,天下无敌。
97 楼的回答无敌了,这种事情在这里也只有你一个人能做。

使用特权

评论回复
100
dai_weis| | 2008-8-27 00:01 | 只看该作者

占个100楼

添砖加瓦

使用特权

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

本版积分规则