




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、 3.1 尋址方式尋址方式 3.2 指令系統(tǒng)指令系統(tǒng) 3.3 匯編語言程序的匯編與調(diào)試匯編語言程序的匯編與調(diào)試 3.4 匯編語言程序設(shè)計舉例匯編語言程序設(shè)計舉例 3.5 計算機(jī)中的數(shù)據(jù)編碼計算機(jī)中的數(shù)據(jù)編碼 第第3章章 指令系統(tǒng)與匯編語言程序設(shè)計指令系統(tǒng)與匯編語言程序設(shè)計 3.1 尋址方式尋址方式 尋址方式是指在指令執(zhí)行過程中,如何找到操作數(shù)有效地 址的方法。絕大多數(shù)指令執(zhí)行時都需要使用操作數(shù),而操作數(shù) 可以指一個直接參與指令運行的數(shù)據(jù),也可以指一個寄存器, 還可以指一個存儲器單元。mcs-51單片機(jī)指令系統(tǒng)提供了7種 不同的尋址方式。 一、尋址方式 見動畫五尋址方式。 立即尋址方式 直接尋址
2、方式 寄存器尋址方式 寄存器間接尋址方式 相對尋址方式 變址尋址方式 位尋址方式 3.1 尋址方式尋址方式 尋址方式 3.2 指令系統(tǒng)指令系統(tǒng) 數(shù)據(jù)傳送指令(29) 算術(shù)運算指令(24) 指令系統(tǒng) 邏輯運算指令 (24) 程序控制指令(22) 位操作指令 (12) 描述指令的一些符號的意義: 符 號 意 義 r n (n = 07)當(dāng)前工作寄存器組r0r7中的某一個寄存器 r i(i= 07)作間接尋址的寄存器,“”是間接尋址標(biāo)識符 direct內(nèi)部ram的8位地址,可以是單元地址(00h7fh)或特殊功能寄存器地址 # data8位立即數(shù),其中“#”是立即數(shù)標(biāo)識符 # data1616位立即
3、數(shù) addr1111位目的地址。用于acall和ajmp指令中,轉(zhuǎn)移范圍為2kb addr1616位目的地址。用于lcall和ljmp指令中,轉(zhuǎn)移范圍為64kb rel相對轉(zhuǎn)移指令中的8位偏移地址,范圍是-128+127 dptr數(shù)據(jù)指針,用作16位的地址寄存器 bit內(nèi)部ram或特殊功能寄存器中的直接尋址位 rrr在操作碼中,表示r0r7寄存器的編碼 a累加器,寫作“a”時,是寄存器尋址;寫作“acc”時,是直接尋址 b特殊功能寄存器,用于mul和div指令中 /位操作數(shù)的前綴,表示對該位操作數(shù)取反 (存儲單元地址)表示某存儲單元的內(nèi)容 (間址寄存器)由寄存器間接尋址的單元中的內(nèi)容 數(shù)據(jù)傳送
4、指令實現(xiàn)計算機(jī)內(nèi)不同存儲區(qū)域之間的信息傳 遞。mcs-51指令系統(tǒng)中共有29條數(shù)據(jù)傳送指令,不同存儲單元 之 間的數(shù)據(jù)傳遞如圖所示。 3.2 指令系統(tǒng)指令系統(tǒng) 1.內(nèi)部ram、特殊功能寄存器之間的數(shù)據(jù)傳送 (使用“mov”作 為操作碼助記符,共有16條 ) 2累加器與外部ram之間的數(shù)據(jù)傳送(這類指令的操作碼助記 符為“movx”,對外部ram單元只能使用間接尋址方式,即可 以使用dptr和ri作間址寄存器。) 3程序存儲器中的數(shù)據(jù)傳送到累加器a的指令(這類指令的數(shù)據(jù) 傳送是單向的,只能從程序存儲器向累加器傳送數(shù)據(jù)。指令助 記符為“movc”,共兩條指令。 ) 4內(nèi)部ram單元與累加器a之間數(shù)
5、據(jù)交換指令(包括三種指令: 字節(jié)交換指令、半字節(jié)交換指令、累加器a的高4位與低4位交 換指令。) 5堆棧操作指令(包括進(jìn)棧、出棧指令) 3.2 指令系統(tǒng)指令系統(tǒng) 例1 分析下列指令的尋址方式以及指令執(zhí)行后存儲單元和寄存 器的內(nèi)容。 mov a, # 20h ; 目的操作數(shù)采用寄存器尋址,a=20h mov 32h, # 23h ; 目的操作數(shù)采用直接尋址,(32h)=23h mov r4, # 2fh ; 目的操作數(shù)采用寄存器尋址,r4=2fh mov r0, # 5ah ; 目的操作數(shù)采用寄存器間接尋址, (r0)=5ah mov dptr, # 203fh ; 目的操作數(shù)采用寄存器尋址,
6、dptr=203fh (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位 3.2 指令系統(tǒng)指令系統(tǒng) 例2 分析指令的尋址方式和執(zhí)行結(jié)果 mov p2,r2; 目的操作數(shù)采用直接尋址,源操作數(shù)為寄存器尋址; p2=r2,該指令等價于mov 0a0h,r2 mov 2fh,30h; 兩個操作數(shù)均采用直接尋址,(2fh)= (
7、30h) mov 20h, r1; 目的操作數(shù)為直接尋址,源操作數(shù)為寄存器間接尋址,執(zhí)行 結(jié)果:(20h)= (r1) (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) 3.2 指令系統(tǒng)指令系統(tǒng) 例3 分析下列指令的尋址方式和執(zhí)行結(jié)果 mov a,r5 ; 兩操作數(shù)均采用寄存器尋址,a=r5 mov a,0
8、f0h ; 原操作數(shù)為直接尋址,a=(0f0h) mov a, r1 ; 源操作數(shù)為寄存器間接尋址,a=(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.2 指令系統(tǒng)指令系統(tǒng) 這類指令的操作碼助記符為“movx”,對外部ram單元 只 能使用間接尋址方式,即可以使用dptr和ri作間址寄存器。 movx a, dptr ;a(dptr) movx dptr,a ;(dptr)a m
9、ovx a, ri ;a (ri) movx ri,a ;(ri)a 例3.4 已知dptr=2000h,片外ram (2000h)=05h, r1=0f0h,片外ram (0f0h)=0a0h。 movx a, dptr ;指令執(zhí)行后,a=05h movx r1,a ;指令執(zhí)行后,片外 ram(0f0h)=05h 3.2 指令系統(tǒng)指令系統(tǒng) 這類指令助記符為“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指令
10、間隔1個單元) movc a, a + pc ;查表取數(shù) ret ;子程序返回 db 30h,31h,32h,33h,34h ;在程序存儲器中順序存放 db 35h,36h,37h,38h,39h ;0f的ascii碼 db 41h,42h,43h,44h,45h,46h 如果累加器a=0fh,則執(zhí)行inc a 后,a=10h,程序存儲器取出 movc指令后,pc = 2001h,則a + pc=2011h,于是執(zhí)行 movc 指令后a=(2011h)=46h,即將累加器a中十六進(jìn)制數(shù)字f 轉(zhuǎn)換成相 應(yīng)的ascii 碼46h。 3.2 指令系統(tǒng)指令系統(tǒng) (1)字節(jié)交換指令 xch a,rn ;
11、 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位交換。 (3)累加器a的高4位與低4位交換指令 swap a ; a(d3 d0) a(d7 d4) 3.2 指令系統(tǒng)指令系統(tǒng) (1)進(jìn)棧指令 push direct ;spsp + 1,(sp)(direct) (2)出棧指令 pop direct ; (direct)(sp),spsp 1 例3.8 已知sp = 3ah,dptr= 1234h,則
12、 push dpl ;spsp + 1=3bh,(3bh)=34h pop dph ;spsp + 1=3ch,(3ch)=12h 執(zhí)行指令后,sp=3ch,(3ch)=12h,(3bh)=34h 3.2 指令系統(tǒng)指令系統(tǒng) 加減運算指令 算術(shù)運算指令 乘除法指令 十進(jìn)制調(diào)整指令 3.2 指令系統(tǒng)指令系統(tǒng) (1)加法指令add (addition) 指令格式:add a,source 指令功能:將累加器和源操作數(shù)相加,結(jié)果送累加器a,源操作數(shù)不變。 源操作數(shù)有4種尋址方式,所以add指令有4種形式: add a, rn ;a+rna add a, direct ;a+(direct)a add
13、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位。 3.2 指令系統(tǒng)指令系統(tǒng) (2)帶進(jìn)位加法指令addc (addition with carry) 指令格式與加法指令相同,指令功能是將累加器a、不同尋 址方式的源操作數(shù)以及進(jìn)位標(biāo)志cy相加,運算結(jié)果送累加器a。 帶進(jìn)位加法指令共4條: addc a, rn ;a+rn+cya addc a, direct ;a+(direct) +cy
14、a addc a, ri ;a+(ri) +cya addc a, #data ;a+data+cya addc指令對狀態(tài)標(biāo)志位的影響同add指令。 3.2 指令系統(tǒng)指令系統(tǒng) (3)帶借位減法指令subb (subtraction with borrow) 與加法指令相似,目的操作數(shù)為累加器a,源操作數(shù)有4種尋址方式。所以帶 借位減法指令有4種形式: subb a, rn ;a-rn-cya subb a, direct ;a-(direct)-cya subb a, ri ;a-(ri)-cya subb a, #data ;a-data-cya 例如,若a = 0c0h,r0 = 7ah,
15、cy = 1, 執(zhí)行指令:subb a,r0 執(zhí)行結(jié)果為:a = 45h,cy = 0,ac = 1,ov= 1。 若進(jìn)行不減借位的減法運算,只需將借(進(jìn))位標(biāo)志cy清零,例如 clr c。帶借位減法指令對狀態(tài)標(biāo)志位的影響與加法指令相同。 3.2 指令系統(tǒng)指令系統(tǒng) (4)加1指令inc (increment destination by one) 指令格式:inc dest 執(zhí)行操作是把dest的內(nèi)容加1,結(jié)果送回原單元。 加1指令共有以下5種形式: inc a ;a + 1a inc rn ;rn + 1rn inc direct ;(direct)+ 1(direct) inc ri ;(
16、ri)+ 1(ri) inc dptr ;dptr + 1dptr 加1指令主要用于修改地址指針和計數(shù)次數(shù),它對cy、ac、ov 沒有影響。 3.2 指令系統(tǒng)指令系統(tǒng) (5)減1指令dec (decrement) 減1指令與加1指令格式相似,只有一個操作數(shù),該指令共 有4種形式: dec a ;a-1a dec rn ;rn1rn dec direct ;(direct)-1(direct) dec ri ;(ri)-1(ri) 這類指令不影響cy、ac、ov。 3.2 指令系統(tǒng)指令系統(tǒng) (6)乘法指令mul (7)除法指令div 指令格式:div ab 指令功能是用a中8位無符號數(shù)除以b中8
17、位無符號數(shù),所得商 存入a中,余數(shù)存入b中,并將cy和ov置0。只有當(dāng)除數(shù)b = 0 時,ov置1,表示除法的結(jié)果無意義。 例如 a = 0f4h,b = 0ah,執(zhí)行指令div ab 執(zhí)行結(jié)果為a = 18h,b = 04h,ov = 0,cy = 0 3.2 指令系統(tǒng)指令系統(tǒng) 指令格式:mul ab 指令功能:把累加器a和寄存器b中的無符號數(shù)相乘,所得16 位乘積的低位字節(jié)存入a中,高位字節(jié)存入b中。 例如 a = 1ah,b = 20h,執(zhí)行指令mul ab 執(zhí)行結(jié)果為a = 40h,b = 03h,ov = 1,cy = 0 乘法運算影響psw的狀態(tài),進(jìn)位標(biāo)志位cy總是清0。 (8).
18、 十進(jìn)制調(diào)整指令 功能:把a(bǔ)中的數(shù)作為兩個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ù)。 3.2 指令系統(tǒng)指令系統(tǒng) 邏輯與運算指令(6條) 邏輯或運算指令(6條) 邏輯運算指令 邏輯異或運算指令(6條) 累加器清0和取反指令(2條) 循環(huán)移位指令(4條) 3.2 指令系統(tǒng)指令系統(tǒng) 這類指令的助記符為anl anl a,rn ;arna anl a,direct ; a(direct)a anl a,ri
19、 ;a(ri)a anl a, # data ;adataa anl direct,a ;(direct)a(direct) anl direct, # data ;(direct)data(direct) 例如:若a=0a6h,r1=0a4h,執(zhí)行anl a,r1 后, a = 0a4h 邏輯與運算常用作字節(jié)清零或位清零。 3.2 指令系統(tǒng)指令系統(tǒng) 這類指令的助記符為orl orl a, rn ;arna orl a, direct ;a(direct)a orl a, ri ;a(ri)a orl a, # data ;adataa orl direct, a ;(direct)a(dir
20、ect) 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)容 邏輯或運算可以實現(xiàn)對某個單元的某些位置1,其余位不變。 3.2 指令系統(tǒng)指令系統(tǒng) xrl a,rn ;arna xrl a,direct ;a(direct)a xrl a,ri ;a(ri)a xrl a, # data
21、 ;adataa xrl direct,a ;(direct)a(direct) xrl direct, # data ;(direct)data(direct) 例如:若a=7fh,r1=0a5h,則執(zhí)行指令 xrl a,r1后, a=0dah。 邏輯異或運算可以用來比較兩個數(shù)據(jù)是否相等。當(dāng)兩個數(shù)據(jù)異 或結(jié)果為0,則表示相等,否則表示不相等。 3.2 指令系統(tǒng)指令系統(tǒng) 累加器清0指令: clr a ;0a 累加器按位取反指令: cpl a ;a 例如:若 a=55h,則執(zhí)行指令: cpl a ;執(zhí)行結(jié)果a=0aah clr a ;執(zhí)行結(jié)果a=00h 3.2 指令系統(tǒng)指令系統(tǒng) (1)循環(huán)右移指
22、令:rr a 功能:將累加器a的內(nèi)容逐位循環(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.2 指令系統(tǒng)指令系統(tǒng) (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)位位
23、一起逐位循環(huán)左移一位,如圖所示: 此兩操作影響cy位。 3.2 指令系統(tǒng)指令系統(tǒng) 無條件轉(zhuǎn)移指令 條件轉(zhuǎn)移指令 程序控制指令 調(diào)用和返回指令 空操作指令 nop ;pc+1pc 操作:該指令不執(zhí)行任何 操作,常用于程序的等待或 時間的延遲。 3.2 指令系統(tǒng)指令系統(tǒng) 相對轉(zhuǎn)移指令:sjmp rel 絕對轉(zhuǎn)移指令:ajmp addr11 無條件轉(zhuǎn)移指令 長轉(zhuǎn)移指令:ljmp addr16 ;addr16pc 間接轉(zhuǎn)移指令:jmp a + dptr ; a + dptrpc 操作: pc+2pc,addr11pc(d 10d0) 例如,若轉(zhuǎn)移指令首地址 2456h,即pc = 2456h,執(zhí) 行指
24、令ajmp 26ah 后,pc = 226ah,程序轉(zhuǎn)向 226ah單元執(zhí)行。 該指令把16位地址 addr16裝入程序計數(shù)器 pc,轉(zhuǎn)移范圍可達(dá)64 kb。ljmp與ajmp指 令都是直接尋址方式。 該指令采用基址變 址尋址方式,轉(zhuǎn)移地 址由數(shù)據(jù)指針dptr 和累加器a的內(nèi)容 相加形成。 例如,設(shè)a = a0h, dptr = 45a0h 執(zhí)行指令jmp a+ dptr 后, pc =4640h。 該指令采用相對尋址方式,目的地址= pc + rel。 相對轉(zhuǎn)移指令的操作數(shù)有兩種形式:偏移量和目標(biāo)地址。如 果是目標(biāo)地址,則在程序匯編時由匯編程序自動計算并填入偏移 量。 向高地址方向轉(zhuǎn)移:re
25、l=目標(biāo)地址-(首地址+2) = 地址差-2 向低地址方向轉(zhuǎn)移:rel=(目標(biāo)地址-(首地址+2)補(bǔ) 例如,若轉(zhuǎn)移指令的首地址為0100h,地址標(biāo)號loop所指 單 元為0120h,則執(zhí)行指令sjmp loop,偏移量為: rel = 0120h - (0100h + 2)= 1eh 指令機(jī)器碼為801e。 3.2 指令系統(tǒng)指令系統(tǒng) 累加器判零轉(zhuǎn)移指 令 比較轉(zhuǎn)移指令 條件轉(zhuǎn)移指令 減1不為0轉(zhuǎn)移指令 位控制轉(zhuǎn)移指令 jz rel ;若a=0,則 pc+2+relpc,否則 pc+2pc jnz rel ;若a0,則 pc+2+relpc,否則 pc+2pc 例如,設(shè)a = 01h,執(zhí)行指令:
26、 jz table1 ;a = 0,轉(zhuǎn)向 table1,a0,執(zhí)行下一條指令 dec a ;a - 1a jz table2 ;a = 0,轉(zhuǎn)向table2 執(zhí)行 cjne a,direct,rel ; a(direct),則轉(zhuǎn)移 cjne a,#data,rel ; adata,則轉(zhuǎn)移 cjne rn,#data,rel ; rndata,則轉(zhuǎn)移 cjne ri,#data, rel ; (ri)data,則轉(zhuǎn)移 djnz rn,rel ; rn-1rn,若rn0,則 pc+2+relpc,否則 pc+2pc djnz direct,rel ; (direct)-1(direct),若(di
27、rect)0, 則pc+3+relpc,否 pc+3pc jc rel ;若cy = 1,則pc + 2 + relpc,否則pc + 2pc jnc rel ;若cy = 0,則pc + 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 絕對調(diào)用指令:acall addr11 調(diào)用和返回指
28、令 長調(diào)用指令:lcall addr16 返回指令 操作過程: pcpc + 2 ;取出指令 spsp + 1 , (sp)pc (d7 d0) spsp + 1, (sp)pc (d15 d8) ;斷點地址入棧 pc (d10 d0)addr11,pc (d15 d11)不變 ;進(jìn)入子程序 例如,若sp = 60h,pc = 2100h,子程序 sub1首地址為23a0h。執(zhí)行下面指令: 2100h:acall sub1 ;指令代碼是71a0h 執(zhí)行過程: pc= pc + 2 = 2102h,將pc 壓棧,即 (61h)= 02h,(62h) = 21h,sp = 62h;用指 令提供的1
29、1 位地址01110100000b (3a0h) 替換pc 的低11位,形成目的地址 0010001110100000b,即進(jìn)入sub1子程 序。 操作過程: pcpc + 3 ;取出指令 spsp + 1,(sp)pc (d7 d0) spsp + 1,(sp)pc (d15 d8) ;斷點地址入棧 pcaddr16 ;進(jìn)入子程序 ret ;子程序返回指令 reti ;中斷返回指令 操作過程: (sp)pc (d15d8) , sp-1sp , (sp)pc (d7 d0) , sp - 1sp 位傳送指令 位操作指令 置位/復(fù)位指令 位邏輯運算指令 mov c,bit ;(bit) cy
30、mov bit,c ;cy(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) 例如, p0 = 01011010b,cy = 0,執(zhí)行指 令: setb c setb p0. 0 clr p0. 3 執(zhí)行結(jié)果為:cy = 1,p0 =01010011b anl c,bit ;cy(bit)cy anl c, / bit ;cy (/bit)
31、 cy orl c,bit ;cy(bit)cy orl c, / bit ;cy (/bit) cy cpl c ; (/cy) cy cpl bit ; (/bit) (bit) 例:設(shè)d、e、f代表位地址,計算 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è)計方法 源程序、匯編程序和目標(biāo)程序
32、之間的關(guān)系為: 匯編語言源程序 匯編程序目標(biāo)程序 1匯編語言的語句種類和格式 基本類型格式 可執(zhí)行指令語句 標(biāo)號: 操作數(shù)表;注釋 例如:add a,r1 偽指令語句 標(biāo)號 參數(shù)表;注釋 例如:org 1000h 宏指令語句用來代替匯編語言源程序中重復(fù)使用的程序的一種語句 3.3 匯編語言程序的匯編與調(diào)試匯編語言程序的匯編與調(diào)試 2匯編語言程序設(shè)計 所謂匯編語言程序設(shè)計,就是使用匯編語言指令來編寫計算機(jī)程 序。一個高質(zhì)量的匯編語言源程序,應(yīng)該具備以下幾點: 結(jié)構(gòu)簡明、清晰,便于理解。 便于閱讀、修改和調(diào)試,具有較好的維護(hù)性。 具有較高的可靠性。 程序應(yīng)該是高效率的。 用匯編語言進(jìn)行程序設(shè)計的步
33、驟可以概括如下: 分析問題,確定算法。 根據(jù)算法,畫出程序流程圖。 合理地分配存儲空間和寄存器。 編寫程序。 上機(jī)調(diào)試程序。 3.3 匯編語言程序的匯編與調(diào)試匯編語言程序的匯編與調(diào)試 3流程圖 在下一節(jié)中會著重介紹流程圖畫法及意義。 基本圖形框符號意義 起止框表示程序的開始或結(jié)束 矩形框表示計算或處理等基本操作 判斷框 用來判斷給出的條件是否成立, 根據(jù)判斷的結(jié)果決定程序的流 向 流線表示程序的流向 連接點 表示相關(guān)兩框的連接處,圓圈內(nèi) 數(shù)字相同表示連接在一起 3.3 匯編語言程序的匯編與調(diào)試匯編語言程序的匯編與調(diào)試 二、偽指令 偽指令又稱偽操作,是源程序發(fā)送給匯編程序的指令。下面介紹mcs-
34、51匯 編 程序中常用的偽指令。 常用偽指令指令格式功能 賦值偽指令equequ 賦值后的符號可以作地址使用,也可 以作立即數(shù)使用 定義字節(jié)偽指令db db 把表達(dá)式表中的字節(jié)數(shù)據(jù)存入從標(biāo) 號開始的連續(xù)存儲單元中 定義字偽指令dw dw 把表達(dá)式表中的16 位數(shù)據(jù)存入由標(biāo) 號開始的連續(xù)存儲單元,低地址 單元存放高字節(jié),高地址單元存 放低字節(jié) 存儲區(qū)定義偽指令dsds 通知匯編程序,從指定的地址開始, 保留指定數(shù)目的字節(jié)單元作為 存儲區(qū),供程序運行使用 位定義偽指令bit bit 給符號名賦以位地址 設(shè)置起始地址偽指令orgorg 指定目標(biāo)程序或數(shù)據(jù)塊在存儲器中 的起始地址 匯編結(jié)束偽指令end
35、end用于終止源程序的匯編工作 三、匯編與調(diào)試 匯 編 機(jī)器匯編 指先將匯編語言源程序輸入計算機(jī),再利用匯編程序 將其翻譯成二進(jìn)制代碼的目標(biāo)文件(. obj)的過程 手工匯編 指通過人工查找指令表,將每一條指令的機(jī)器代碼查 出,并分配存儲空間,計算地址偏移量,得到目標(biāo)文件的 過程 調(diào) 試 編成目標(biāo)程序文件.obj傳送到單片機(jī) 編寫匯編語言程序建立源程序文件.asm 3.3 匯編語言程序的匯編與調(diào)試匯編語言程序的匯編與調(diào)試 一.匯編語言程序結(jié)構(gòu) 見動畫六 3.4 匯編語言程序設(shè)計舉例 二.匯編語言程序舉例 例1 編程實現(xiàn)如圖所示的邏輯功能。其中20h、2fh、2ah是位 地址。 分析:邏輯電路的
36、功能是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 2022hfhah 3.4 匯編語言程序設(shè)計舉例 例2 比較內(nèi)部ram 30h和31h單元中無符號數(shù)的大小,使得30h單元存 放大數(shù),31h單元存放小數(shù)。 分析:先清進(jìn)位位,然后兩數(shù)作帶借位減法,根據(jù)借位標(biāo)志判斷兩 數(shù)大 小。程序流程圖如右圖所示。 程序: start: clr c mov a,30h subb a,31h jnc done ;若無借位,即(30h)(3
37、1h)時轉(zhuǎn)done mov a,30h xch a,31h ;有借位,即(30h)(31h),交換(30h)與(31h) mov 30h,a done: sjmp done 例3 編程統(tǒng)計累加器a中“1”的個數(shù)。 分析:首先判斷累加器a 是否為0,若a = 0,則程序結(jié)束;否則,先清cy,再將a 帶進(jìn)位循環(huán)左移一位,判斷進(jìn)位位cy 是否為1,為1 則計數(shù),不為1 則繼續(xù)循環(huán) 判斷a 是否為0,重復(fù)這一過程,直至a = 0。程序流程圖如圖所示。 程序: mov r1, # 0 ;計數(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,則計數(shù)器r1加
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 11-2《與妻書》教學(xué)設(shè)計-2024-2025學(xué)年高一語文下學(xué)期同步教學(xué)設(shè)計(統(tǒng)編版必修下冊)
- 探索1 物聯(lián)網(wǎng)的傳感技術(shù) 教學(xué)設(shè)計 2024-2025學(xué)年 蘇科版(2023)初中信息科技 八年級上冊
- 2024年12月國家空間科學(xué)中心太陽活動與空間天氣重點實驗室實驗人員公開招聘2人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- Module 2 Public Holiday Unit 2教學(xué)設(shè)計2024-2025學(xué)年外研版英語九年級上冊
- 2025年船用動力堆及配套產(chǎn)品合作協(xié)議書
- 第18課 從九一八事變到西安事變(教學(xué)設(shè)計)-2024-2025學(xué)年浙江省部編版歷史與社會八年級上冊
- 財務(wù)管理模擬試題與答案
- 第19課《大雁歸來》教學(xué)設(shè)計 2024-2025學(xué)年統(tǒng)編版語文七年級上冊
- 14《母雞》教學(xué)設(shè)計-2023-2024學(xué)年統(tǒng)編版四年級語文下冊
- 3《迢迢牽牛星》教學(xué)設(shè)計-2023-2024學(xué)年六年級下冊語文統(tǒng)編版
- 學(xué)校物業(yè)管理宿舍管理方案995
- PFMEA-失效模式分析案例
- 荔枝依舊年年紅
- SMT貼片線項目可行性研究報告
- 新加坡公司法-英文版
- 第五版-FMEA-新版FMEA【第五版】
- 口腔修復(fù)學(xué)第三章牙體缺損的修復(fù)
- 建設(shè)部環(huán)衛(wèi)勞動定額
- 2023年棗莊科技職業(yè)學(xué)院單招綜合素質(zhì)模擬試題及答案解析
- 美容心理學(xué)概述(美容心理學(xué)課件)
- GB/T 25890.7-2010軌道交通地面裝置直流開關(guān)設(shè)備第7-1部分:直流牽引供電系統(tǒng)專用測量、控制和保護(hù)裝置應(yīng)用指南
評論
0/150
提交評論