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也刪去就可以執行。只要你的手沒有中斷服務程式快就會有中斷。每次按都有。你試一下在開發板上執行,應該可以的。原因是當你外中斷置低電平時,就會進入中斷程式。執行完就會自...