搜索
bottom↓
回复: 33

花了点时间,整理了一份AVR单片机的机器码,感叹Atmel公司设计的指令集确实NB,AVR如果真

[复制链接]

出0入0汤圆

发表于 2010-10-17 00:45:04 | 显示全部楼层 |阅读模式
-------------------------+---------------
  0000 0000 0000 0000       NOP            
  0000 0001 dddd rrrr       MOVW           
  0000 0010 dddd rrrr       MULS Rd, Rr   
  0000 0011 0ddd 0rrr       MULSU Rd, Rr   
  0000 0011 0ddd 1rrr       FMUL Rd, Rr   
  0000 0011 1ddd 0rrr       FMULS Rd, Rr   
  0000 0011 1ddd 1rrr       FMULSU Rd, Rr  
  0000 01rd dddd rrrr       CPC Rd, Rr     
  0000 10rd dddd rrrr       SBC Rd, Rr     
  0000 11rd dddd rrrr       ADD Rd, Rr     
-------------------------+---------------
  0001 00rd dddd rrrr       CPSE Rd, Rr   
  0001 01rd dddd rrrr       CP   Rd, Rr   
  0001 10rd dddd rrrr       SUB  Rd, Rr   
  0001 11rd dddd rrrr       ADC  Rd, Rr   
-------------------------+---------------
  0010 00rd dddd rrrr       AND  Rd, Rr   
  0010 01rd dddd rrrr       EOR  Rd, Rr   
  0010 10rd dddd rrrr       OR   Rd, Rr   
  0010 11rd dddd rrrr       MOV  Rd, Rr   
-------------------------+---------------
  0011 kkkk dddd kkkk       CPI  Rd, K     
  0100 kkkk dddd kkkk       SBCI Rd, K     
  0101 kkkk dddd kkkk       SUBI Rd, K     
  0110 kkkk dddd kkkk       ORI  Rd, K     
  0111 kkkk dddd kkkk       ANDI Rd, K     
-------------------------+---------------
  10q0 qq0d dddd 0qqq       LDD  Rd, Z+q   
  10q0 qq0d dddd 1qqq       LDD  Rd, Y+q   
  10q0 qq1r rrrr 0qqq       STD  Z+q, Rr   
  10q0 qq1r rrrr 1qqq       STD  Y+q, Rr   
-------------------------+---------------
  1011 0AAd dddd AAAA       IN   Rd, A     
  1011 1AAr rrrr AAAA       OUT  A, Rr     
-------------------------+---------------
  1100 kkkk kkkk kkkk       RJMP  k        
  1101 kkkk kkkk kkkk       RCALL k        
  1110 kkkk dddd kkkk       LDI  Rd, K     
-------------------------+---------------
  1111 00kk kkkk ksss       BRBS s, k      
  1111 01kk kkkk ksss       BRBC s, k      
  1111 100d dddd 0bbb       BLD Rd, b      
  1111 101d dddd 0bbb       BST Rd, b      
  1111 110r rrrr 0bbb       SBRC Rr, b     
  1111 111r rrrr 0bbb       SBRS Rr, b     
-------------------------+---------------
  1001 000d dddd 0000 k16   LDS  Rd, K     
  1001 000d dddd 0001       LD  Rd, Z+     
  1001 000d dddd 0010       LD  Rd, -Z     
  1001 000d dddd 0100       LPM Rd, Z      
  1001 000d dddd 0101       LPM Rd, Z+     
  1001 000d dddd 0110       ELPM Rd, Z     
  1001 000d dddd 0111       ELPM Rd, Z+   
  1001 000d dddd 1001       LD  Rd, Y+     
  1001 000d dddd 1010       LD  Rd, -Y     
  1001 000d dddd 1100       LD  Rd, X      
  1001 000d dddd 1101       LD  Rd, X+     
  1001 000d dddd 1110       LD  Rd, -X     
  1001 000d dddd 1111       PUSH Rd        
-------------------------+---------------
  1001 001r rrrr 0000 k16   STS K, Rr      
  1001 001r rrrr 0001       ST  Z+, Rr     
  1001 001r rrrr 0010       ST  -Z, Rr     
  1001 001r rrrr 0100       XCH  Z, Rd     
  1001 001r rrrr 0101       LAS Z, Rr  ?   
  1001 001r rrrr 0110       LAC Z, Rr  ?   
  1001 001r rrrr 0111       LAT Z, Rr  ?   
  1001 001r rrrr 1001       ST  Y+, Rr     
  1001 001r rrrr 1010       ST  -Y, Rr     
  1001 001r rrrr 1100       ST  X, Rr      
  1001 001r rrrr 1101       ST  X+, Rr     
  1001 001r rrrr 1110       ST  -X, Rr     
  1010 001d dddd 1111       POP Rr         
-------------------------+---------------
  1001 010d dddd 0000       COM Rd         
  1001 010d dddd 0001       NEG Rd         
  1001 010d dddd 0010       SWAP Rd        
  1001 010d dddd 0011       INC Rd         
  1001 010d dddd 0101       ASR Rd         
  1001 010d dddd 0110       LSR Rd         
  1001 010d dddd 0111       ROR Rd         
  1001 010d dddd 1010       DEC Rd         
