第3章 程式和程式設計

2022-12-10 21:27:05 字數 3567 閱讀 1173

通過前序課程(c語言程式設計、組合語言程式設計、資料結構等)應該已經掌握(不是學過)了程式設計、演算法、程式設計環境和程式除錯的基本內容。

請拿出紙筆,回答以下問題:

(請把方框看成紙張的邊緣,按示範的位置填寫指定內容!今後作業和實驗報告都按照這樣的格式!)

參***:

解釋影印材料:微控制器程式框架

1、任何語言的程式都有乙個嚴格的結構(為什麼?)

2、c語言的程式結構:預處理命令

主函式子函式

3、組合語言程式結構:偽指令

真)指令**

偽指令與程式功能無關,而是通知匯程式設計序對後續內容做什麼樣的處理。偽指令不會形成指令機器碼。

(真)指令表示程式的功能,每條真指令彙編以後得到一條指令機器碼。

4、不同的cpu有特定的指令系統從而有特定的程式格式(特定的偽指令和真指令)。

(1)8086cpu的程式格式:

data segment

變數 db/dw 資料表

data ends

extra segment

變數 db/dw 資料表

extra ends

code segment

assume cs:code,ds:data,es:extra

main proc far

start: mov ax,data

mov ds,ax

mov ax,extra

mov es,ax

主程式的具體內容

call sub1

mov ah,4ch

int 21h

main endp

sub1 proc near

;子程式1的具體內容

retsub1 endp

… …code ends

end start

(2)51微控制器的cpu比8086簡單,沒有儲存器分段的必要,所以偽指令少得多,格式也簡單:

;第一部分為若干符號常量定義偽指令(可有可無,複雜程式一般都有!)

st_addr equ 0000h

r7_ls data 30h

r6_ls data 31h

start_key bit 20h.0

time_key bit 20h.1

;第二部分是用org偽指令定義的各個基本程式入口(rom 中有6個特定位址!)

org 0000h前面定義了st_addr,所以這裡可以寫org st_addr

ljmp 主程式起始標號(如start)

org 0003h或者org st_addr+03h

ljmp 外部中斷0的服務程式起始標號

org 000bh或者org st_addr+0bh

ljmp 定時器t0的服務程式起始標號

org 0013h或者org st_addr+13h

ljmp 外部中斷1的服務程式起始標號

org 001bh或者org st_addr+1bh

ljmp 定時器t1的服務程式起始標號

org 0023h或者org st_addr+23h

ljmp 序列口中斷的服務程式起始標號

;第三部分是用org偽指令定義了具體位置的主程式、子程式、中斷服務程式

org st_addr+100h

start: 埠初始化

具體處理程式

子程式1標號:…

ret子程式2標號:…

ret中服1標號: …

reti

… …

中服5標號: …

reti

;第四部分是資料表(可有可無!)

變數名: db/dw 資料表

end ;最後必須有end,標明程式的結束位置,否則彙編報錯!

用組合語言編寫的程式需要乙個配套的匯程式設計序把助記符指令翻譯為2進製指令。學習8086組合語言的時候,所用的匯程式設計序是現在學習51單片組合語言,也有乙個配套的匯程式設計序a51。

每種cpu有各自的一套機器指令;機器指令的集合稱為機器語言;

每條機器指令符號化就是助記符指令=彙編指令;彙編指令的集合稱為組合語言;

用組合語言編寫的應用程式,經過配套的匯程式設計序翻譯為機器指令才能被cpu理解和執行。

① 匯程式設計序規定了助記符與機器指令的對應關係以及指令的書寫規範:

51組合語言指令格式:

簡單表達操作碼 [運算元]

詳細表達: [標號:] 指令助記符 [運算元1,][運算元2,][運算元3] [;注釋]

說明:指令基本內容是操作碼和運算元;

操作碼由3-5個字母構成,不區分大小寫;

運算元可以有0、1、2、3個,其中雙運算元指令最典型;

運算元與助記符用空格分隔,運算元之間逗號分隔;

指令之前可以有標號,指令之後可以有注釋;

標號以字母打頭,冒號結尾,長度有限,標號不能是助記符;

指令中常數可4種進製,用尾符標識,省略尾符標識則系統預設為10進製數;

注釋以分號開頭,分號以後可以是任何文字。

要求:教材給出了每條指令的機器碼,第一次實驗預習內容就是人工彙編!

② 匯程式設計序提供(定義了)便於使用者程式設計的偽指令、運算子以及巨集操作(巨集定義、巨集彙編):

運算子有算術運算、邏輯運算、關係運算三類,可以將常量和運算子組成的表示式作為乙個運算元寫在指令中(mov a,#5*3+2),匯程式設計序在彙編時將表示式的值計算出來作為運算元。

巨集操作就是使用者自定義指令,包括巨集定義、巨集呼叫、巨集展開三個概念。

mcs-51匯程式設計序提供的常用偽指令有:

格式:org rom位址例: org 4000h

功能:告訴匯程式設計序將org指令以下的真指令的機器碼從給定的位址開始順序存放

格式:end

功能:告訴匯程式設計序程式到此為止,以下內容不再彙編。

格式:常量名 equ n(n可為單位元組常數、雙位元組常數、暫存器名)

功能:使常量名獲得n的值,在程式指令中使用該常量名就代表數n。

例:st_addr equ 4000h定義了st_addr代表4000h這個數值

則可以在後面使用:

org st_addr等效於 org 4000h

mov dptr, #st_addr ;等效於 mov dptr,#4000h

格式:變數名 bit 位位址

功能:使變數名獲得位位址,在程式指令中使用該變數就代表對應位。

格式:[變數名:] db 逗號分隔的資料表 (8位以內2進數或單引號內ascii字元)

功能:告訴匯程式設計序給資料表中每個資料安排乙個位元組的空間。

例: score: db 77, 65, 88, 34

char: db 『a』, 41h, 0, 『0』

格式:[變數名:] dw 逗號分隔的資料表(16位以內2進製數)

功能:告訴匯程式設計序給資料表中每個資料安排乙個字的空間。

命名規則:字母或下劃線打頭,後跟字母、數字、下劃線,長度30字元;

無論變數和標號,必須跟冒號。

第3章程式流程控制

本章主要內容 1 if語句 2 條件運算子 3 switch語句 4 while語句 5 do while語句 6 for next語句 迴圈巢狀 7 goto語句 exit語句 8 運算子的優先順序 3.1 選擇 分支 語句 結構化程式設計語言包含了三種且只有三種基本結構,即順序結構 分支結構和迴...

第3章財務分析方法和程式

本章內容提要 財務分析的程式與步驟 戰略分析 會計分析 比率分析 因素分析 2.1財務分析程式與方法 2.1.1 財務分析準備階段 1 明確財務分析目的。2 制定財務分析計畫。3 蒐整財務分析資訊。2.1.2 財務分析實施階段 1 戰略分析 2 會計分析。3 財務分析。4 因素分析。2.1.3.財務...

第3章 物件導向的程式設計基礎

物件導向程式設計 object oriented programming 是目前主流的程式設計方法,它已經基本替代了1970年代初期發展的 結構化的 基於過程的程式設計技術。j a語言是一種完全的物件導向的程式語言,它全面支援物件導向的程式設計方法。所謂物件導向 object oriented 簡稱...