匯編語言程序設計課件17_第1頁
匯編語言程序設計課件17_第2頁
匯編語言程序設計課件17_第3頁
匯編語言程序設計課件17_第4頁
匯編語言程序設計課件17_第5頁
已閱讀5頁,還剩37頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

匯編語言程序設計

§4-1匯編語言程序設計基本概念

一、MCS-51指令操作數說明

1、語句格式[標號:]操作碼[操作數(目的操作數,源操作數)][;注釋]2、操作數對于立即數#data

(1)立即數188,可表示為#10111100B、#0BCH、#188

(2)MOVR0,#BLOCK;BLOCK為定義過的標號地址對于直接地址direct

(1)二進制、十進制、十六進制數,MOVA,30H

(2)定義過的標號地址,AGAIN:SJMPAGAIN

(3)表達式,如SUM+2,其中SUM為定義過的標號地址 (4)SFR寄存器名,如SP、DPH、DPL等對于偏移量rel

(1)可以是數值、標號地址、表達式 (2)使用特殊符號“$”,它代表本條轉移指令所在的地址,如LJMP$(死循環) (3)實際編程時,凡指令中用到地址(rel、addr11、addr16等)都可用標號地址代替實際地址,而地址的運算有匯編程序完成。二、常用偽指令匯編:將計算機不可直接識別的匯編語言源程序翻譯成機器語言的過程。分為計算機匯編和人工匯編兩種。匯編程序:具有完成匯編功能的程序。目標程序:匯編語言源程序經過匯編得到的機器語言程序。偽指令:提供匯編用控制信息的指令,只能被匯編程序所識別,不是單片機的CPU可執行的指令。 1、定位偽指令ORG(Origin)格式:[標號:]ORGm m:16位二進制數,代表地址。功能:指出匯編語言程序通過編譯,得到的機器語言程序的起 始地址。

2、定義字節偽指令DB(DefineByte)格式:[標號:]DBX1,X2,~XnXn:單字節二進制、十進制、十六進制數,或以‘’括起來的 字符串,數據符號。 功能:定義程序存儲器從標號開始的連續單元,用來存放常 數、字符和表格。

3、定義字偽指令DW(DefineWord)格式:[標號:]DWY1,Y2,~Yn Yn:雙字節二進制、十進制、十六進制數,或以‘’括起來的 字符串,數據符號。 功能:同DB,不同的是為16位數據。 4、匯編結束命令END

格式:[標號:]END

功能:END是匯編語言源程序的匯編結束標志,在它后面所 寫的指令均不予處理。

5、等值命令EQU

格式:字符名稱EQU數或匯編符號 功能:將一個數或特定的匯編符號賦予規定的字符名稱。先 定義后使用。

6、數據地址賦值命令DATA

格式:字符名稱DATA表達式 功能:將數據地址或代碼地址賦予規定的字符名稱三、匯編語言程序的結構

1、程序設計的基本步驟 一般步驟為: (1)分析題意,明確要求; (2)建立思路,確定算法; (3)編制框圖,繪出流程; (4)編寫程序,上機調試; 顯然,算法和流程是至關重要的。程序結構有簡單順序、分支、循環和子程序等幾種基本形式。

2、畫流程圖 畫流程圖是指用各種圖形、符號、指向線等來說明程序設計的過程。國際通用的圖形和符號說明如下:

橢圓框:起止框,在程序的開始和結束時使用。 矩形框:處理框,表示要進行的各種操作。

菱形框:判斷框,表示條件判斷,以決定程序的流向。 指向線:流程線,表示程序執行的流向。 圓圈:連接符,表示不同頁之間的流程連接。 各種幾何圖形符號如下圖所示?!?-2匯編語言程序的基本結構形式

一、簡單程序的設計

例4-1

已知兩個壓縮BCD碼分別放在內部RAM的31H30H和33H32H等4個單元中,試編程求和,結果存入R4R3R2中。

分析:流程如圖: 程序如下:

ORG0000H LJMPMAIN ORG 0040HMAIN: MOV A, 30H ADD A, 32H DA A MOV R2,A MOV A,31H ADDC A,33H DA A MOV R3,A CLR A MOV ACC.0,C

MOV R4, A HERE: SJMP HERE END例4-2

利用查表指令將內部RAM中20H單元的壓縮BCD碼拆開,轉換成相應的ASCII碼,存入21H、22H中,高位存在22H。

分析:控制流程圖(略),程序如下:

START: MOV DPTR,#TABLE MOV A, 20H ANL A, #0FH MOVC A, @A+DPTR MOV 21H, A MOV A, 20H ANL A, #0F0H SWAP A MOVC A, @A+DPTR MOV 22H, A SJMP $