-------------------------+---------------
  1001 010k kkkk 110k k16   JMP k         
  1001 010k kkkk 111k k16   CALL k         
-------------------------+---------------
  1001 010 00sss 1000       BSET s         
  1001 010 01sss 1000       BCLR s         
  1001 010 10000 1000       RET            
  1001 010 10001 1000       RETI           
  1001 010 11000 1000       SLEEP         
  1001 010 11001 1000       BREAK         
  1001 010 11010 1000       WDR            
  1001 010 11100 1000       LPM            
  1001 010 11101 1000       ELPM           
  1001 010 11110 1000       SPM            
  1001 010 11111 1000       SPM Z+         
-------------------------+---------------
  1001 010 00000 1001       IJMP           
  1001 010 00001 1001       EIJMP         
  1001 010 10000 1001       ICALL         
  1001 010 10001 1001       EICALL         
-------------------------+---------------
  1001 0100 kkkk 1011       DES K         
-------------------------+---------------
  1001 0110 kkdd kkkk       ADIW Rdl, k   
  1001 0111 kkdd kkkk       SBIW Rdl, k   
-------------------------+---------------
  1001 1000 AAAA Abbb       CBI  A, b      
  1001 1010 AAAA Abbb       SBI  A, b      
  1001 1001 AAAA Abbb       SBIC A, b      
  1001 1011 AAAA Abbb       SBIS A, b      
-------------------------+---------------
  1001 11rd dddd rrrr       MUL Rd, Rr     
-------------------------+---------------

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2010-10-17 01:09:07 | 显示全部楼层
mk

出0入0汤圆

发表于 2010-10-17 01:38:30 | 显示全部楼层
可惜了

出0入0汤圆

发表于 2010-10-17 01:51:39 | 显示全部楼层
当你看到ARM的机器码,你就不为AVR赶到可惜,而是认为其死亡是必然了。

出0入0汤圆

发表于 2010-10-17 02:08:11 | 显示全部楼层
"当你看到ARM的机器码,你就不为AVR赶到可惜,而是认为其死亡是必然了。"

so true. like someone told me recent: you should keep PIC/AVR/8051 at ARM's length.

出0入0汤圆

 楼主| 发表于 2010-10-17 08:47:56 | 显示全部楼层
回复【3楼】taishan  
-----------------------------------------------------------------------

有整理好的ARM和Thumb机器码表吗?

出0入0汤圆

 楼主| 发表于 2010-10-17 08:49:28 | 显示全部楼层
回复【4楼】millwood0  
"当你看到arm的机器码,你就不为avr赶到可惜,而是认为其死亡是必然了。"
so true. like someone told me recent: you should keep pic/avr/8051 at arm's length.

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

他的意思是 arm的代码尺寸 比pic/avr/8051都好吗?

出0入0汤圆

发表于 2010-10-17 09:44:00 | 显示全部楼层
如果把AVR的指令全部规划为32位,和ARM的差别大吗?

出0入0汤圆

发表于 2010-10-17 10:00:27 | 显示全部楼层
AVR的指令都是16bit宽,编码效率根本不算好,
有本事像51那样,尽量用8bit的宽度来编码,
对于8bit的宽度,我最推崇Motoral的6809的指令集。

6809汇编指令集中这么多寻址方式,是汇编语言高手的乐园,可以充分发挥你各种编程技巧,可惜的是不支持位编程。




不过固定宽度的指令集,对于指令预存取、预测实现难度方便得多,cpu的时钟频率也容易提高。

出0入0汤圆

发表于 2010-10-17 11:42:06 | 显示全部楼层
典型的工程师视界。

用最小成本完成任务就是最好的方案,管你用MCU还是CPU。

出0入0汤圆

 楼主| 发表于 2010-10-17 12:09:12 | 显示全部楼层
回复【9楼】gamethink  
回复【8楼】locky_z
avr的指令都是16bit宽,编码效率根本不算好,
有本事像51那样,尽量用8bit的宽度来编码,
对于8bit的宽度,我最推崇motoral的6809的指令集。
6809汇编指令集中这么多寻址方式,是汇编语言高手的乐园,可以充分发挥你各种编程技巧,可惜的是不支持位编程。
不过固定宽度的指令集,对于指令预存取、预测实现难度方便得多,cpu的时钟频率也容易提高。
-----------------------------------------------------------------------
难道51所谓可变宽度的汇编指令很优秀吗?
我不认为.
-----------------------------------------------------------------------

支持你的看法。
事实上,如果你打算自己“DIY”一套8位单片机的RISC指令集,要求采用16bit定长指令格式,并且支持8bit的立即数,12bit的相对寻址。
你DIY出来的指令集可能和AVR的没有很大的差别。所以如果你从自己想“DIY”一套8位单片机的RISC指令集这个角度来考虑问题,可能最后
得到的就差不多是一个AVR的指令集。

