2013-06-03 88 views
0

我堅持下面的代碼,並沒有一個基本的理解它是如何工作的?AVR彙編語言代碼

確定的r22十進制值執行下面的代碼行後:R22的

clr r22 

dec r22 

push r22 

dec r22 

pop r5 

值=?

+0

爲什麼不運行它找出? – Michael

+1

起始頁11的[AVR指令集](http://www.atmel.com/Images/doc0856.pdf)應列出指令的具體內容。 – Vlad

回答

1

那麼,一次只處理一條指令,然後弄清楚每個指令的作用。

  1. CLR R22:設置寄存器爲0
  2. 癸R22:此遞減,因此它下溢從0到255
  3. 推R22:該推壓255( r22)到堆棧上。
  4. 癸R22:此遞減R22,R22所以現在爲254
  5. 彈出R5:此彈出從堆棧中並將其存儲在r5中,只要不影響R22的值(255)。

所以,除非我得到的東西錯了,答案是R22 = 254

+0

非常感謝。我沒有意識到dec22會從0到255. – Jan

0

寄存器(以8位),從0到FF(DEC R22)到FE(DEC R22)

如果R22是4位,那麼E = 14

如果R 22是8位,則FE = 254

如果R 22是16位則FFFE = 65534

一個ND等

處理器寄存器是像汽車裏程表 當它到達99999英里不言而喻轉發到00000

寄存器到達FFFF,15-15-15-15(未9-9-9- 9,因爲它不是十進制的十六進制),當我們+1它返回到0-0-0-0

+0

_「如果r22是8位,那麼E = 14」_否,在這種情況下'r22'將是'0xFE'。 「0xE」只有4位。 – Michael

+0

oops。糾正它 – ady

+0

我認爲這是一個8位寄存器他們要求,但我想我現在明白了。感謝您的幫助。 – Jan