版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第第3章章 指令系統(tǒng)與匯編語言程序設(shè)計(jì)指令系統(tǒng)與匯編語言程序設(shè)計(jì) 3.1 尋址方式 3.2 指令系統(tǒng) 3.3 匯編語言程序的匯編與調(diào)試 3.4 匯編語言程序設(shè)計(jì)舉例 3.5 計(jì)算機(jī)中的數(shù)據(jù)編碼 3.1 尋址方式尋址方式 尋址方式是指在指令執(zhí)行過程中,如何找到操作數(shù)有效地 址的方法。絕大多數(shù)指令執(zhí)行時(shí)都需要使用操作數(shù),而操作數(shù) 可以指一個(gè)直接參與指令運(yùn)行的數(shù)據(jù),也可以指一個(gè)寄存器, 還可以指一個(gè)存儲(chǔ)器單元。MCS-51單片機(jī)指令系統(tǒng)提供了7種 不同的尋址方式。 一、尋址方式 見動(dòng)畫五尋址方式。 立即尋址方式 直接尋址方式 寄存器尋址方式 尋址方式 寄存器間接尋址方式 相對(duì)尋址方式 變址尋址方式
2、位尋址方式 3.2 指令系統(tǒng)指令系統(tǒng) 數(shù)據(jù)傳送指令(29) 算術(shù)運(yùn)算指令(24) 指令系統(tǒng) 邏輯運(yùn)算指令(24) 程序控制指令(22) 位操作指令 (12) 描述指令的一些符號(hào)的意義: 符 號(hào) R n (n = 07) R i(i= 07) direct # data # data16 addr11 addr16 rel 意 義 當(dāng)前工作寄存器組R0R7中的某一個(gè)寄存器 作間接尋址的寄存器,“” 是間接尋址標(biāo)識(shí)符 內(nèi)部RAM的8位地址,可以是單元地址(00H7FH)或特殊功能寄存器地址 8位立即數(shù),其中“#” 是立即數(shù)標(biāo)識(shí)符 16位立即數(shù) 11位目的地址。用于ACALL和AJMP指令中,轉(zhuǎn)移范
3、圍為2KB 16位目的地址。用于LCALL和LJMP指令中,轉(zhuǎn)移范圍為64KB 相對(duì)轉(zhuǎn)移指令中的8位偏移地址,范圍是-128+127 DPTR bit rrr A B / (存儲(chǔ)單元地址) (間址寄存器) 數(shù)據(jù)指針,用作16位的地址寄存器 內(nèi)部RAM或特殊功能寄存器中的直接尋址位 在操作碼中,表示R0R7寄存器的編碼 累加器,寫作“A” 時(shí),是寄存器尋址;寫作“ACC” 時(shí),是直接尋址 特殊功能寄存器,用于MUL和DIV指令中 位操作數(shù)的前綴,表示對(duì)該位操作數(shù)取反 表示某存儲(chǔ)單元的內(nèi)容 由寄存器間接尋址的單元中的內(nèi)容 數(shù)據(jù)傳送指令實(shí)現(xiàn)計(jì)算機(jī)內(nèi)不同存儲(chǔ)區(qū)域之間的信息傳 遞。MCS-51指令系統(tǒng)中
4、共有29條數(shù)據(jù)傳送指令,不同存儲(chǔ)單元之 間的數(shù)據(jù)傳遞如圖所示。 1.內(nèi)部RAM、特殊功能寄存器之間的數(shù)據(jù)傳送 (使用“MOV” 作為操作碼助記符,共有16條 ) 2 累加器與外部RAM之間的數(shù)據(jù)傳送(這類指令的操作碼助記符為“MOVX”,對(duì)外部RAM單元只能使用間接尋址方式,即可以使用DPTR和Ri作間址寄存器。) 3 程序存儲(chǔ)器中的數(shù)據(jù)傳送到累加器A的指令(這類指令的數(shù)據(jù)傳送是單向的,只能從程序存儲(chǔ)器向累加器傳送數(shù)據(jù)。指令助記符為“MOVC”,共兩條指令。 ) 4 內(nèi)部RAM單元與累加器A之間數(shù)據(jù)交換指令(包括三種指令:字節(jié)交換指令、半字節(jié)交換指令、累加器A的高4位與低4位交換指令。) 5
5、堆棧操作指令(包括進(jìn)棧、出棧指令) (1)立即數(shù)傳送指令。 MOV A, # data ; Adata MOV direct, # data ; (direct)data MOV Rn, # data ; Rn data MOV Ri, # data ; (Ri)data MOV DPTR, # data16 ; DPH data 高8位,DPLdata 低8位 例1 分析下列指令的尋址方式以及指令執(zhí)行后存儲(chǔ)單元和寄存 器的內(nèi)容。 MOV A, # 20H ; 目的操作數(shù)采用寄存器尋址,A=20H MOV 32H, # 23H ; 目的操作數(shù)采用直接尋址,(32H)=23H MOV R4, #
6、 2FH ; 目的操作數(shù)采用寄存器尋址,R4=2FH MOV R0, # 5AH ; 目的操作數(shù)采用寄存器間接尋址, (R0)=5AH MOV DPTR, # 203FH ; 目的操作數(shù)采用寄存器尋址, DPTR=203FH (2)內(nèi)部RAM 單元之間的數(shù)據(jù)傳送指令。 MOV direct1,direct2 ;(direct1)(direct2) MOV direct,Rn ;(direct)Rn MOV Rn,direct ;Rn(direct) MOV direct, Ri ;(direct)(Ri) MOV Ri,direct ;(Ri)(direct) 例2 分析指令的尋址方式和執(zhí)行結(jié)
7、果 MOV P2,R2; 目的操作數(shù)采用直接尋址,源操作數(shù)為寄存器尋址; P2=R2,該指令等價(jià)于MOV 0A0H,R2 MOV 2FH,30H; 兩個(gè)操作數(shù)均采用直接尋址,(2FH)= (30H) MOV 20H, R1; 目的操作數(shù)為直接尋址,源操作數(shù)為寄存器間接尋址,執(zhí)行 結(jié)果:(20H)= (R1) (3)與累加器有關(guān)的數(shù)據(jù)傳送指令 MOV A,Rn ;ARn MOV Rn,A ; RnA MOV A,direct ;A(direct) MOV direct,A ;(direct)A MOV A, Ri ;A(Ri) MOV Ri,A ; (Ri)A 例3 分析下列指令的尋址方式和執(zhí)行
8、結(jié)果 MOV A,R5 ; 兩操作數(shù)均采用寄存器尋址,A=R5 MOV A,0F0H ; 原操作數(shù)為直接尋址,A=(0F0H) MOV A, R1 ; 源操作數(shù)為寄存器間接尋址,A=(R1) 這類指令的操作碼助記符為“MOVX”, 對(duì)外部RAM單元只 能使用間接尋址方式,即可以使用DPTR和Ri作間址寄存器。 MOVX A, DPTR ;A(DPTR) MOVX DPTR,A ;(DPTR)A MOVX A, Ri ;A (Ri) MOVX Ri,A ;(Ri)A 例3.4 已知DPTR=2000H,片外RAM (2000H)=05H, R1=0F0H,片外RAM (0F0H)=0A0H。 M
9、OVX A, DPTR ;指令執(zhí)行后,A=05H MOVX R1,A ;指令執(zhí)行后,片外RAM(0F0H)=05H 這類指令助記符為“MOVC”, 共兩條指令。 MOVC A,A+DPTR ;A(ADPTR) MOVC A,A+PC ; A(APC) 例3.5 把累加器A中的十六進(jìn)制數(shù)字00H0FH轉(zhuǎn)換成ASCII碼。 INC A ;調(diào)整偏移量(數(shù)據(jù)表的首地址與MOVC指令間隔1個(gè)單元) MOVC A, A + PC ;查表取數(shù) RET ;子程序返回 DB 30H,31H,32H,33H,34H ;在程序存儲(chǔ)器中順序存放 DB 35H,36H,37H,38H,39H ;0F的ASCII碼 DB
10、 41H,42H,43H,44H,45H,46H 如果累加器A=0FH,則執(zhí)行INC A 后,A=10H,程序存儲(chǔ)器取出MOVC指令后,PC = 2001H,則A + PC=2011H,于是執(zhí)行 MOVC 指令后A=(2011H)=46H,即將累加器A中十六進(jìn)制數(shù)字F 轉(zhuǎn)換成相應(yīng)的ASCII 碼46H。 (1)字節(jié)交換指令 XCH A,Rn ; A Rn XCH A,direct ; A (direct) XCH A, Ri ; A (Ri) (2)半字節(jié)交換指令 XCHD A, Ri ; A(D3 D0) (Ri)(D3 D0),即累加器A的低4位與Ri間址的內(nèi)部RAM單元的低4位交換。 (
11、3)累加器A的高4位與低4位交換指令 SWAP A ; A(D3 D0) A(D7 D4) (1)進(jìn)棧指令 PUSH direct ;SPSP + 1,(SP)(direct) (2)出棧指令 POP direct ; (direct)(SP),SPSP 1 例3.8 已知SP = 3AH,DPTR= 1234H,則 PUSH DPL ;SPSP + 1=3BH,(3BH)=34H POP DPH ;SPSP + 1=3CH,(3CH)=12H 執(zhí)行指令后,SP=3CH,(3CH)=12H,(3BH)=34H 加減運(yùn)算指令 算術(shù)運(yùn)算指令 乘除法指令 十進(jìn)制調(diào)整指令 (1)加法指令A(yù)DD (Ad
12、dition) 指令格式:ADD A,source 指令功能:將累加器和源操作數(shù)相加,結(jié)果送累加器A,源操作數(shù)不變。 源操作數(shù)有4種尋址方式,所以ADD指令有4種形式: ADD A, Rn ;A+RnA ADD A, direct ;A+(direct)A ADD A, Ri ;A+(Ri)A ADD A, #data ;A+dataA 例如,A = 0C0H,R1 = 0AFH,執(zhí)行ADD A,R1 指令。 11000000 + 10101111 01101111 ADD指令影響程序狀態(tài)字PSW的CY、AC、OV位。 (2)帶進(jìn)位加法指令A(yù)DDC (Addition with Carry)
13、指令格式與加法指令相同,指令功能是將累加器A、不同尋址方式的源操作數(shù)以及進(jìn)位標(biāo)志CY相加,運(yùn)算結(jié)果送累加器A。帶進(jìn)位加法指令共4條: ADDC A, Rn ;A+Rn+CYA ADDC A, direct ;A+(direct) +CYA ADDC A, Ri ;A+(Ri) +CYA ADDC A, #data ;A+data+CYA ADDC指令對(duì)狀態(tài)標(biāo)志位的影響同ADD指令。 (3)帶借位減法指令SUBB (Subtraction with Borrow) 與加法指令相似,目的操作數(shù)為累加器A,源操作數(shù)有4種尋址方式。所以帶借位減法指令有4種形式: SUBB A, Rn ;A-Rn-CY
14、A SUBB A, direct ;A-(direct)-CYA SUBB A, Ri ;A-(Ri)-CYA SUBB A, #data ;A-data-CYA 例如,若A = 0C0H,R0 = 7AH,CY = 1, 執(zhí)行指令:SUBB A,R0 執(zhí)行結(jié)果為:A = 45H,CY = 0,AC = 1,OV= 1。 若進(jìn)行不減借位的減法運(yùn)算,只需將借(進(jìn))位標(biāo)志CY清零,例如CLR C。帶借位減法指令對(duì)狀態(tài)標(biāo)志位的影響與加法指令相同。 (4)加1指令I(lǐng)NC (INCrement destination by one) 指令格式:INC dest 執(zhí)行操作是把dest的內(nèi)容加1,結(jié)果送回原
15、單元。 加1指令共有以下5種形式: INC A ;A + 1A INC Rn ;Rn + 1Rn INC direct ;(direct)+ 1(direct) INC Ri ;(Ri)+ 1(Ri) INC DPTR ;DPTR + 1DPTR 加1指令主要用于修改地址指針和計(jì)數(shù)次數(shù),它對(duì)CY、AC、OV 沒有影響。 (5)減1指令DEC (Decrement) 減1指令與加1指令格式相似,只有一個(gè)操作數(shù),該指令共有4種形式: DEC A ;A- 1A DEC Rn ;Rn1Rn DEC direct ;(direct)-1(direct) DEC Ri ;(Ri)- 1(Ri) 這類指令不
16、影響CY、AC、OV。 (1)乘法指令MUL 指令格式:MUL AB 指令功能:把累加器A和寄存器B中的無符號(hào)數(shù)相乘,所得16 位乘積的低位字節(jié)存入A中,高位字節(jié)存入B中。 例如 A = 1AH,B = 20H,執(zhí)行指令MUL AB 執(zhí)行結(jié)果為A = 40H,B = 03H,OV = 1,CY = 0 乘法運(yùn)算影響PSW的狀態(tài),進(jìn)位標(biāo)志位CY總是清0。 (2)除法指令DIV 指令格式:DIV AB 指令功能是用A中8位無符號(hào)數(shù)除以B中8位無符號(hào)數(shù),所得商 存入A中,余數(shù)存入B中,并將CY和OV置0。只有當(dāng)除數(shù)B = 0 時(shí),OV置1,表示除法的結(jié)果無意義。 例如 A = 0F4H,B = 0A
17、H,執(zhí)行指令DIV AB 執(zhí)行結(jié)果為A = 18H,B = 04H,OV = 0,CY = 0 3. 十進(jìn)制調(diào)整指令 功能:把A中的數(shù)作為兩個(gè)BCD數(shù)相加之和進(jìn)行調(diào)整,得到 兩位正確的BCD數(shù)。 形式:DA A 例如:73-54=19 先執(zhí)行9AH-54H,得到補(bǔ)熟46H,再執(zhí)行73H+46H=0B9H,最 后執(zhí)行調(diào)整指令將0B9H加上60H得到19H,即得到正確的BCD 數(shù)。 邏輯與運(yùn)算指令(6條) 邏輯或運(yùn)算指令(6條) 邏輯運(yùn)算指令 邏輯異或運(yùn)算指令(6條) 累加器清0和取反指令(2條) 循環(huán)移位指令(4條) 這類指令的助記符為ANL ANL A,Rn ;A?Rn?A ANL A,dir
18、ect ; A?(direct)?A ANL A,Ri ;A?(Ri)?A ANL A, # data ;A?data?A ANL direct,A ;(direct)A(direct) ANL direct, # data ;(direct)data(direct) 例如:若A=0A6H,R1=0A4H,執(zhí)行ANL A,R1 后, A = 0A4H 邏輯與運(yùn)算常用作字節(jié)清零或位清零。 這類指令的助記符為ORL ORL A, Rn ;ARnA ORL A, direct ;A(direct)A ORL A, Ri ;A(Ri)A ORL A, # data ;AdataA ORL direct
19、, A ;(direct)A(direct) ORL direct, # data ;(direct)data(direct) 例如 把累加器A的低4位傳送到P0口的低4位,但P0口的高4 位保持不變。 PUSH ACC ;累加器內(nèi)容入棧 ANL A, # 0FH ;屏蔽A 的高4 位 ANL P0, # 0F0H ;屏蔽P0 口的低4 位 ORL P0,A ;傳送A 的低4 位 POP ACC ;恢復(fù)累加器內(nèi)容 邏輯或運(yùn)算可以實(shí)現(xiàn)對(duì)某個(gè)單元的某些位置1,其余位不變。 XRL A,Rn ;ARnA XRL A,direct ;A(direct)A XRL A,Ri ;A(Ri)A XRL A,
20、 # data ;AdataA XRL direct,A ;(direct)A(direct) XRL direct, # data ;(direct)data(direct) 例如:若A=7FH,R1=0A5H,則執(zhí)行指令 XRL A,R1后, A=0DAH。 邏輯異或運(yùn)算可以用來比較兩個(gè)數(shù)據(jù)是否相等。當(dāng)兩個(gè)數(shù)據(jù)異 或結(jié)果為0,則表示相等,否則表示不相等。 累加器清0指令: CLR A ;0A 累加器按位取反指令: CPL A ;A 例如:若 A=55H,則執(zhí)行指令: CPL A ;執(zhí)行結(jié)果A=0AAH CLR A ;執(zhí)行結(jié)果A=00H (1)循環(huán)右移指令:RR A 功能:將累加器A的內(nèi)容逐
21、位循環(huán)右移一位。如圖所示: 例如,若A=6AH=01101010B,執(zhí)行RR A 指令后,A=35H。 (2)循環(huán)左移指令:RL A 功能:將累加器A的內(nèi)容逐位左移一位,如圖所示: 例如,若A=0A3H=10100011B,執(zhí)行 RL A 指令后,A=47B。 (3)帶進(jìn)位循環(huán)右移指令:RRC A 功能:將累加器A的內(nèi)容和進(jìn)位位一起逐位循環(huán)右移一位,如圖所示: 例如,若A=4BH=01001011B,CY=1,執(zhí)行 RRL A 指令后,A=0A5H,CY=1。 (4)帶進(jìn)位循環(huán)左移指令:RLC A 功能:將累加器A的內(nèi)容和進(jìn)位位一起逐位循環(huán)左移一位,如圖所示: 此兩操作影響CY位。 無條件轉(zhuǎn)移
22、指令 條件轉(zhuǎn)移指令 程序控制指令 調(diào)用和返回指令 空操作指令 NOP ;PC+1PC 操作:該指令不執(zhí)行任何操作,常用于程序的等待或時(shí)間的延遲。 該指令把16位地址 addr16裝入程序計(jì)數(shù)器 相對(duì)轉(zhuǎn)移指令:SJMP rel PC,轉(zhuǎn)移范圍可達(dá)64 KB。LJMP與AJMP指 令都是直接尋址方式。 絕對(duì)轉(zhuǎn)移指令:AJMP addr11 無條件轉(zhuǎn)移指令 長(zhǎng)轉(zhuǎn)移指令:LJMP addr16 ;addr16PC 該指令采用基址變址尋址方式,轉(zhuǎn)移地 間接轉(zhuǎn)移指令:JMP A + DPTR ; 址由數(shù)據(jù)指針DPTR和累加器A的內(nèi)容 A + DPTRPC 相加形成。 ,設(shè)A = A0H,例如DPTR =
23、45A0H 執(zhí)行指令JMP A+ DPTR 后, PC =4640H。 操作:PC+2PC,addr11PC(D10D0) 例如,若轉(zhuǎn)移指令首地址2456H,即PC = 2456H,執(zhí)行指令A(yù)JMP 26AH 后,PC = 226AH,程序轉(zhuǎn)向226AH單元執(zhí)行。 該指令采用相對(duì)尋址方式,目的地址= PC + rel。 相對(duì)轉(zhuǎn)移指令的操作數(shù)有兩種形式:偏移量和目標(biāo)地址。如 果是目標(biāo)地址,則在程序匯編時(shí)由匯編程序自動(dòng)計(jì)算并填入偏移 量。 向高地址方向轉(zhuǎn)移:rel=目標(biāo)地址-(首地址+2) = 地址差-2 向低地址方向轉(zhuǎn)移:rel=(目標(biāo)地址-(首地址+2)補(bǔ) 例如,若轉(zhuǎn)移指令的首地址為0100H
24、,地址標(biāo)號(hào)LOOP所指單 元為0120H,則執(zhí)行指令SJMP LOOP,偏移量為: rel = 0120H - (0100H + 2)= 1EH 指令機(jī)器碼為801E。 CJNE A,direct,rel ; CJNE A,#data,rel ; Adata,則轉(zhuǎn)移 CJNE Rn,#data,rel ; Rndata,則轉(zhuǎn)移 累加器判零轉(zhuǎn)移指令 CJNE Ri,#data,rel ; (Ri)data,則轉(zhuǎn)移 比較轉(zhuǎn)移指令 條件轉(zhuǎn)移指令 DJNZ Rn,rel ; 減1不為0轉(zhuǎn)移指令 Rn- 1Rn,若Rn0,則PC+2+relPC,否則 PC+2PC A(direct),則轉(zhuǎn)移 JZ re
25、l ;若A=0,則PC+2+relPC,否則PC+2PC JNZ rel ;若A0,則PC+2+relPC,否則PC+2PC 例如,設(shè)A = 01H,執(zhí)行指令: JZ TABLE1 ;A = 0,轉(zhuǎn)向TABLE1,A0,執(zhí)行下一條指令 DEC A ;A - 1A JZ TABLE2 ;A = 0,轉(zhuǎn)向TABLE2 執(zhí)行 DJNZ direct,rel ; 位控制轉(zhuǎn)移指令 (direct)-1(direct),若(direct)0,則PC+3+relPC,否PC+3PC JC rel ;若CY = 1,則PC + 2 + relPC,否則PC + 2PC JNC rel ;若CY = 0,則PC
26、 + 2 + relPC,否則PC + 2PC JB bit,rel ;若(bit)= 1,則PC + 3 + relPC,否則PC + 3PC JNB bit,rel ;若(bit)= 0,則PC + 3 + relPC,否則PC + 3PC JBC bit,rel ;若(bit)= 1,則PC + 3 + relPC,且(bit)= 0,否則PC+ 3PC 操作過程: PCPC + 2 ;取出指令 SPSP + 1 , (SP)PC (D7 D0) SPSP + 1, (SP)PC (D15 D8) ;斷點(diǎn)地址入棧 PC (D10 D0)addr11,PC (D15 D11)不變 ;進(jìn)入子
27、程序 例如,若SP = 60H,PC = 2100H,子程序sub1首地址為23A0H。執(zhí)行下面指令: 2100H:ACALL sub1 ;指令代碼是71A0H 執(zhí)行過程: PC= PC + 2 = 2102H,將PC 壓棧,即(61H)= 02H,(62H) = 21H,SP = 62H;用指令提供的11 位地址01110100000B (3A0H)替換PC 的低11位,形成目的地址 0010001110100000B,即進(jìn)入sub1子程序。 絕對(duì)調(diào)用指令:ACALL addr11 調(diào)用和返回指令 長(zhǎng)調(diào)用指令:LCALL addr16 操作過程: PCPC + 3 ;取出指令 SPSP +
28、1,(SP)PC (D7 返回指令D0) SPSP + 1,(SP)PC (D15 D8) ;斷點(diǎn)地址入棧 PCaddr16 ;進(jìn)入子程序 RET ;子程序返回指令 RETI ;中斷返回指令 操作過程: (SP)PC (D15D8) , SP-1SP , (SP)PC (D7 D0) , SP - 1SP ,bit ;(bit) CY MOV CMOV bit,C ;CY(bit) 位傳送指令 位操作指令 置位/復(fù)位指令 例如, P0 = 01011010B,CY = 0,執(zhí)行指令: 位邏輯運(yùn)算指令 SETB C SETB P0. 0 CLR P0. 3 執(zhí)行結(jié)果為:CY = 1,P0 =01
29、010011B ANL C,bit ;CY(bit)CY ANL C, / bit ;CY (/bit) CY ORL C,bit ;CY(bit)CY ORL C, / bit ;CY (/bit) CY CPL C ; (/CY) CY CPL bit ; (/bit) (bit) 例如, 把20H位傳送到30H位。 MOV 10H,C ;暫存CY內(nèi)容 MOV C,20H ;20H位送CY MOV 30H,C ;CY送30H位 MOV C,10H ;恢復(fù)CY 內(nèi)容 CLR C ;0CY CLR bit ;0(bit) SETB C ;1CY SETB bit ;1(bit) 例:設(shè)D、E、
30、F代表位地址,計(jì)算?F = D E =(/D)E+ D(/E)。 MOV C,E ANL C, / D ; (/D)E CY MOV F,C MOV C,D ANL C, / E ;D(/E) CY ORL C,F ;D(/E) + (/D)E CY ?MOV F,C ;D EF 3.3 匯編語言程序的匯編與調(diào)試匯編語言程序的匯編與調(diào)試 一、匯編語言程序的一般組成與設(shè)計(jì)方法 源程序、匯編程序和目標(biāo)程序之間的關(guān)系為: 匯編語言源程序 匯編程序 目標(biāo)程序 1匯編語言的語句種類和格式 基本類型 格式 可執(zhí)行指令語句 標(biāo)號(hào): 操作數(shù)表;注釋 例如:ADD A,R1 偽指令語句 標(biāo)號(hào) 參數(shù)表;注釋 例如
31、:ORG 1000H 宏指令語句 用來代替匯編語言源程序中重復(fù)使用的程序的一種語句 2匯編語言程序設(shè)計(jì) 所謂匯編語言程序設(shè)計(jì),就是使用匯編語言指令來編寫計(jì)算機(jī)程序。一個(gè)高質(zhì)量的匯編語言源程序,應(yīng)該具備以下幾點(diǎn): 結(jié)構(gòu)簡(jiǎn)明、清晰,便于理解。 便于閱讀、修改和調(diào)試,具有較好的維護(hù)性。 具有較高的可靠性。 程序應(yīng)該是高效率的。 用匯編語言進(jìn)行程序設(shè)計(jì)的步驟可以概括如下: 分析問題,確定算法。 根據(jù)算法,畫出程序流程圖。 合理地分配存儲(chǔ)空間和寄存器。 編寫程序。 上機(jī)調(diào)試程序。 3流程圖 基本圖形框 起止框 矩形框 符號(hào) 意義 表示程序的開始或結(jié)束 表示計(jì)算或處理等基本操作 用來判斷給出的條件是否成立
32、,根據(jù)判斷的結(jié)果決定程序的流向 表示程序的流向 表示相關(guān)兩框的連接處,圓圈內(nèi)數(shù)字相同表示連接在一起 判斷框 流線 連接點(diǎn) 在下一節(jié)中會(huì)著重介紹流程圖畫法及意義。 二、偽指令 偽指令又稱偽操作,是源程序發(fā)送給匯編程序的指令。下面介紹MCS-51匯編 程序中常用的偽指令。 常用偽指令 指令格式 功能 賦值偽指令EQU 定義字節(jié)偽指令DB EQU DB 賦值后的符號(hào)可以作地址使用,也可以作立即數(shù)使用 把表達(dá)式表中的字節(jié)數(shù)據(jù)存入從標(biāo)號(hào)開始的連續(xù)存儲(chǔ)單元中 把表達(dá)式表中的16 位數(shù)據(jù)存入由標(biāo)號(hào)開始的連續(xù)存儲(chǔ)單元,低地址單元存放高字節(jié),高地址單元存放低字節(jié) 定義字偽指令DW DW 存儲(chǔ)區(qū)定義偽指令DS 位
33、定義偽指令BIT DS BIT 通知匯編程序,從指定的地址開始,保留指定數(shù)目的字節(jié)單元作為存儲(chǔ)區(qū),供程序運(yùn)行使用 給符號(hào)名賦以位地址 指定目標(biāo)程序或數(shù)據(jù)塊在存儲(chǔ)器中的起始地址 用于終止源程序的匯編工作 設(shè)置起始地址偽指令ORG 匯編結(jié)束偽指令END ORG END 三、匯編與調(diào)試 機(jī)器匯編 指先將匯編語言源程序輸入計(jì)算機(jī),再利用匯編程序?qū)⑵浞g成二進(jìn)制代碼的目標(biāo)文件(. OBJ)的過程 匯 編 手工匯編 指通過人工查找指令表,將每一條指令的機(jī)器代碼查出,并分配存儲(chǔ)空間,計(jì)算地址偏移量,得到目標(biāo)文件的過程 編寫匯編語言程序 調(diào) 試 傳送到單片機(jī) 建立源程序文件.ASM 編成目標(biāo)程序文件.OBJ
34、一.匯編語言程序結(jié)構(gòu) 見動(dòng)畫六 二.匯編語言程序舉例 例1 編程實(shí)現(xiàn)如圖所示的邏輯功能。其中20H、2FH、2AH是位 地址。 ?20 H?2FH?2AH?分析:邏輯電路的功能是P1.0= 程序如下: MOV C,20H ;20H 位送CY ANL C,2FH ;CY 邏輯與2FH 位 CPL C ;CY 取反 ORL C,2AH ;CY 邏輯或2AH 位 MOV P1.0,C ;結(jié)果送P1.0 例2 比較內(nèi)部RAM 30H和31H單元中無符號(hào)數(shù)的大小,使得30H單元存放大數(shù),31H單元存放小數(shù)。 分析:先清進(jìn)位位,然后兩數(shù)作帶借位減法,根據(jù)借位標(biāo)志判斷兩 數(shù)大小。程序流程圖如右圖所示。 程序
35、: START: CLR C MOV A,30H SUBB A,31H JNC DONE ;若無借位,即(30H)(31H)時(shí)轉(zhuǎn)DONE MOV A,30H XCH A,31H ;有借位,即(30H)(31H),交換(30H)與(31H) MOV 30H,A DONE: SJMP DONE 例3 編程統(tǒng)計(jì)累加器A中“1” 的個(gè)數(shù)。 分析:首先判斷累加器A 是否為0,若A = 0,則程序結(jié)束;否則,先清CY,再將A 帶進(jìn)位循環(huán)左移一位,判斷進(jìn)位位CY 是否為1,為1 則計(jì)數(shù),不為1 則繼續(xù)循環(huán) 判斷A 是否為0,重復(fù)這一過程,直至A = 0。程序流程圖如圖所示。 程序: MOV R1, # 0
36、;計(jì)數(shù)器R1清0 PUSH ACC ;保護(hù)ACC LOOP1: JZ DONE ;若A = 0,程序結(jié)束 CLR C ;進(jìn)位位清0 RLC A ;累加器A帶進(jìn)位循環(huán)左移一位 JNC LOOP1 ;CY = 0,則繼續(xù)循環(huán) INC R1 ;CY = 1,則計(jì)數(shù)器R1加1 SJMP LOOP1 DONE: POP ACC ;恢復(fù)ACC SJMP END 任務(wù)演示任務(wù)演示 任務(wù)T3:算術(shù)、邏輯運(yùn)算模擬系統(tǒng)軟件設(shè)計(jì)。 見動(dòng)畫十一 3.5 計(jì)算機(jī)中的數(shù)據(jù)編碼計(jì)算機(jī)中的數(shù)據(jù)編碼 一、帶符號(hào)數(shù)的編碼表示 在計(jì)算機(jī)中,常常需要表示正數(shù)和負(fù)數(shù),如何表 示數(shù)據(jù)的符號(hào)位?如何表示帶符號(hào)數(shù)? 1.機(jī)器數(shù)的概念 為了表示帶符號(hào)的數(shù),可以把數(shù)的最高位作為符號(hào)位處 理,其余各位表示數(shù)值本身。一般 “1”表示負(fù)號(hào),“0”表示正號(hào)。 這種把符號(hào)數(shù)碼化了的數(shù)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度嬰幼兒游泳館加盟服務(wù)合同4篇
- 二零二五年度實(shí)木地板翻新與保養(yǎng)服務(wù)合同4篇
- 2025年代理協(xié)議示范文本-辦公文具代理合同
- 2025版別墅區(qū)物業(yè)委托經(jīng)營管理服務(wù)標(biāo)準(zhǔn)范本3篇
- 二零二五年度公司股權(quán)激勵(lì)計(jì)劃后續(xù)管理與跟蹤合同2篇
- 2025年中國雙面羊絨大衣行業(yè)市場(chǎng)調(diào)研分析及投資戰(zhàn)略咨詢報(bào)告
- 2025年度海洋科學(xué)研究中心研究員聘用合同
- 2025年度交通行業(yè)短期運(yùn)輸司機(jī)勞動(dòng)合同
- 二零二五年度消防安全員消防技術(shù)咨詢服務(wù)聘用合同
- 二零二五年度農(nóng)業(yè)科技推廣勞務(wù)合同執(zhí)行與效果評(píng)估
- 第三單元名著導(dǎo)讀《經(jīng)典常談》知識(shí)清單 統(tǒng)編版語文八年級(jí)下冊(cè)
- 第十七章-阿法芙·I·梅勒斯的轉(zhuǎn)變理論
- 焊接機(jī)器人在汽車制造中應(yīng)用案例分析報(bào)告
- 合成生物學(xué)在生物技術(shù)中的應(yīng)用
- 中醫(yī)門診病歷
- 廣西華銀鋁業(yè)財(cái)務(wù)分析報(bào)告
- 無違法犯罪記錄證明申請(qǐng)表(個(gè)人)
- 大學(xué)生勞動(dòng)教育PPT完整全套教學(xué)課件
- 繼電保護(hù)原理應(yīng)用及配置課件
- 《殺死一只知更鳥》讀書分享PPT
- 蓋洛普Q12解讀和實(shí)施完整版
評(píng)論
0/150
提交評(píng)論