TABLE: DB 30H,31H,32H,33H,34H DB 35H,36H,37H,38H,39H二、分支程序設計1、單分支程序 單分支結構程序使用轉移指令實現,即根據條件對程序的執行進行判斷,滿足條件是轉移執行,否則順序執行。在MCS-51指令系統中條件轉移指令有: (1)判A轉移指令JZ、JNZ; (2)判位轉移指令JB、JNB、JBC、JC、JNC; (3)比較轉移指令CJNE; (4)減1不為0轉移指令DJNZ;

例4-3

假定在外部RAM中有ST1、ST2和ST3共3個連續單元,其中ST1、ST2單元中分別存放著兩個8位無符號數,要求找出其中的大數并存入ST3單元。

分析:兩個無符號數的大小比較可利用兩數相減是否有借位來判斷,流程圖和程序如下所示:START:CLR C MOV DPTR,#ST1 MOVX A, @DPTR MOV R7, A INC DPTR MOVX A, @DPTR SUBB A, R7 JC BIG1 MOVX A, @DPTR SJMP BIG2 BIG1:XCH A, R7BIG2:INC DPTR MOVX @DPTR,A SJMP $2、多分支程序 (1)嵌套分支結構例4-4

設變量X存放于30H單元,函數值Y存放31H單元。試按照式:

1 X>0 Y= 0 X=0的要求給Y賦值

-1 X<0

分析:X是有符號數,判斷符號位是0還是1可利用JB或JNB指令。 判斷X是否等于0則直接可以使用累加器A的判0指令。 流程、程序如下頁:

START: MOV A,30H JZ OVER JNB ACC.7,LAB1 MOV A, #0FFH SJMP OVER LAB1: MOV A, #1 OVER: MOV 31H, A SJMP $ (2)多重分支結構 利用MCS-51單片機的散轉指令JMP@A+DPTR,可方便地實現多重分支控制,因此,又稱為散轉程序。假定多路分支的最大序號為n,則分支的結構如圖所示。例4-5

根據條件0、1、2…、n,分別轉向處理程序PRG0、

PRG1、…、PRGn,條件K設在R2中。START: MOV DPRT, #TABLE MOV A, R2 ADD A, R2 JNC NEXT INC DPH NEXT: JMP @A+DPTR TABLE: AJMP PRG0

… … AJMP PRGn

PRG0: …

PRGn: …

三、循環程序設計1、循環程序的結構循環程序包括以下四個部分: 置循環初值 循環體 循環控制變量修改 循環終止控制常用于循環控制的指令有:DJNZ、CJNE、JC、JNC等控制類指令。

2、單循環 終止循環控制采用計數的方法,即用一個寄存器作為循環次數計數器,每次循環后計數加1或減1,達到終止值后退出循環。例4-6

計算50個8位二進制數(單字節)之和。要求:50個數存放在30H開頭的內部RAM中,和放在R6R7中。

分析:采用DJNZ循環體的流程框圖如下頁所示,在參考程序中,R0為數據地址指針,R2為減法循環計數器。

在使用DJNZ控制時,循環計數器初值不能為0,當為0時,第一次進入循環執行到DJNZ時,減1使R2變為FFH,循環次數成了256,顯然不合題意。START:MOV R6, #0 MOV R7, #0 MOV R2, #50 MOV R0, #30HLOOP:MOV A, R7 ADD A, @R0 MOV R7, A CLR A ADDC A, R6 MOV R6, A INC R0 DJNZ R2, LOOP SJMP $ 3、多重循環如果在一個循環程序中嵌套了其他的循環程序,稱為多重循環程序。在用軟件實現延時時顯得特別有用。例4-7

設計1秒延時子程序,假設fosc=12MHz。

分析:軟件延時與指令的執行時間關系密切,在使用12MHz晶振時,一個機器周期的時間為1,us,執行一條DJNZ指令的時間為2us,我們可以采用三重循環的方法寫出延時1秒的子程序流程、程序如下圖所示:DELAY:MOV R7, #10;

DL3: MOV R6, #200 ;

DL2: MOV R5, #250 ;

DL1: DJNZ R5, DL1 ;

DJNZ R6, DL2 ;

DJNZ R7, DL3 ;

RET4、按條件轉移控制的循環

例4-8

把內部RAM中從ST1地址開始存放的數據傳送到以ST2開始的存儲區中,數據塊長度未知,但已知數據塊的最后一個字節內容為00H,而其它字節均不為0。并設源地址與目的地址空間不重復。

分析:顯然,我們可以利用判斷每次傳送的內容是否為0這一條件來控制循環。也可用CJNE來比較與0是否相等設計。利用判A轉移控制的循環流程圖如下圖所示。START:MOV R0, #ST1 MOV R1, #ST2LOOP:MOV A, @R0 JZ ENT MOV @R1,A INC R0 INC R1 SJMP LOOP ENT:RET四、查表程序設計用于查表的指令有兩條:MOVCA,@A+PC;MOVCA,@A+DPTR;

