求助:单片机的简单编程题

老师留了两道单片机的编程题做思考题,允许去网上查找,哪位单片机方面的高手有时间的话,耽误片刻时间请帮忙做一下,感激不尽。
1.试编写程序,在内RAM的30H-4FH中查找关键字0AH,若有,则将内RAM的50H单元置为01H,并将找到的存放第一个关键字的单元地址存放在内RAM的52H单元中。
2.在内RAM从30H到3FH单元中存放着符号数,要求统计正数、零、负数的个数。结果分别存放在内RAM的40H、41H、42H三个单元中。
是单片机方面的问题,不是C语言或是汇编语言的。请帮下忙,用的是单片机的小汇编语言。(lijiang1313 这位仁兄,本人听课很认真,老师说我们学的属于小汇编语言。老师说单片机的语言方面一共是三本书,一本是《单片机原理》,一本是《C语言》,一本是《汇编语言》,我们只学了第一本,老师说做此题不需要那两本书的内容,故上面有此补充。)

1.
程序如下:编程思想是把起始地址30H放在R0中,然后用寄存器间址@R0表示地址里存放的数,并用CJNE指令和#0AH比较,不一样就跳转至NEXT,地址加1继续比,比之前先判断下R0中的数等于#50H吗,等于的话表示任务完成了,不用再比了,不等于则继续比。当出现相等数时,MOV 50H,#01H,MOV 52H,R0,将内RAM的50H单元置为01H,并将找到的存放第一个关键字的单元地址存放在内RAM的52H单元中。
MOV R0,#30H
MOV 50H,#00H
START:CJNE @R0,#0AH,NEXT
MOV 50H,#01H
MOV 52H,R0
SJMP EEND

NEXT: INC R0
CJNE R0,#50H,START

EEND:END

2.
单字节符号数,正数的特征是最高字节是0,负数则为1.可取出放在ACC中,先判断是否为0,如不为0则通过判断ACC.7是否等于0来确定是正还是负。
程序:
MOV 40H,#00
MOV 41H,#00H
MOV 42H,#00H
MOV R0,#30H
START:
MOV A,@R0
JNZ F1
F0:INC 41H
SJMP NEXT
F1:JNC ACC.7,FZH
FFU:INC 42H
SJMP NEXT
FZH:INC 40H
NEXT:INC R0
CJNE R0,#40H,START
EEND:END
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-12-11
呵呵,我来说下。光学了书上的“单片机”,不管你学的多牛,都没用。还是要动手实践。

还有KEIL编程 一般都用C语言了,学汇编只求看懂程序。
第2个回答  2008-12-08
看问题补充就知道没好好上课 对牛探亲
编程嘛,自然问你用汇编语言还是C了
竟然看不懂?
那怎么跟你说清?
第3个回答  2008-12-04
第一个题:
把地址给一个寄存器,把检查个数给一个寄存器 然后用SUBB 去检查C(看是否由借位) 判断检查个数是否为0 不为0就跳转来继续判断

第二个:
判断ACC.7 然后差不多就那样来作

我说得这些是用汇编哈
第4个回答  2008-12-04
查查课本也行啊,应该有类似的例子,用得原理就是两个数比较。
第5个回答  2008-12-19
这个应该不难
题1:分别读取30H-4FH,判断,如果等于0AH,停止判断,
然后 MOV 50H,#01
将刚才的地址 MOV 52H,@Rn 其中Rn是刚刚读取30H-4FH的具体地址

题2:和题1类似,判断后分别执行inc 40H之类加40H、41H、42H三个单元