官术网_书友最值得收藏!

3.3.1 數據傳送指令

數據傳送是最基本、最主要的操作,共有29條,可分為內部RAM數據傳送、外部RAM數據傳送、程序存儲器數據傳送、數據互換和堆棧操作5組。

1.內部RAM傳送指令16條

該組指令用于單片機內部數據存儲區和寄存器之間的數據傳送,指令格式見表3-1。

表3-1 內部RAM傳送指令

(續)

例3-1】設片內RAM單元存放的數據是:(50H)=55H,(51H)=66H,(66H)=77H。分析以下指令順序執行的目的操作數。

2.外部RAM傳送指令4條

該組指令用于單片機外部數據存儲區和寄存器之間的數據傳送,指令格式見表3-2。

表3-2 外部RAM傳送指令

這組指令采用了間接尋址方式,當采用16位數據指針DPTR間接尋址,完成DPTR所指定的片外數據存儲器與A的數據傳送時,可尋址范圍達64KB。其中,低8位地址由P0口輸出,高8位地址由P2口輸出。當采用Ri(R0或R1)間接尋址,完成以R0或R1為間接地址的片外數據存儲器與A的數據傳送時,低8位地址由Ri指出,由P0口輸出,高8位地址需要事先用指令“MOV P2,#data”指定。

例3-2】以下程序實現把片內60H單元的數送到片外RAM的2000H單元。

解1:MOV A,60H

MOV DPTR,#2000H

MOV @DPTR,A

解2:MOV A,60H

MOV R0,#00

MOV P2,#20H

MOV @R0,A

3.程序存儲器傳送指令2條

該組指令用于從單片機內部ROM讀取數據給累加器,指令格式見表3-3。

表3-3 程序存儲器傳送指令

這組指令又叫查表指令,屬于變址尋址方式,是對存放于程序存儲器中的數據表格進行查找傳送。

第一條指令MOVC A,@A+DPTR,以DPTR作為基址寄存器,用來存放表的起始地址,它可以指向外部ROM的64KB范圍內的任意一個地址單元,累加器A作為變址寄存器,在源操作數中作為數據表格起始地址的偏移地址。

第二條指令MOVC A,@A+PC,以PC作為基址寄存器,但指令中PC的地址是可以變化的,它隨著指令在程序中位置的不同而不同,一旦指令在程序中位置確定以后,PC中內容也被給定,累加器A作為變址寄存器,在源操作數中作為當前PC值到數據表格中要訪問數據的偏移字節,由于A的長度為一個字節,使用能夠尋找的偏移地址應在FFH之內。

例3-3】用查表指令把數據表TAB中第三個單元的數傳給累加器A,比較使用兩種查表指令的不同。

1)使用MOVC A,@A+PC

2)使用MOVC A,@A+DPTR

以上兩段程序執行的結果,累加器A中的數都為TAB表第3個單元中的43H。

4.堆棧指令

“堆棧”就是在單片機內部SRAM中定義一塊存儲空間,對這塊區間進行數據“先進出后”的操作,操作的單元由堆棧指針指定。堆棧操作有進棧(PUSH)和出棧(POP)兩條,操作數由直接地址確定,屬于直接尋址,指令格式見表3-4。

表3-4 堆棧指令

例3-4】通過堆棧,交換兩個單元的數據。設(30H)=#12H,(31H)=#34H。

5.字節交換指令5條

該組指令用于字節交換和半字節交換,指令格式見表3-5。

表3-5 字節交換指令

例3-5】設A=60H,R6=A5H,(60H)=69H,順序執行以下指令的結果。

主站蜘蛛池模板: 洛南县| 九龙县| 十堰市| 凌云县| 宜宾市| 云安县| 延安市| 什邡市| 于都县| 闻喜县| 定边县| 治多县| 贡觉县| 正阳县| 齐齐哈尔市| 宁河县| 华阴市| 绥芬河市| 鄱阳县| 西吉县| 龙胜| 屏山县| 黑河市| 宽城| 年辖:市辖区| 荔浦县| 深泽县| 曲阳县| 北宁市| 宜城市| 如东县| 新蔡县| 香格里拉县| 大石桥市| 灵宝市| 莆田市| 南雄市| 历史| 泰兴市| 嵩明县| 互助|