當使用DPTR作為基址寄存器時查表比較簡單,查表的步驟分三步

1)基址(表格首地址)送DPTR數據指針;

2)變址值(在表中的位置是第幾項)送累加器A;

3)執行查表指令MOVCA,@A+DPTR,進行讀數,查表結果送回累加器A。

當使用PC作為基址寄存器時,由于PC本身是一個程序計數器,與指令的存放地址有關,查表時其操作有所不同。查表的步驟也分三步:

1)變址值(在表中的位置是第幾項)送累加器A;

2)偏移量(查表指令的下一條指令的首地址到表格首地址之間的字節數)+A→A;(修正)

3)執行查表指令MOVCA,@A+PC。

例4-9二位十六進制數與ASCII碼的轉換程序。設數值在R2中,結果低位存在R2中,高位存在R3中。 分析:對于2位16進制數必須進行2次查表,因此,取數后通過屏蔽的方法來實現高低位分開。(1)利用DPTR作基址的參考程序如下HEXASC:MOV DPTR, #TABLE MOV A, R2

ANL A, #0FH

MOVC A, @A+DPTR ;查表

XCH R2, A ANL A, #0F0H

SWAP A ;

MOVC A, @A+DPTR ;查表

MOV R3, A RETTABLE: DB30H,31H,32H,33H,34H ;ASCII表

DB35H,36H,37H,38H,39H DB41H,42H,43H,44H,45H,46H(2)利用PC作基址的參考程序如下:HEXASC:MOV A, R2 ANL

A, #0FH ADD A, #9 MOVC A, @A+PC ;查表

XCH R2, A ANL

A, #0F0H SWAP A ADD A, #2 MOVC A, @A+PC ;查表

MOV R3, A RETTABLE:DB“0”,“1”,…,“F” ;ASCII表

例4-10

利用查表指令,根據R2的分支序號找到對應的轉向入口地址送DPTR,清ACC后,執行散轉指令JMP@A+DPTR,轉向對應的分支處理, 假定分支處理程序在ROM64KB的范圍內分布。程序如下:

ORG1000H START: MOV DPTR, #TAB MOV A, R2 ADD A, R2 JNC ST1

INC DPH

(轉下頁)

ST1: MOV R3, A MOVC A, @A+DPTR ;查表

XCH A, R3 INC A MOVC A, @A+DPTR MOV DPL,A MOV DPH,R3 CLR A JMP @A+DPTR TAB: DW PRG0 DW PRG1 ……五、應用控制流程設計1、控制流程設計的基本方法 在單片機的控制系統中,為了實現系統的自動控制,必須將控制現場的信息輸入到單片機,經過計算機的處理以后以被控對象能夠接受的形式輸出到執行機構,實現對現場的控制。例4-11

電機的簡單起??刂?;其框圖如下頁圖a所示

1)分析:簡單的電機起動停止控制,其控制的示意圖及I/O分配如圖b所示。輸入信號:啟動按鈕SB1、停止按鈕SB2

輸出信號:繼電器KA

假定:按下按鈕,相應的接口信號為低電平(P1.1=0)時;若:程序使P1.3=1,即KA=1;則:電機啟動。

2)按照上述的控制思路,我們可以方便的畫出流程圖,如下圖所示。

ORG1000HSTR:MOV P1, #00000110BWT1:JB P1.1, WT1 ;啟動?

SETB P1.3 ;電機啟

WT2:JB P1.2, WT2 ;停止?

CLR P1.3 ;電機停

SJMP WT1END2、應用程序控制流程設計

例4-12

某機床動力頭,其行程如圖(a)所示,SQ1、SQ2為左、右行程開關,要求:

1)每次按SB1啟動,工作3個來回后停止,等待下 次啟動

2)每次按SB2按鈕,在完成當前進給后,停在初始 位SQ1處,等待下次啟動;分析:

1硬件原理圖,如圖(b)所示,其中:輸入信號:啟動按鈕P1.0、停止P1.1、左右行程開關

P1.2、P1.3;輸出信號:前進LED燈P1.7、后退LED燈P1.6。

2控制流程:如圖(c)。3)匯編程序

MAIN:MOV R0, #00H MOV P1, #0FH WT1:JB P1.0, WT1 LOOP:SETB P1.7

WT2:JB P1.3, WT2 CLR P1.7 SETB P1.6 INC R0 LCALL DIR WT3:JB P1.2, WT3 CLR P1.6 JNB P1.1, WT1 CJNE R0, #3, LOOP MOV R0, #00

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論