如何用組合語言實現微控制器比較轉移

2021-03-07 10:26:32 字數 2923 閱讀 9285

1樓:

pan: clr cy

mov 30h,a

subb a,#10

jb cy,prog1

mov a,30h

clr cy

subb a,#20

jb cy,prog2

mov a,30h

clr cy

subb a,#30

jb cy,prog3

.....

prog1: nop

..prog2: nop

..prog3: nop..

2樓:匿名使用者

用cjne指令加查詢標誌位c就可以了。

cjne比較結果影響c的狀態

3樓:**飄渺迷人

;30h存放被測數

mov a,30h

jz goto0;為0轉處理0的程式,或返回cjne a,#11,k1;檢測a>11嗎?

k1:jc goto1 ;有借位就是小於,就是1-10了,轉相應處理程式.

cjne a,#21,k2;檢測a>21嗎?

k2:jc goto2

cjne a,#31,k3;檢測a>31嗎?

k3:jc goto3

......

如此類推

微控制器組合語言中比較指令

4樓:

剛好也有這麼個困惑,已經解決了,拿出來分享下

比較轉移指令 cjnz

cjne a,#data,rel

cjne a,direct,rel

cjne rn,#data,rel

cjne @ri,#data,rel

第一條指令的功能是將a中的值和立即數data比較,如果兩者相等,就次序執行(執行本

指令的下一條指令),如果不相等,就轉移,同樣地,我們能將rel理解成標號,即:cjnea,

#data,標號。這樣利用這條指令,我們就能判斷兩數是否相等,這在很多場合是非常有用的。

但有時還想得知兩數比較之後哪個大,哪個小,本條指令也具有這樣的功能,如果兩數不相等,則cpu還會反映出哪個數大,哪個數小,這是用cy(進位位)來實現的。如果前面的

數(a中的)大,則cy=0,不然cy=1,因此在程式轉移後再次利用cy就可判斷出a中的數

比data大還是小了。

例: mov a,r0

cjne a,#10h,l1

mov r1,#0ffh

ajmp l3

l1: jc l2

mov r1,#0aah

ajmp l3

l2: mov r1,#0ffh

l3: sjmp l3

jc是判cy是0,還是1進行轉移,如果cy=1,則轉移到jc後面的標號處

執行,如果cy=0則次序執行(執行它的下面一條指令)。

分析一下上面的程式,如果(a)=10h,則次序執行,即r1=0。如果(a)不等於10h,則轉

到l1處繼續執行,在l1處,再次進行判斷,如果(a)>10h,則cy=1,將次序執行,即執

行mov r1,#0aah指令,而如果(a)<10h,則將轉移到l2處指行,即執行mov r1,#0ffh

指令。因此最終結果是:本程式執行前,如果(r0)=10h,則(r1)=00h,如果(r0)>10h,

則(r1)=0aah,如果(r0)<10h,則(r1)=0ffh。

弄懂了這條指令,其它的幾條就類似了,第二條是把a當中的值和直接地址中的值比較,第

三條則是將直接地址中的值和立即數比較,第四條是將間址定址得到的數和立即數比較,這

裡就不詳談了,下面給出幾個對應的例程。

cjne a,10h ;把a中的值和10h中的值比較(注意和上題的區別)

cjne 10h,#35h ;把10h中的值和35h中的值比較

cjne @r0,#35h ;把r0中的值作為地址,從此地址中取數並和35h比較

怎麼用c51微控制器組合語言程式設計實現兩個數的比較,不相等則繼續執行,相等則跳轉?

5樓:匿名使用者

緊跟在你的cjne指令後根據你的比較方式再加一條判c指令再次判斷或轉移就行了。

6樓:匿名使用者

cjne指令。***pare,jump if not equal。

7樓:興藍諾

cjne a,b,tiao(如果a與b不一樣就跳到地址標號tiao執行指令b,若一樣就繼續執行下一條指令a)

指令atiao:指令b

微控制器 組合語言 兩數比較大小

8樓:匿名使用者

微控制器有比較指令cmp的嗎,請回答者再看看書吧。可以用cjne指令,它有比較功能,如cjne a,#data,label 當a<#data時,進位位置一,就可以判斷了。程式如下:

clr c ;先把進位位清零,以防誤判cjne a,#data,no_equ ;不等則轉到no_equ,相等則直接順序執行

....... ;執行相等時的程式no_equ:

jc lower ;繼續判斷,小於則跳轉到 lower,大於則順序執行

.......

lower:

......end

9樓:匿名使用者

不要想複雜了,兩個cmp就可以啦

cmp r0,r2

jb abc

cmp r1,r3

jb abc

jmp nobelow

abc:

...nobelow:...

10樓:匿名使用者

還是自己看書學習吧 這個簡單的問題 多看幾遍自然會了

求大神解答,用51微控制器組合語言實現紅綠燈的程式,不是路口的,大概註釋下就好

程式實現功能 西南北路口直行與轉彎交替通行,數碼管顯示直行通行倒計時,紅綠黃燈顯示包括人行道在內的道路交通狀態。某一方向道路擁擠時,可以人工控制調節東西南北方向通行時間。緊急情況時,各路 通燈顯示紅燈,數碼管保持資料不變。工作暫存器及儲存單元分配 1.工作暫存器 r2設定為定時器定時中斷次數,r6 ...

微控制器組合語言問題

建議你用定時中斷方式,下面的供參考 org 0000h ajmp start org 001bh ljmp time1 定時中斷1入口 org 0030h start mov 30h,0 mov 31h,0 mov 32h,0 mov 33h,0 mov p2,0ffh mov dptr,table...

at89c51微控制器怎麼用組合語言寫「多個延時程式」

微控制器組合語言中要使一個延時程式可以被不同情況下呼叫而延時不同的時間,可以通過類似於c語言中傳遞引數的方式來實現,舉例如下 org 0000h ljmp main org 0030h main mov p0,5ah p0上的led燈間隔點亮mov r7,50 r7是延時傳遞引數lcall dela...