Ⅰ 請高人幫忙設計一個單片機程序
一、通用數據傳送指令
1、傳送指令 MOV (move)
指令的匯編格式:MOV DST,SRC
指令的基本功能:(DST)<-(SRC) 將原操作數(位元組或字)傳送到目的地址。
指令支持的定址方式:目的操作數和源操作數不能同時用存儲器定址方式,這個限制適用於所有指令。
指令的執行對標志位的影響:不影響標志位。
指令的特殊要求:目的操作數DST和源操作數SRC不允許同時為段寄存器;
目的操作數DST不能是CS,也不能用立即數方式。
2、進棧指令 PUSH (push onto the stack)
出棧指令 POP (pop from the stack)
指令的匯編格式:PUSH SRC ;POP DST
指令的基本功能:PUSH指令在程序中常用來暫存某些數據,而POP指令又可將這些數據恢復。
PUSH SRC (SP)<-(SP)-2 ;(SP)<-(SRC)
POP DST (DST)<-((SP));(SP)<-(SP)
指令支持的定址方式:push 和 pop指令不能不能使用立即數定址方式。
指令對標志位的影響:PUSH 和 POP指令都不影響標志位。
指令的特殊要求:PUSH 和 POP指令只能是字操作,因此,存取字數據後,SP的修改必須是+2 或者 -2;
POP指令的DST不允許是CS寄存器;
3、交換指令 XCHG (exchange)
指令的匯編格式:XCHG OPR1,OPR2
指令的基本功能:(OPR1)<->(OPR2)
指令支持的定址方式:一個操作數必須在寄存器中,另一個操作數可以在寄存器或存儲器中。
指令對標志位的影戲:不影響標志位。
指令的特殊要求:不允許使用段寄存器。
二、累加器專用傳送指令
4、輸入指令 IN (input)
輸出指令 OUT (output)
指令的匯編格式:IN ac,port port<=0FFH
IN ac,DX port>0FFH
OUT port,ac port<=0FFH
OUT DX,ac port>0FFH
指令的基本功能:對8086及其後繼機型的微處理機,所有I/O埠與CPU之間的通信都由輸入輸出指令IN和OUT來完成。IN指令將信息從I/O輸入到CPU,OUT指令將信息從CPU輸出到I/O埠,因此,IN和OUT指令都要指出I/O埠地址。
IN ac,port port<=0FFH (AL)<-(port)傳送位元組 或 (AX)<-(port+1,port)傳送字
IN ac,DX port>0FFH (AL)<-((DX))傳送位元組 或 (AX)<-((DX)+1,(DX))傳送字
OUT port,ac port<=0FFH (port)<-(AL)傳送位元組 或 (port+1,port)<-(AX)傳送字
OUT DX,ac port>0FFH (DX)<-(AL)傳送位元組 或 ((DX)+1,(DX))<-(AX)傳送字
指令對標志位的影響:不影響標志位。
指令的特殊要求:只限於在AL或AX與I/O埠之間傳送信息。
傳送16位信息用AX,傳送8位信息用AL,這取決於外設埠的寬度。
5、換碼指令 XLAT (translate)
指令的匯編格式:XLAT opr 或 XLAT
指令的基本功能:這條指令根據AL寄存器提供的位移量,將BX指使的位元組表格中的代碼換存在AL中。
(AL)<-((DS)*16+(BX)+(AL))
指令對標志位的影響:不影響標志位。
指令的特殊要求:所建位元組表格的長度不能超過256位元組,因為存放位移量的是8位寄存器AL。
opr為表格的首地址,因為opr所表示的偏移地址已存入BX寄存器,所以opr在換碼指令中可有可無,有則提高程序的可讀性。
三、地址傳送指令
6、有效地址傳送器 LEA (load effective address)
指令的匯編格式:LEA reg,src
指令的基本功能:LEA指令把源操作數的有效地址送到指定的寄存器,這個有效地址是由src選定的一種存儲器定址方式確定的。
指令支持的定址方式:各種存儲器定址方式。
指令對標志位的影響:不影響標志位。
指令的特出要求:指令中reg不能是段寄存器;
7、指針送寄存器和DS LDS (load DS with point)
指針送寄存器和ES LES (load ES with point)
指令的匯編格式:LDS reg,src
LES reg,src
指令的基本功能:LDS和LES指令把確定內存單元位置的偏移地址送寄存器,段地址DS或ES。這個偏移地址和段地址(也稱地址指針)是由src指定的兩個相繼字單元提供的。
LDS reg,src (reg)<-(src) (DS)<-(src+2)
LES reg,src (reg)<-(src) (ES)<-(src+2)
指令支持的定址方式:src必須為存儲器定址方式
指令對標志位的影響:不影響標志位。
指令的特殊要求:指令中REG不能是段寄存器;
四、標志寄存器傳送指令
8、標志寄存器的低位元組送AH LAHF (load AH with FLAGS)
指令的匯編格式:LAHF
指令的基本功能:(AH)<-(FLAGS)0-7
指令對標志位的影響:不影響標志位
9、AH送標志寄存器低位元組 SAHF(store AH into FLAGS)
指令的匯編格式:SAHF
指令的基本功能:(FLAGS)0-7<-(AH)
指令對標志位的影響:由裝入值來確定標志位的值。
10、標志進棧 PUSHF (push the flags)
指令的匯編格式:PUSHF
指令的基本功能:(SP)<-(SP)-2 ((SP)+1,(SP))<-(FLAGS)0-15
指令對標志位的影響:不影響標志位。
11、標志出棧 POPF (pop the FLAGES)
指令的匯編格式:POPF
指令的基本功能:(FLAGS)0-15<-((SP)+1,(SP)) (SP)<-(SP)+2
指令對標志位的影響:由裝入值來確定標志位的值。
[算術指令]
一、加法指令
12、加法指令 ADD (addition)
指令的匯編格式:add dst,src
指令的基本功能:(dst)<-(src)+(dst)
指令支持的定址方式:他們兩個操作數不能同時為存儲器定址。即為除源操作數為立即數的情況外,源操作數和目地操作數必須有一個寄存器定址方式。
指令對標志位的影響:SF=1 加法結果為負數(符號位為1)
SF=0 加法結果為正數(符號位為0)
ZF=1 加法結果為零
ZF=0 加法結果不為零
CF=1 最高有效位向高位有進位
CF=0 最高有效位向高位無進位
OF=1 兩個同符號數相加(正數+正數 或 負數+負數),結果符號與其相反。
OF=0 兩個不同符號數相加,或同符號數相加,結果符號與其相同。
13、帶進為加法指令 ADC (add with carry)
指令的匯編格式:ADD dst,src
指令的基本功能:(dst)<-(src)+(dst)+CF
指令支持的定址方式:他們兩個操作數不能同時為存儲器定址。即為除源操作數為立即數的情況外,源操作數和目地操作數必須有一個寄存器定址方式。
指令對標志位的影響:SF=1 加法結果為負數
SF=0 加法結果為正數
ZF=1 加法結果為零
ZF=0 加法結果不為零
CF=1 最高有效位向高位有進位
CF=0 最低有效位相高位無進位
OF=1 兩個同符號數相加,結果符號與其相反,
OF=0 兩個同符號數相加,或同符號相加,結果符號與其相同
14、加1指令 INC (increament)
指令的匯編格式:INC opr
指令的基本功能:(opr)<-(opr)
指令支持的定址方式 可以使用除立即數方式外的任何定址方式
指令對標志位的影響:SF=1 加法結果為負數
SF=0 加法結果為正數
ZF=1 加法結果為零
ZF=0 加法結果不為零
OF=1 兩個同符號數相加,結果符號與其相反,
OF=0 兩個同符號數相加,或同符號相加,結果符號與其相同。
二、減法指令
15、減法指令 SUB (subtract)
指令的匯編格式:SUB dst,src
指令的基本功能:(dst)<-(dst)-(src)
指令支持的定址方式:他們兩個操作數不能同時為存儲器定址。即為除源操作數為立即數的情況外,源操作數和目地操作數必須有一個寄存器定址方式。
指令對標志位的影響:SF=1 減法結果為負數(符號位為1)
SF=0 減法結果為正數(符號位為0)
ZF=1 減法結果為零
ZF=0 減法結果不為零
CF=1 二進制減法運算中最高有效位向高位有借位(被減數小於減數,不夠減的情況)
CF=0 二進制減法運算中最高有效為向高位無借位(被減數〉=減數,夠減的情況)
OF=1 兩數符號相反(正數-負數,或負數-正數),而結果符號與減數相同。
OF=0 同符號數相減時,或不同符號數相減,其結果符號與減數不同。
16、帶借位減法指令 SBB (subtract with borrow)
指令的匯編格式:SBB dst,src
指令的基本功能:(dst)<-(dst)-(src)-CF
指令支持的定址方式:他們兩個操作數不能同時為存儲器定址。即為除源操作數為立即數的情況外,源操作數和目地操作數必須有一個寄存器定址方式。
指令對標志位的影響:SF=1 減法結果為負數(符號位為1)
SF=0 減法結果為正數(符號位為0)
ZF=1 減法結果為零
ZF=0 減法結果不為零
CF=1 二進制減法運算中最高有效位向高位有借位(被減數小於減數,不夠減的情況)
CF=0 二進制減法運算中最高有效為向高位無借位(被減數〉=減數,夠減的情況)
OF=1 兩數符號相反(正數-負數,或負數-正數),而結果符號與減數相同。
OF=0 同符號數相減時,或不同符號數相減,其結果符號與減數不同。
17、減1指令 DEC (decrement)
指令的匯編格式:DEC opr
指令的基本功能:(opr)<-(opr)-1
指令支持的定址方式:可以使用除立即數方式外的任何定址方式。
指令對標志位的影響:SF=1 減法結果為負數(符號位為1)
SF=0 減法結果為正數(符號位為0)
ZF=1 減法結果為零
ZF=0 減法結果不為零
OF=1 兩數符號相反(正數-負數,或負數-正數),而結果符號與減數相同。
OF=0 同符號數相減時,或不同符號數相減,其結果符號與減數不同。
18、比較指令 CMP (compare)
指令的匯編格式:CMP opr1,opr2
指令的基本功能:(opr1)-(opr2),根據相減結果設置條件碼,但不回送結果。
指令支持的定址方式:他們兩個操作數不能同時為存儲器定址。即為除源操作數為立即數的情況外,源操作數和目地操作數必須有一個寄存器定址方式。
指令對標志位的影響:SF=1 減法結果為負數(符號位為1)
SF=0 減法結果為正數(符號位為0)
ZF=1 減法結果為零
ZF=0 減法結果不為零
CF=1 二進制減法運算中最高有效位向高位有借位(被減數小於減數,不夠減的情況)
CF=0 二進制減法運算中最高有效為向高位無借位(被減數〉=減數,夠減的情況)
OF=1 兩數符號相反(正數-負數,或負數-正數),而結果符號與減數相同。
OF=0 同符號數相減時,或不同符號數相減,其結果符號與減數不同。
19、求補指令 NEG (negate)
指令的匯編格式:NEG opr
指令的基本功能:(opr)<- -(opr)
指令支持的定址方式:可以使用除立即數方式外的任何定址方式。
指令對標志位的影響:CF=1 不為0的操作數求補時
CF=0 為0的操作數求補時
OF=1 操作數為-128(位元組運算)或操作數為-32768(字運算)
OF=0 當求補運算的操作數不為-128(位元組)或-32768(字)時
三、乘法指令
20、無符號乘法指令 NUL (unsigned multiple)
有符號乘法指令 IMUL(signed muliple)
指令的匯編格式:NUL src
IMUL src
指令的基本功能:(AX)<-(AL)*(src)
(DX,AX)<-(AX)*(src)
指令支持的定址方式:src可以使用除立即數方式以外的任一種定址方式。
指令對標志位的影響:乘法指令隻影響標志位CF和OF,其他條件碼位無定義。
MUL指令的條件碼設置為:
CF OF=0 0 乘積的高一半為0(位元組操作的(AH)或字操作的(DX))
CF OF=1 1 乘積的高一半不為0
IMUL指令的條件碼設置為:
CF OF=0 0 乘積的高一半為低一半的符號擴展.
CF OF=1 1 其他情況
指令的特殊要求:MUL和IMUL指令的區別僅在於操作數是無符號還是帶符號數,它們的共同點是,指令中只給出源操作數src,目的操作數是隱含的,它只能是累加器(字運算為AX,位元組運算為AL)。隱含的乘積寄存器是AX或DX(高位)和AX(低位)。
四、符號擴展指令
21、節擴展為字 CBW (convert byte to word)
指令的匯編格式:CBW
指令的基本功能:(AH)=00H 當(AL)的最高有效位為0時
(AH)=FFH 當(AL)的最高有效位為1時
指令對標志位的影響:不影響標志位
指令的特殊要求:這是條無操作數的指令,進行符號擴展的操作數必須存放在AL寄存器或AX寄存器中。
22、字擴展為雙字 CWD (convert word to double word)
指令的匯編格式:CWD
指令的基本功能:(DX)=0000H 當(AX)的最高有效位為0時
(DX)=FFFFH 當(AX)的最高有效位為1時
指令對標志位的影響:不影響標志位
指令的特殊要求:這是條無操作數的指令,進行符號擴展的操作數必須存放在AL寄存器或AX寄存器中。
五、除法指令
23、無符號數除法 DIV (unsigned divide)
帶符號數除法 IDIV (singed divide)
指令的匯編格式:DIV src
IDIV src
指令的基本功能:字操作
(AL)<-(AX)/src的商
(AH)<-(AX)/src的余數
位元組操作
(AX)<-(DX,AX)/src的商
(DX)<-(DX,AX)/src的余數
指令支持的定址方式:src作為除數,可用除立即數以外的任一種定址方式來取得。
指令對標志位的影響:不影響條件碼。
指令的特殊要求:除法指令要求字操作時,被除數必須為32位,除數是16位,商和余數是16位的;
位元組操作時,被除數必須為16位,除數是8位,得到的商和余數是8位的。
六、十進制調整指令
[邏輯指令]
一、邏輯運算
24、邏輯與 AND (logic and)
指令的匯編格式:AND dst,src
指令的基本功能:(dst)<-(dst)與(src)
指令支持的定址方式:兩個操作數不能同時為存儲器定址。即為除源操作數為立即數的情況外,源操作數和目地操作數必須有一個寄存器定址方式。
指令對標志位的影響:指令執行後 CF 和 OF 置零,AF無定義。
SF=1 指令執行後的結果為負數(符號位為1)
SF=0 指令執行後的結果為正數(符號位為0)
ZF=1 指令執行後的結果為零
ZF=0 指令執行後的結果不為零
PF=1 結果操作數中1的個數為偶數時置1
PF=0 結果操作數中1的個數為奇數時置0
25、邏輯或 OR (logic or)
指令的匯編格式:OR dst,src
指令的基本功能:(dst)<-(dst)或(src)
指令支持的定址方式:兩個操作數不能同時為存儲器定址。即為除源操作數為立即數的情況外,原操作數和目的操作數必須有一個寄存器定址方式。
指令對標志位的影響:令執行後 CF 和 OF 置零,AF無定義。
SF=1 指令執行後的結果為負數(符號位為1)
SF=0 指令執行後的結果為正數(符號位為0)
ZF=1 指令執行後的結果為零
ZF=0 指令執行後的結果不為零
PF=1 結果操作數中1的個數為偶數時置1
PF=0 結果操作數中1的個數為奇數時置0
26、邏輯非 NOT (logic not)
指令的匯編格式:NOT orc
指令的基本功能:(dst)<-(opr)
指令支持的定址方式:除立即數定址方式以外的其餘定址方式
指令對標志位的影響:對標志位無影響
27、異或 XOR (exclusice or)
指令的匯編格式:XOR dst,src
指令的基本功能:(dst)<-(dst)異或(src)
指令支持的定址方式:兩個操作數不能同時為存儲器定址。即為除源操作數為立即數的情況外,原操作數和目的操作數必須有一個寄存器定址方式。
指令對標志位的影響:令執行後 CF 和 OF 置零,AF無定義。
SF=1 指令執行後的結果為負數(符號位為1)
SF=0 指令執行後的結果為正數(符號位為0)
ZF=1 指令執行後的結果為零
ZF=0 指令執行後的結果不為零
PF=1 結果操作數中1的個數為偶數時置1
PF=0 結果操作數中1的個數為奇數時置0
28、測試指令 TEST
指令的匯編格式:TEST opr1,opr2
指令的基本功能:(opr1)與(opr2)
指令支持的定址方式:兩個操作數不能同時為存儲器定址,即為除源操作數為立即數的情況外,源操作數和目的操作數必須有一個寄存器定址方式。
指令對標志位的影響:令執行後 CF 和 OF 置零,AF無定義。
SF=1 指令執行後的結果為負數(符號位為1)
SF=0 指令執行後的結果為正數(符號位為0)
ZF=1 指令執行後的結果為零
ZF=0 指令執行後的結果不為零
PF=1 結果操作數中1的個數為偶數時置1
PF=0 結果操作數中1的個數為奇數時置0
二、移位指令
29、邏輯左移 SHL (shift logical left)
指令的匯編格式:SHL dst,cnt
指令的基本功能:SHL指令向左逐位移動cnt次,每次逐位移動後,最低位用0來補充,最高位移入CF。
指令支持的定址方式:目的操作數dst可以是除立即數外的任何定址方式。移位次數(或位數)cnt=1時,1可以直接寫在指令中,cnt〉1時,cnt必須放入CL寄存器中。
指令對標志位的影響:CF=移入的數值
OF=1 當cnt=1時,移動後最高位的值發生變化。
OF=0 當cnt=1時,移動時最高位的值未發生變化。
SF、ZF、PF根據移動後的結果設置。
30、邏輯右移 SHR (shift logical right)
指令的匯編格式:SHR dst,cnt
指令的基本功能:SHR指令向右逐位移動cnt次,每次逐位移動後,最高位用0來補充,最低位移入CF。
指令支持的定址方式:目的操作數dst可以是除立即數外的任何定址方式。移位次數(或位數)cnt=1時,1可以直接寫在指令中,cnt〉1時,cnt必須放入CL寄存器中。
指令對標志位的影響:CF=移入的數值
OF=1 當cnt=1時,移動後最高位的值發生變化。
OF=0 當cnt=1時,移動時最高位的值未發生變化。
SF、ZF、PF根據移動後的結果設置。
31、算術左移 SAL (shift arithmetic left)
指令的匯編格式:SAL dst cnt
指令的基本功能:SAL指令向左逐位移動cnt次,每次逐位移動後,最低位用0來補充,最高位移入CF。
指令支持的定址方式:目的操作數dst可以是除立即數外的任何定址方式。移位次數(或位數)cnt=1時,1可以直接寫在指令中,cnt〉1時,cnt必須放入CL寄存器中。
指令對標志位的影響:CF=移入的數值
OF=1 當cnt=1時,移動後最高位的值發生變化。
OF=0 當cnt=1時,移動時最高位的值未發生變化。
SF、ZF、PF根據移動後的結果設置。
32、算術右移 SAR (shift arithmetic right)
指令的匯編格式:SAR dst,cnt
指令的基本功能:SAR指令向右逐位移動cnt次,每次逐位移動後,最高位用符號位來補充,最低位移入CF。
指令支持的定址方式:目的操作數dst可以是除立即數外的任何定址方式。移位次數(或位數)cnt=1時,1可以直接寫在指令中,cnt〉1時,cnt必須放入CL寄存器中。
指令對標志位的影響:CF=移入的數值
OF=1 當cnt=1時,移動後最高位的值發生變化。
OF=0 當cnt=1時,移動時最高位的值未發生變化。
SF、ZF、PF根據移動後的結果設置。
33、循環左移 ROL (rotate left)
指令的匯編格式:ROL dst,cnt
指令的基本功能:ROL 對由dst指定的寄存器或存儲器操作數左移循環移動cnt所指定的次數,每左移一次,把最高位同時移入CF和操作數最低位。
指令支持的定址方式:目的操作數dst可以是除立即數外的任何定址方式。移動次數(或位數)cnt=1時,1可以直接寫在指令中,cnt〉1時,cnt必須放入CL寄存器中。
指令對標志位的影響:CF=移入的數值
OF=1 當cnt=1時,移動後最高位的值發生變化。
OF=0 當cnt=1時,移動時最高位的值未發生變化。
SF、ZF、PF根據移動後的結果設置。
34、循環右移 ROR (rotate right)
指令的匯編格式:ROR dst,cnt
指令的基本功能:ROR 對由dst指定的寄存器或存儲器操作數右移循環移動cnt所指定的次數,每右移一次,把最低位同時移入CF和操作數最高位。
指令支持的定址方式:目的操作數dst可以是除立即數外的任何定址方式。移動次數(或位數)cnt=1時,1可以直接寫在指令中,cnt>1時,cnt必須放入CL寄存器中。
指令對標志位的影響:CF=移入的數值
OF=1 當cnt=1時,移動後最高位的值發生變化。
OF=0 當cnt=1時,移動時最高位的值未發生變化。
SF、ZF、PF根據移動後的結果設置。
35、帶進位的循環左移 RCL (rotate left through carry)
指令的匯編格式:RCL dst,cnt
指令的基本功能:RCL 對由dst指定的寄存器或存儲器操作數,連同進位標志CF左循環移動,m所指定的次數,每左移一次,把操作數的最高位移入CF,而CF中原有內容移入操作數的最低位。
指定支持的定址方式:目的操作數dst可以是除立即數外的任何定址方式。移動次數(或位數)cnt=1時,1可以直接寫在指令中,cnt〉1時,cnt必須放入CL寄存器中。
指令對標志位的影響:CF=移入的數值。
OF=1 當cnt=1時,移動後最高位的值未發生變化。
OF=0 當cnt=1時,移動後最高位的值發生變化。
SF、ZF、PF標志位不受影響。
36、帶進位的循環右移 RCR (rotate right through carry)
指令的匯編格式:RCR dst,cnt
指令的基本功能:RCR 對由dst指定的寄存器或存儲器操作數,連同進位標志CF右循環移動,m所指定的次數,每右移一次,把操作數的最高低位移入CF,而CF中原有內容移入操作數的最高位。
指令支持的定址方式:目的操作數dst可以是除立即數外的任何定址方式。移動次數(或位數)cnt=1時,1可以直接寫入指令中,cnt〉1時,cnt必須放入CL寄存器中。
指令對標志位的影響:CF=移入的數值。
OF=1 當cnt=1時,操作數最高位的值未發生變化。
OF=0 當cnt=1時,操作數最高位的值發生變化。
SF、ZF、PF標志位不受影響。
[串處理指令]
一、設置方向標志指令
37、DF置零 CLD (clear direction flag)
DF置一 STD (set direction flag)
指令的匯編格式:CLD
STD
指令的基本功能:CLD DF=0
STD DF=1
二、串處理指令
38、串傳送 MOVSB / MOVSW (move string byte/word)
指令的匯編格式:MOVSB
MOVSW
指令的基本功能:(ES:DI)<-(DS:SI)
(SI)<-(SI)+/-1(位元組)或+/-2(字)
(DI)<-(DI)+/-1(位元組)或+/-2(字)
指令對條件碼的影響:不影響條件碼。
指令的特殊要求:源串必須在數據段中,目的串必須在附加段中,串處理指令隱含的定址方式是SI和DI寄存器的間接定址方式。源串允許使用段跨越前綴來指定段。
39、存串 STOSB / STOSW (stroe from string byte/word)
指令的匯編格式:STOSB
STOSW
指令的基本功能:(ES:DI)<-(AL)或(AX)
(DI)<-(DI)+/-1(位元組)或+/-2(字)
指令對條件碼的影響:不影響條件碼。
指令的特殊要求:源串必須在數據段中,目的串必須在附加段中,串處理指令隱含的定址方式是SI和DI寄存器的間接定址方式。源串允許使用段跨越前綴來指定段。
40、取串LODSB / LODSW (load from string byte/word)
指令的匯編格式:LODSB
LODSW
指令的基本功能:(AL)或(AX)<-(DS:SI)
(SI)<-(SI)+/-1(位元組)或+/-2(字)
指令對條件碼的影響:不影響條件碼。
指令的特殊要求:源串必須在數據段中,目的串必須在附加段中,串處理指令隱含的定址方式是SI和DI寄存器的間接定址方式。源串允許使用段跨越前綴來指定段。
41、串比較 CMPSB / CMPSW (compare string byte/word)
指令的匯編格式:CMPSB
CMPSW
指令的基本功能:(DS:SI)-(ES:DI) 根據比較結果設置條件碼
(SI)<-(SI)+/-1(位元組)或+/-2(字)
(DI)<-(DI)+/-1(位元組)或+/-2(字)
指令對條件碼的影響:SF=1 減法結果為負數(符號位為1)
SF=0 減法結果為正數(符號位為0)
ZF=1 減法結果為零
ZF=0 減法結果不為零
CF=1 二進制減法運算中最高有效位向高位有借位(被減數小於減數,不夠減的情況)
CF=0 二進制減法運算中最高有效為向高位無借位(被減數〉=減數,夠減的情況)
OF=1 兩數符號相反(正數-負數,或負數-正數),而結果符號與減數相同。
OF=0 同符號數相減時,或不同符號數相減,其結果符號與減數不同。
三、循環指令
68、循環 LOOP (loop)
指令的匯編格式:LOOP label
指令的基本功能:① (CX)←(CX)-1
② 若(CX)≠0,則(IP)←(IP)當前+位移量,否則循環結束。
指令的特殊要求:循環指令都是短轉移格式的指令,也就是說,位移量是用8位帶符號數來表示的,轉向地址在相對於當前IP值的-128 ~ +127位元組范圍之內。
69、為零/相等時循環 LOOPZ/LOOPE (loop while nonzero or equal)
指令的匯編格式:LOOPNZ/LOOPNE label
指令的基本功能:① (CX)←(CX)-1
② 若ZF=1且(CX)≠0,則(IP)←(IP)當前+位移量,否則循環結束。
指令的特殊要求:循環指令都是短轉移格式的指令,也就是說,位移量是用8位帶符號數來表示的,轉向地址在相對於當前IP值的-128 ~ +127位元組范圍之內。
70、不為零/不相等時循環 LOOPNZ/LOOPNE (loop while nonzero or not equal)
指令的匯編格式:LOOPNZ/LOOPNE label
指令的基本功能:① (CX)←(CX)-1
② 若ZF=0且(CX)≠0,則(IP)←(IP)當前+位移量,否則循環結束。
指令的特殊要求:循環指令都是短轉移格式的指令,也就是說,位移量是用8位帶符號數來表示的,轉向地址在相對於當前IP值的-128 ~ +127位元組范圍之內。
Ⅱ AVR單片機怎麼產生占空比可調PWM波形
AVR單片機產生占空比可調PWM波形:
設置TC1為快速PWM方式,輸入頻率為1MHz時,在PD4和PD5輸出非反相的PWM,頻率1M/100=10KHz,占空比通過設置OCR1A和OCR1B來實現:
PORTD=0x00;
DDRD=0x30;
TCCR1A=0xA2;
TCCR1B=0x19;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00; //ICR設置PWM頻率
ICR1L=0x63;
OCR1AH=0x00; //設置PD4輸出占空比
OCR1AL=0x22;
OCR1BH=0x00; //設置PD5輸出占空比
OCR1BL=0x22;
Ⅲ AVR 單片機中如何分別用OCR1A 和 OCR1B 產生PWM波來控制兩個直流電機這是怎麼弄得謝謝了
設置TCCR1A 和 TCCR1B 但是不能用OCR1A作為TOP值. 只能用8.9.10位的快速PWM或者相位修正PWM.
Ⅳ 匯編難不
我覺得就學校課本而言不是很難,但要真的學好還需要看更多的。匯編指令比較多。很多人都在說現在幹嘛還要學這個,其實高級語言要學,匯編也不能拋棄,它能讓你明白計算機的編譯原理。嵌入式,反病毒等都要用到匯編。我現在自學單片機還是有用匯編。總之,既然開設了就要學好,有益無害的。
Ⅳ c語言中bit型變數的問題
在Tubor
C
和MSDN中沒有bit
這個類型。但是在單片機中有。這和編譯器有關。
(bit)0x81的結果應該是1,(bit)0x00的結果應該是0。
(bit)0xAB只要AB不同時為0,結果都為1。
(今天下午親自用單片機測試過)
Ⅵ 51單片機C語言單片機慢起動慢停止驅動程序
在循環里判斷是否滿足跳出的條件,滿足則跳出循環,不滿足就繼續延時直到延時結束。
具體的條件要有程序的要求來,比如說某個IO口的電平的狀態。
sbit state=P1^7;
delay(uint)
{
uint x,y;
for(x=1000;x>0;x--)
for(y=1200;y>0;y--)
{
if(state==1) return ;//當p1.7口為高時跳出循環
}
}
//由於加入了一條語句,延時要重新計算
Ⅶ 如何在單片機中用OCR軟體識別文字
CAJviewer就有這個功能,在工具菜單下面有個文字識別選項,這個就是ocr了,我經常用。
Ⅷ AVR ATmega16單片機中如何分別用OCR1A 和 OCR1B 產生PWM波來控制兩個直流電機
要看控制模式是快速 還是相位修正的 TOP值一般都在OCR1A或者ICR1上 再者就是OC1A一般得到的是方波 0C1B才可以得到任意的PWM
Ⅸ 51單片機設計呼吸燈
原發布者:呦_
小屁孩
基於單片機與PWM的
呼吸燈
設計實訓指導教師:班級:設計人姓名:設計日期:設計地點:完成時間:摘要本設計是基於單片機的原理與介面設計,採用單片機I/O口,加以
C語言編程
實現LED漸亮再漸暗類似人的呼吸一樣的效果。關鍵詞
AT89C51
,PWM(
脈寬調制
)一、設計要求:呼吸燈就是讓
LED燈
的閃爍像呼吸一樣,時呼時吸,時亮時暗,利用LED的余輝和人眼的暫留效應,看上去和人的呼吸一樣。二、
設計原理
:用C語言編程實現PWM(脈寬調制)輸出驅動LED,逐漸增加PWM的
占空比
從而實現LED模擬
呼吸的過程
,即漸亮再漸暗再漸亮再漸暗……如此往復,再利用LED的余輝和人眼的暫留效應,看上去就和人的呼吸一樣。三、整體方案設計8個LED按照順序逐個實現呼吸效果。加以其他閃爍花樣增加更炫彩的效果。四、實驗元件及器材(1)元件:LED(
發光二極體
)8個1KΩ電阻8個
1nf
電容2個
晶振
1個
AT89C51晶元
1個(2)器件:
Atmega128
開發板
1塊計算機1台5、硬體原理(1)
主電路
:8個LED分別連接AT89C51的P1口,使用共陽方式,並加以1kΩ的電阻接入電源。