51微控制器組合語言常用資料處理程式設計求無符號數

時間 2021-08-13 08:50:15

1樓:做而論道

查詢最大值的程式,不是很簡單的嗎?

如下即可:

org 0h

mov r0, #30h

acall zi

sjmp $

;-----------------------------------

zi:mov b, #0 ;先用0當做最大值.

mov r7, #16 ;比較16次.

loop: mov a, @r0 ;取來一個數字.

cjne a, b, b1 ;比較.

b1: jc b2 ;有借位轉移.

mov b, a ;夠減則存到b中.

b2: inc r0 ;轉到下一個.

djnz r7, loop ;迴圈16遍.

ret;-----------------------------------end

2樓:亂七胡說八糟亂想

org 0h

mov r0,#30h ;這可能錯了,該項是50h才對吧,這是放數的起始地址

acall zi

sjmp $

zi: mov r7,#15 ;這是要比的數的個數

mov a,@r0 ;取數

loop: mov r1,a ;暫存

inc r0 ;為取下個數準備

mov a,@r0 ;取數

cjne a,01h,big1;r1=01h ;不相等轉

mov b,a ;相等暫存,好象是多餘的

ajmp xun_huan

big1: jc big2 ;從c進位位判cjne不同時誰大

mov b,a ;如果a大於的r1中的數儲存a

ajmp xun_huan

big2: mov a,r1 ;當a小時儲存b

mov b,a ;;當a小時儲存b

xun_huan: djnz r7,loop ;檢查數取完沒

retend

我幫你改一下吧

org 0h

ajmp in 讓開中斷入口區

org 30h

in: mov r0,#50h ;這是放數的起始地址

acall zi

sjmp $

zi: mov r7,#15 ;這是要比的數的個數

mov a,@r0 ;取數

mov b,a ;暫存第一個數到b中

loop: inc r0 ;為取下個數準備

mov a,@r0 ;取數

cjne a,b,big1 ;r1=01h ;不相等轉

big1: jc xun_huan ;從c進位位判cjne不同時誰大

mov b,a ;如果a大於b中的數儲存到b

xun_huan: djnz r7,loop ;檢查數取完沒

retend

數數少了幾行? 加了二句還少了三行

用組合語言設計一個程式,求10個無符號數中的最大值。並將最大值存入變數max中 20

3樓:生活如歌

原始檔來自《彙編子程式庫》,註釋來自

25) 標號: mms功能:求單位元組十六進位制有符號資料塊的極值入口條件:資料塊的首址在dptr中,資料個數在r7中。

出口資訊:最大值在r6中, 地址在r2r3中;最小值在r7中,地址在r4r5中。

影響資源:psw、a、b、r1~r7 堆疊需求: 4位元組mms: mov b,r7 ;儲存資料個數movx a,@dptr ;讀取第一個資料mov r6,a ;作為最大值的初始值

mov r7,a ;也作為最小值的初始值

mov a,dpl ;取第一個資料的地址

mov r3,a ;作為最大值存放地址的初始值mov r5,a ;也作為最小值存放地址的初始值mov a,dph

mov r2,a

mov r4,a

mov a,b ;取資料個數

dec a ;減一,得到需要比較的次數

jz mmse ;只有一個資料,不需要比較mov r1,a ;儲存比較次數

push dpl ;保護資料塊的首址

push dph

mms1: inc dptr ;調整資料指標movx a,@dptr ;讀取一個資料

mov b,a ;儲存

setb c ;與最大值比較

subb a,r6

jz mms4 ;相同,不更新最大值

jnb ov,mms2 ;差未溢位,符號位有效cpl acc.7 ;差溢位,符號位取反

mms2: jb acc.7,mms4;差為負,不更新最大值mov r6,b ;更新最大值

mov r2,dph ;更新最大值存放地址mov r3,dpl

sjmp mms7

mms4: mov a,b ;與最小值比較clr c

subb a,r7

jnb ov,mms6 ;差未溢位,符號位有效cpl acc.7 ;差溢位,符號位取反

mms6: jnb acc.7,mms7;差為正,不更新最小值mov r7,b ;更新最小值

mov r4,dph ;更新最小值存放地址mov r5,dpl

mms7: djnz r1,mms1 ;處理完全部資料pop dph ;恢復資料首址

pop dpl

mmse: ret

4樓:

n db 10 dup(?)

max db 0..

mov cx,10

mov bx,offset n

mov al,[bx]

next:

cmp al,[bx]

ja l1

mov al,[bx]

l1:inc bx

loop next

mov max,al;結束

利用組合語言編寫找出10個無符號數中最大數和最小數分別儲存程式

5樓:百度文庫精選

內容來自使用者:zyl8121110

一、要求:

已知在data開始的字單元中存放有10個無符號整數,試編制程式挑選出其中的最大數並存放到maxv單元中,挑選出最小數並存放到minv單元中。

二演算法分析1、求最大值:10個資料儲存在限制為10個資料的陣列中,bx中儲存陣列,將首地址資料賦值給ax,隨後完成指標後移同時資料迴圈與ax比較,如果ax<[bx],那麼ax賦值給bx,否則指標後移,直到指標指到陣列末尾時迴圈結束,最後將ax賦值給maxv,然後呼叫dos輸出資料。

2求最小值:將首地址資料賦值給ax,隨後完成指標後移同時資料迴圈與ax比較,如果ax>[bx],那麼ax賦值給bx,否則指標後移,直到指標指到陣列末尾時迴圈結束,將ax賦值給maxv,然後呼叫dos輸出資料。

三擴充套件應用

顧名思義,此程式的設計是為了在無序的一組資料中挑選出其最值。在實際中,這樣的要應用許許多多,這樣,我們可以把這個演算法付諸實踐,豐富我們的樂趣,使我們的程式設計從理論上升到實踐,從而能力得到質的飛躍。

設想,再一次歌手比賽中,評委打完分後,計分原則是去頭和尾,此時,本程式可以迅速查詢到其最高分以及最低分,並刪除之,這是一個很好的應用。

再看看我們的學校,每年必不可少的就是考試了,為了各項評比,我們需要選出最高分,無論怎麼評比,只要設定一個關鍵字,定義其屬性就可以得到最優秀的,這一應用節省了我們的時間,對比過去利用「窮舉」的查詢法,

51微控制器組合語言學習軟體,51微控制器用組合語言需要什麼軟體?

我想告訴你,keil可以編輯彙編的檔案.你建好一個project後,在source group 1上點右鍵,選add files to group source group 1 這時,就可以選中你的asm檔案 要選asm檔案得先把對話方塊中的檔案類弄選為 雙擊就可以新增到source group 1...

微控制器組合語言設計

這樣寫也可以,就是你的disp程式裡面的loop程式迴圈體是個死迴圈,沒有出口,這樣程式一直執行。最後導致多次中斷呼叫,記憶體ram耗盡,然後宕機。做中斷程式有個原則,就是中斷處理函式儘可能的短。你這個程式太長,把主程式應該承擔的工作,放到中斷服務程式中去做,況且loop 的迴圈是用ajmp跳轉過去...

簡單的C51微控制器組合語言程式分析

羅門大佬 樓上說的有理,但是即使刪去ljmp main也不行,因為在中斷時它把ea關了,也就不會中斷了。其實不用關ea,你把clr ea也刪去就可以執行。只要你的手沒有中斷服務程式快就會有中斷。每次按都有。你試一下在開發板上執行,應該可以的。原因是當你外中斷置低電平時,就會進入中斷程式。執行完就會自...