微控制器組合語言兩數比較大小,51微控制器用組合語言怎麼程式設計幾個有符號數的比較大小

2021-03-04 06:53:17 字數 6214 閱讀 6922

1樓:匿名使用者

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

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

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

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

.......

lower:

......end

2樓:匿名使用者

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

cmp r0,r2

jb abc

cmp r1,r3

jb abc

jmp nobelow

abc:

...nobelow:...

3樓:匿名使用者

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

51微控制器 用組合語言怎麼程式設計:幾個有符號數的比較大小

4樓:匿名使用者

51微控制器中,沒有專門的有符號數比較指令,只能通過一些變通的方法來實現,比如:

比較30h和40h中有符號數的大小,結果放在r2中,大於則為1,等於為0,小於為128:

cmpdat:

mov a,30h

jb acc.7,cmpf1

mov b,a

mov a,40h

jb acc.7,cmpz2 ;30h正,40h負所以30h>40h

cjne a,b,cmpz1 ;均為正,比較大小mov r2,#0

retcmpz1:

jc,cmpz2

cmpz11:

mov r2,#128

retcmpz2:

mov r2,#1

retcmpf1:

anl a,#7fh

mov b,a

mov a,40h

jnb acc.7,cmpf3 ;30h負,40h負sjmp cmpz11 ;30負,40h正,所以30h<40hcmpf3:

anl a,#7fh

cjne a,b,cmpf10 ;兩個均為負數mov r2,#0

retcmpf10:

jc cmpz2 ;30h<40h(負數小者大)sjmp cmpz11 ;30h>40h

5樓:做而論道

設內部ram中的30h和31h單元中有兩個帶符號數,求其中的大數,放在32h單元中。

; mov 32h, 30h ;先取乙個放好.

mov a, 30h

clr c

subb a, 31h ;(30h)-(31h)

jnb acc.7, zzz ;差為正數則轉移.

jb ov, _end ;負、且溢位轉至結尾.

sjmp *** ;否則去存31h

zzz:

jnb ov, _end ;差為正、且無溢位轉至結尾.

***:

mov 32h, 31h

_end:

sjmp $end

6樓:匿名使用者

subb a,b

jnb cy ,d0 ;d0是a>b

微控制器實驗中,怎麼用彙編比較大小?

7樓:匿名使用者

微控制器比較大小可以用減法指令來實現, 比如比較兩個數a與b的大小,步驟如下:

1、先將借位清0。

2、執行指令subb,也就是a-b。

3、判斷,借位c的狀態,如果c等於1,那麼ab。

舉例如下:

cmpdat:

mov a,30h ;將被減數送累加器aclr c ;清借位subb a,31h ;減法運算

jc cmpd1 ;如果有借位轉

clr p1.0 ;點亮p1.0led燈,說明30h數大retcmdpd1:

clr p1.1 ;點亮p1.1燈,說明31h數大。ret

8樓:匿名使用者

微控制器實驗中,用組合語言程式設計比較兩個數大小,主要用subb減法指令,也可以使用cjne指令。示例程式如下:

;啟動入口

*** 0000h ;復位啟動

ljmp start ;

*** 0100h ;

;;主控程式

start: mov r0,#30h

mov x,#0

mov y,#0

loop: mov a,@r0

clr c

subb a,#111

jnc next

cpl c

mov a,@r0

subb a,y

jc num

mov y,@r0

num: mov a,@r0

subb a,#60

jc incr0

inc x

incr0: inc r0

jmp loop

next: jmp $

;x equ 20h ;

y equ 21h ;

end ;

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

9樓:匿名使用者

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

10樓:匿名使用者

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

11樓:興藍諾

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

指令atiao:指令b

51彙編實現比較三個數的大小並排序

12樓:做而論道

假設有三個數存在40h、41h、42h單元中。

先在三個數字中,找乙個最大的,放在40h。

再在餘下的兩個數字中,找乙個最大的,放在41h。

13樓:匿名使用者

51微控制器實現比較三個數的大小,並將數由小到大分別存入40h、41h、42h單元中

*** 0000h

ajmp main

*** 0100h

main: mov 30h,#98h

mov 31h,#88h

mov 32h,#78h

mov a,30h

cjne a,31h,***p1

***p1: jc b1

cjne a,32h,***p2

***p2: jc a1

mov 42h,30h

mov a,31h

cjne a,32h,a2

a2: jc a3

mov 41h,31h

mov 40h,32h

sjmp $

a3: mov 41h,32h

mov 40h,31h

sjmp $

a1: mov 42h,32h

mov 41h,30h

mov 40h,31h

sjmp $

b1: mov a,31h

cjne a,32h,***p3

***p3: jc b3

mov 42h,31h

mov a,30h

cjne a,32h,***p4

***p4: jc b3

mov 41h,30h

mov 40h,32h

sjmp $

b3: mov 42h,32h

mov 41h,31h

mov 40h,30h

sjmp $ ;

b2: mov 42h,32h ;

mov 41h,31h ;

mov 40h,30h ;

sjmp $end

14樓:匿名使用者

;氣泡排序

*** 0000h

sjmp main

*** 0030h

main: mov 30h,#65hmov 31h,#61h

mov 32h,#66h

mov r0,#30h

mov r3,#2

mov r4,#2

loop: mov a,@r0

inc r0

mov b,@r0

cjne a,b,k1

k1:jc l1

djnz r3,loop

djnz r4,l2

sjmp l3

l1:xch a,@r0

dec r0

mov @r0,a

inc r0

djnz r3,loop

djnz r4,l2

sjmp l3

l2:mov r0,#30h

mov r3,#1

ljmp loop

l3: nop

end;懸劍

;yinweiyounidecunzai

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

15樓:

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

比較轉移指令 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比較

51微控制器倒序指令組合語言,51微控制器的指令是組合語言嗎

func 版 mov r0,0 權 mov r7,8 loop rlc a xch a,r0 rrc a xch a,r0 djnz r7,loop mov a,r0ret 51微控制器的指令是組合語言嗎?組合語言 assembly language 是一種用於電子計算機 微處理器版 微控制器或其他...

51微控制器學習使用C語言好還是組合語言好

微控制器用c語言還是組合語言好?當然是c語言了,那是因為如下原因 1 c語言是高階語言,移植性好,易於維護 2 程式設計靈活,隨心所欲 3 語言層次分明,思路清晰,可讀性強。4.c語言是目前最流行的微控制器程式語言,例程 多,便於參考,微控制器技術發展之快,應用之廣,學習群體日益龐大,這和keil ...

PIC微控制器c語音變成組合語言,微控制器大神進,如何將C語言變

有個組合語言轉換器 你自己找找 這個轉化也不是很精確 很容易是自己迷糊,建議還是用c好,現在還用彙編 out了 如何用keil uvision2把c語言的微控制器程式轉換為組合語言 彙編是不可能用軟體自動轉成c語言的,想轉成c就自己寫,反正是自己的程式,程式流程內是不用變容的。keil uvisio...