佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1297|回复: 3

一些 Asm Code 疑问

[复制链接]
发表于 10-11-2007 03:35 PM | 显示全部楼层 |阅读模式
我现在修读着microprocessor,有一些code不会写,希望各位大大给点hint

其中一题考题:
write a macro
;Macro ReverseNibbles
;pre  : Temp = B7B6B5B4 B3B2B1B0
;post: Temp = B0B1B2B3 B4B5B6B7

write a subroutine
;Subroutine GetAverage
;get value from array in RAM (top address already store in X(16-bits register))
;post : Average(R16) = average of all the value in array

*我现在学的microcontroller是 AT Mega16,没有Divide function


有人能给点提示吗?
谢谢
回复

使用道具 举报


ADVERTISEMENT

发表于 11-11-2007 06:43 PM | 显示全部楼层

回复 #1 sushi-x 的帖子

首先,先声明我不会ASM, 也不会AT Mega16,

很粗浅的hint就是,
1. 你可以用shift bit, rotate bit的instrustion。

2. 没有Divide function ?
参考:
AVR200: Multiply and Divide Routines
http://www.atmel.com/dyn/resources/prod_documents/doc0936.pdf
回复

使用道具 举报

 楼主| 发表于 12-11-2007 08:29 PM | 显示全部楼层
关于part1, 我的方法是。。。。

.Macro ReverseNibbles
 sbrc @0,0
 sbr   @1,7
 sbrc @0,1
 sbr   @1,6
 sbrc @0,2
 sbr   @1,5
 sbrc @0,3
 sbr   @1,4
 sbrc @0,4
 sbr   @1,3
 sbrc @0,5
 sbr   @1,2
 sbrc @0,6
 sbr   @1,1
 sbrc @0,7
 sbr   @1,0
 mov @0,@1
.EndMacro

*sbrc   = skip if bit in register is clear
*sbr     = set bit in register
*@0/1 = parameter for macro

我还没见过那么长的macro.....
如果是做工肯定给老板骂死...

part 2
Armega 16 的确没有divide function,这是lecturer特地刁难我们。。。
他给的hint是 substract  
回复

使用道具 举报

发表于 12-11-2007 09:09 PM | 显示全部楼层
原帖由 sushi-x 于 12-11-2007 08:29 PM 发表
part 2
Armega 16 的确没有divide function,这是lecturer特地刁难我们。。。
他给的hint是 substract

对啊, 以前的MCU也是没有除法和乘法的, 要除法, 就是减法,要乘法, 就是加法。

我上面放的那个routine, 那个就是答案。。。
欢迎你继续讨论。
回复

使用道具 举报

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

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 25-12-2024 01:35 PM , Processed in 0.127202 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表