久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4017|回復: 0
打印 上一主題 下一主題
收起左側

AVR的指令與匯編器系統及宏指令

[復制鏈接]
跳轉到指定樓層
樓主
ID:104287 發表于 2016-1-31 20:30 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
 AVR單片機指令系統是RISC結構的精簡指令集,CISC結構存在指令系統不等長,指令數多,CPU利用效率低,執行速度慢等缺陷。

ATmega16共有131條指令,按功能可分為五大類,它們是:

A.算術和邏輯運算指令(28 條); 
B.比較和跳轉指令(36 條); 
C.數據傳送指令(35 條); 
D.位操作和位測試指令(28 條); 
E.MCU控制指令(4 條)。

AVR一條指令的長度大多數為16位,還有少部分為32位。

AVR的指令的一般格式為:

 

操作碼用于指示CPU執行何種操作,是加法還是減法,是數據傳送還是數據移位。

一條指令可以只有操作碼,或第一操作數。

AVR的匯編語句的格式:

(1) [標號:] 偽指令 [操作數] [;注釋] 
(2) [標號:] 指令    [操作數] [;注釋]

1.AVR指令的尋址方式和尋址空間

指令的一個重要組成部分是操作數。指令給出參與運算數據的方式稱為尋址方式。CPU執行指令時,首先要根據地址獲取參加操作的操作數,然后才能對操作數進行操作,操作的結果還要根據地址保存在相應的儲存器或寄存器中。

下面介紹部分AVR的部分指令及尋址方式:

(1)單寄存器尋址 例:INC Rd ;操作:Rd←Rd+1

INC R5 ;將寄存器R5內容加1回放。

(2)雙寄存器尋址 例:ADD Rd, Rr ;操作:Rd←Rd+Rr

ADD R0, R1 ;將R0和R1寄存器內容相加,結果回放R0。

(3)I/O寄存器直接尋址 例:IN Rd, P ;操作:Rd←P。

IN R5, $3E ;讀 I/O 空間地址為$3E寄存器(SPH)的內容,放入寄存器R5。

(4)數據存儲器空間直接尋址 例:LDS Rd, K ;操作:Rd←(K)

LDS R18, $100 ;讀地址為$100的SRAM中內容,傳送到R18中。

(5)數據存儲器空間的寄存器間接尋址 例:LD Rd, Y ;操作:Rd←(Y),把以Y為指針的SRAM的內容送Rd。

LD R16, Y ;設Y=$0567,即把SRAM地址為$0567的內容傳送到R16中。

(6)程序存儲器空間取常量尋址

例:LPM            ;操作:R0←(Z),即把以Z為指針的程序存儲器的內容送R0。 
若 Z=$0100,即把地址為$0080的程序存儲器的低字節內容送R0。 
若 Z=$0101,即把地址為$0080的程序存儲器的高字節內容送R0。 
例:LPM R16, Z ;操作:R16←(Z),即把以Z為指針的程序存儲器的內容送R16。 
若 Z=$0100,即把地址為$0080 的程序存儲器的低字節內容送R16。 
若 Z=$0101,即把地址為$0080 的程序存儲器的高字節內容送R16。

(7)程序存儲器空間寫數據尋址

例:SPM ;操作:(Z)←R1:R0,把 R1:R0 內容寫入以 Z 為指針的程序存儲器單元。

(8)程序存儲器空間直接尋址

例:JMP $0100   ;操作:PC←$0100。程序計數器 PC 的值設置為$0100,接下來執行程序存儲器$0100 單元的指令代碼。 
例:CALL $0100 ;操作:STACK←PC+2; SP← SP-2; PC←$0100。先將程序計數器 PC 的當前值加 2 后壓進堆棧(CALL 指令為 2 個字長),堆棧指針計數器 SP 內容減 2,然后 PC 的值為$0100,接下來執行程序存儲器$0100 單元的指令代碼。

(9)程序存儲器空間相對尋址

例:RJMP $0100    ;操作:PC←PC+1+$0100。若當前指令地址為$0200(PC=$0200),即把$0301 送程序計數器 PC,接下來執行程序存儲器$0301 單元的指令代碼。 
例:RCALL $0100  ;操作:STACK←PC+1;SP←SP-2;PC←PC+1+$0100。若當前指令地址為$0200(PC=$0200),先將程序計數器 PC 的當前值加 1 后壓進堆棧,堆棧指針計數器SP 內容減 2,然后 PC 的值為$0301,接下來執行程序存儲器$0301 單元的指令代碼。

(10)數據存儲器空間堆棧寄存器 SP 間接尋址

例:PUSH R0 ;操作:STACK←R0;SP←SP-1。若當前 SP=$10FF,先把寄存器 R0 的內容送到 SRAM 的$10FF 單元,再將 SP 內容減 1,即 SP=$10FE。 
例:POP R1   ;操作:SP←SP+1;R1←STACK。若當前 SP=$10FE,先將 SP 內容加 1,再把 SRAM 的$10FF 單元內容送到寄存器 R1,此時 SP=$10FF。 
此外,在 CPU 響應中斷和執行 CALL 一類的子程序調用指令(SP = SP-2),以及執行中斷返回 IRET 和子程序返回 RET 一類的子程序返回指令中(SP = SP+2),都隱含著使用堆棧寄存器 SP 間接尋址的方式。

2.AVR匯編器偽指令

在匯編語言程序中可以使用一些偽指令。偽指令不屬于 CPU 指令集,編譯時并不產生實際的目標機器操作代碼,只是用于在匯編程序中對地址、寄存器、數據、常量等進行定義說明,以及對編譯過程進行某種控制等。AVR 的指令系統不包括偽指令,偽指令通常由匯編編譯系統給出。

偽指令一般以 . 開頭,如:

.DSEG ;RAM 數據段(SRAM) var1: .BYTE 1 ;保留 1 個字節的存儲單元,用 var1 標識 table: .BYTE tab_size ;保留 tab_size 個字節的存儲空間 .CSEG ;代碼段開始(Flash)   ldi r30, low(var1) ;將保留存儲單元 var1 起始地址的低 8 位裝入 Z   ldi r31, high(var1) ;將保留存儲單元 var1 起始地址的高 8 位裝入 Z   ld r1, Z ;將保留存儲單元的內容讀到寄存器 R1

 

 

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 美女久久久久久久 | 日韩视频在线播放 | 四虎永久在线精品免费一区二 | 精品1区| 亚洲精品久久久久久久久久久久久 | 欧美九九 | 国产精品国产a级 | 成人免费视频在线观看 | 亚洲欧洲国产视频 | 欧美视频在线看 | 亚洲国产福利视频 | 欧美精品v国产精品v日韩精品 | 国产午夜三级一区二区三 | 麻豆av网| 男女网站视频 | 精区3d动漫一品二品精区 | 激情91| 国内精品久久久久久 | 欧美三级久久久 | 中文字幕日韩一区 | 久久国产欧美一区二区三区精品 | 国产精品久久久久久婷婷天堂 | 欧美男人天堂 | 国产精品国产三级国产aⅴ中文 | 欧美日韩在线播放 | 一级毛片视频在线 | 日韩字幕| 亚洲视频中文字幕 | 欧美成人精品一区 | 国产精品一区二区日韩 | 国产精品完整版 | 玖玖视频免费 | 国产欧美性成人精品午夜 | 97久久精品午夜一区二区 | 一级片免费视频 | 国产精品1区 | 欧美日韩激情 | 久久久久久久久久久久久九 | 亚州综合在线 | 蜜桃免费一区二区三区 | 一区二区中文字幕 |