1樓:胖大海君
嘿嘿 俺來幫幫你吧
1 第八句也就是 cjne @r0,a ,next 出錯了
這是一條非法指令 即51微控制器指令表中不存在的指令
正確的寫法是:
cjne @r0, #data , next 即採用指標(暫存器間接定址)的儲存器單元內容
只能與立即數比較 不能與累加器a比較
2 你是要進行2個變數資料的比較 建議採用cjne a, direct, next 指令
呵呵 滿意 就給俺加分嘍 (早知有人已經答了 何必再答啊 回答時看見沒人答啊 ??)
組合語言用「冒泡法」排序
2樓:魔法師00可可
樓主寫了那麼多,而且格式還有差別,不知道具體是幾個
下面用10個舉例
data segment
dat db 20,-10,80,-5,-70,-9,125,-15,0,40
count db 10,10
data ends
;code segment
assume cs:code,ds:data,es:data
start:mov ax,data
mov ds,ax
mov es,ax
mov bl,1
lp1: cmp bl,0
je lp4
xor bl,bl
mov cl,count
dec cl
push cx
lea di,dat
lp2:mov al,[di]
cmp al,[di+1]
jle lp3
xchg [di+1],al
mov [di],al
mov bl,1
lp3:inc di
loop lp2
pop cx
mov count,cl
jmp lp1
lp4:mov cl,10
lea di,dat
sc:mov ax,0
mov bh,2
mov al,[di] ;取數
cmp al,0 ;如果是正數則跳
jge next
neg al ;如果是負數 先將 al中的負數取補轉成對應的 正數
push ax
mov ah,02h ;同時顯示 負數的標記 '-'
mov dl,'-' ;注意這個時候 ax 的值會因為 21h中斷的呼叫而改變:) 所以先要儲存起來
int 21h ;就是說 int 21h 中斷將會有一個返回值
pop ax ;以前我也出現過一樣的問題,後來除錯的時候才發現原來某些中斷之後ax會改變
next:xor ah,ah
div count+1 ;除以 10 取 十位
mov dh,ah ;ah 是餘數 al 是商
add al,30h
mov dl,al
mov ah,02h
int 21h ;顯示 十位上的數值(如果只是兩位數的話)
mov al,dh
xor ah,ah
; div count+1 ;這為什麼還要除以10?如果說是處理3位數的話,應該把商除10而不是把餘數除10
add ax,3030h
mov dl,al ;所以最好在顯示時 判斷是否是 大於 100 或者 小於 100 再根據判斷結果來處理 div
; mov bl,ah ;ah才是所要的,故不應該再列印 al(商)值了, 總之這裡在處理 位數的顯示時有點問題
;在這裡,如果是2位數可以正確顯示如果是3位則不能,所以最後的125顯成了 <5
outp: mov ah,2
int 21h
dec bh
jz xt
mov dl,bl ;顯示個位數
jmp outp
xt: dec cl
jz done
inc di
jmp sc
done: mov ah,4ch
int 21h
code ends
end start
用微控制器組合語言編寫從30h開始的100資料的排列 從小到大程式
3樓:匿名使用者
一批單位元組無符號數,以r0為首地址指標,r2中為位元組數,將這批數進行升序排列.
sort: mov a,r0 ;
mov r1,a ;(r1)為首地址
mov a,r2 ;位元組數送入r5
mov r5,a ;(r5)為位元組數
clr f0 ;互換標誌位f0清零
dec r5 ;迴圈n-1
mov a,@r1 ;
loop: mov r3,a ;(r3)為前一個數inc r1 ;地址指向下一個數
clr c ;
mov a,@r1 ;取下一個數
subb a,r3 ;比較大小
jnc loop1 ;如果進位位cy=0,則轉移setb f0 ;互換標誌位f0置1
mov a,r3 ;前面大的數放到a
xch a,@r1 ;互換後,小的數在a,大數在@r1dec r1 ;(r1)指向前一個地址
xch a,@r1 ;小的數放到前一個地址inc r1 ; (r1)指向下一個地址
loop1: mov a,@r1 ;取下一個數djnz r5,loop
jb f0,sort 如果直接定址位=1,則轉移ret這是微控制器組合語言的經典冒泡法排序,看懂了,對你很有幫助!把r0=30h ,r2=100h-30h代入,就可以得到你要的結果
組合語言,冒泡法排序
4樓:做而論道
顯示,要先變換成 ascii 碼。
……jnz loop1
mov ah, 2
mov cx, 10
displ:
mov dl, [si]
add dl, '0' ;--加上這句int 21h
dec si
loop displ
mov ax, 4c00h……
用組合語言編寫一個首地址為buffer的10位元組陣列,用氣泡排序法是陣列中的數從小到大排序
5樓:轉頭空夢
data segment
buffer db 10 dup(?) 定義 是個位元組數 我這邊直接代替了
data segment
code segment
assume cs:code,ds:data
start:mov ax,data
mov ds,ax
xor ax,ax
lea si,buffer
mov bl,9 外迴圈次數
next1:mov cl,bl 內迴圈次數
mov di,si
next2:mov al,di
inc di
cmp al,di
jb next3 第一個數小於第二個數的話 不交換
mov dl,[di] 否則交換
mov [di-1],dl
mov [di],al
next3:dec cl
jnz next2
dec bl
jnz next1
mov ah,4ch
int 21h
code ends
end start
6樓:仒雨
我這裡有個以前編的串排序程式(組合語言的)是用冒泡法排的,要的話說下郵箱給你發過去。
用組合語言,在鍵盤裡輸入10個學生的成績,用氣泡排序法從大到小進行排 15
用組合語言實現氣泡排序演算法??
7樓:
mov就是簡單的傳送語句啦!lz問的應該是功能吧。。呵呵首先要知道氣泡排序的原理:
把一組數從第一個數開始兩兩相比。小的在前(從小到大排),否則交換位置你這段**loop1應該是控制迴圈次數的,loop2才是比較大小的!你能給我完整的**段麼?
我可以給你解釋。。。
8樓:匿名使用者
;===緩衝區定義例子===
buf db '256489713'
n equ $-buf
;===起泡排序**例子===
lea si,buf ;緩衝區地址
mov cx,n ;緩衝區中要排序的數值個數sss_lp1:
dec cx
jz sss_out
push si
push cx
sss_lp2:
mov al,[si]
cmp al,[si+1]
jc sss_next
xchg al,[si+1]
mov [si],al
sss_next:
inc si
loop sss_lp2
pop cx
pop si
jmp sss_lp1
sss_out: ;完成退出處
9樓:匿名使用者
public void accp(int a)
} }}
氣泡排序(組合語言)
10樓:鯤鵬展翅
dseg segment
n equ 10
buffer db 9,11,2,7,21,13,2,0,14,3dseg ends
cseg segment
assume cs:cseg, ds:dsegmain proc far ;主程式入口
mov ax, dseg
mov ds, ax
mov cx,n
dec cx
loop1: mov di,cx
mov bx,0
loop2: mov al,buffer[bx]cmp al,buffer[bx+1]
jge continue
xchg al,buffer[bx+1]
mov buffer[bx],al
continue: add bx,1
loop loop2
mov cx,di
loop loop1
mov ah,1;按任意鍵退出
int 21h
mov ax, 4c00h ;程式結束,返回到作業系統系統int 21h
main endp
cseg ends
end main
組合語言裡jc指令時啥意思JC在組合語言中什麼意思
jc jump if carry 當運算產生進位標誌時,即cf 1時,跳轉到目標程式處。例如 add al,bl jc carrybit inc al 如果al bl產生了進位,這一句就不執行了。carrybit neg al 這段程式沒有任何意義,僅僅作為示例哈。相同的指令還有 jnc,當cf 0...
組合語言嵌入c語言在codeblocks編譯器下應該怎麼寫
include using namespace std int main 請問用code blocks 編c語言程式,應該用什麼編譯器呢?如果是mingw setup的話是第一個gnu gcc 如果不是就選擇你電腦中安裝的編譯器 如何在codeblocks中執行c語言程式?選擇正確的語言就行了!剛開...
用arm組合語言實現下列c語言語句 ifab
keil 編譯完能直接看到彙編 的啊,幹嘛要自己翻譯 int main int argc,char argv memset ifr i arm組合語言實現下列c語言語句 if a b x a b 8 else y a c b 20 gnu彙編語法 a word 1 b word 2 c word 3...