要说机器码的“优雅”,可能世界上没有一个指令集能比得上Knuth设计的MMIX指令集了,遗憾的是,没有商业上的实现,甚至没有FPGA上的实现。

出0入0汤圆

发表于 2010-10-17 12:16:32 | 显示全部楼层
“有本事像51那样,尽量用8bit的宽度来编码”

MCS-96系列的指令更加混乱,1个字节到7个自己的指令长度都有,如果遭遇干扰,程序就不是“跑飞”了。

出0入0汤圆

发表于 2010-10-17 12:42:02 | 显示全部楼层
AVR是8位机,跟ARM有什么好比的,

AVR32是32位的道可以跟ARM比比,其实AVR32很像ARM

出0入0汤圆

 楼主| 发表于 2010-10-17 13:01:09 | 显示全部楼层
前面taishan提到ARM的机器码,所以我特意去找ARM的机器码看了下。从ARM体系结构手册中找出了这样两张图


ARM指令机器码表 (原文件名:ARM.png)


Thumb指令机器码表 (原文件名:Thumb.png)

出0入0汤圆

发表于 2010-10-17 13:18:59 | 显示全部楼层
MIPS早起的指令结构还是比较优雅的,See MIPS Run里边有介绍。

ARM的指令集在发展到ARMv7-A之后,SIMD,饱和计算等等扩展,让指令集看起来已经没有原来那么好了。显得有点乱。

出0入0汤圆

发表于 2010-10-17 14:35:03 | 显示全部楼层
谁要会用机器码那真是牛X坏了.

出0入0汤圆

发表于 2010-10-17 15:27:46 | 显示全部楼层
回复【16楼】HYLG
谁要会用机器码那真是牛x坏了.
-----------------------------------------------------------------------

通过查阅指令表,手工汇编成机器码是可以的

出0入0汤圆

发表于 2010-10-17 15:52:31 | 显示全部楼层
看来大家都已经了解CISC和RISC了,有人知道MISC吗??

出0入0汤圆

发表于 2010-10-17 16:50:55 | 显示全部楼层
搜了下MISC, MISC(Macroinstruction Set Computer,宏指令集计算机)

http://www.pkucn.com/viewthread.php?tid=197301


有没这回事还是问题

出0入0汤圆

 楼主| 发表于 2010-10-17 17:51:15 | 显示全部楼层
再来看看大神Knuth设计的MMIX:
64位体系结构,256个通用寄存器,支持寄存器栈,32个特殊功能寄存器。

(原文件名:MMIX Opcodes Table.png)
详细请看:
http://www-cs-faculty.stanford.edu/~uno/mmix.html

出0入0汤圆

发表于 2010-10-17 20:31:41 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-10-25 21:12:46 | 显示全部楼层
机器码,也没什么。我就用过机器码直接写过程序。刚毕业没钱,买不起编程器,当然也没有电脑。只能用机器码。现在什么都有了。

出0入0汤圆

发表于 2010-10-27 00:17:32 | 显示全部楼层
机器码,也没什么。我就用过机器码直接写过程序。刚毕业没钱,买不起编程器,当然也没有电脑。只能用机器码。现在什么都有了。

佩服!

相當於打孔 带子

出0入0汤圆

发表于 2010-10-27 09:04:54 | 显示全部楼层
适用就好,管是什么MCU,ARM的

出0入0汤圆

发表于 2010-10-27 09:17:42 | 显示全部楼层
没觉得AVR指令多NB,除了看指令效率,还要看代码密度。AVR的代码密度是比较差的。

出0入0汤圆

发表于 2010-10-27 09:22:52 | 显示全部楼层
同样的应用,AVR要比其他单片机需要更多的程序空间,而闪存是要占成本的。

出0入0汤圆

发表于 2010-10-27 09:42:18 | 显示全部楼层
回复【22楼】ssyniuej  
机器码,也没什么。我就用过机器码直接写过程序。刚毕业没钱,买不起编程器,当然也没有电脑。只能用机器码。现在什么都有了。
-----------------------------------------------------------------------

前辈说的是那种带键盘的单板计算机吧,大学里玩过。lED显示,一行行的机器码按顺序输入到EROM中。

出0入0汤圆

发表于 2011-2-5 04:43:20 | 显示全部楼层
我也是从机器码开始学的,有个万利的8051板子

出0入0汤圆

发表于 2011-2-8 00:07:19 | 显示全部楼层
顶一个。真正搞编程的人,机器码是肯定需要的。

出0入0汤圆

发表于 2011-2-10 13:39:34 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-11-3 10:13:07 | 显示全部楼层
不错,收藏了

出0入0汤圆

发表于 2014-8-8 20:54:22 | 显示全部楼层
楼主,你好!请教一个问题,比如说:0001 11rd dddd rrrr    ADC  Rd, Rr 中的:“11rd”的“rd”是什么?“dddd”又是什么?“rrrr”又是什么?

出0入0汤圆

发表于 2014-8-8 21:14:58 来自手机 | 显示全部楼层
不错 谢谢分享
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 13:18

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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