組合語言求詳細注釋,組合語言求詳細注釋

時間 2022-03-14 00:05:22

1樓:匿名使用者

data  segment;定義資料段

org 2000

arr  db 5,2,1,0,2,3,8,6,5,9

count  equ $-arr

data  ends

code  segment;定義**段

assume cs:code,ds:data

start:

;初始化待排序列

mov ax,seg data ;取段位址到ax

mov ds,ax       ;將ax值置入ds

lea si,arr      ;取陣列arr的有效位址即段內偏移置入si

mov dx,count    ;將陣列元素個數置入dx

foaming:

;不足兩個元素,已有序

sub dx,1        ;外迴圈次數為count-1

jle endfoaming  ;dx為1時結束外迴圈

xor bx,bx       ;bx賦0

mov cx,dx       ;內迴圈次數賦給計數器

foaminglop:

;開始一趟排序

mov al,[si][bx]  ;依次將陣列元素賦給al (注:原程式用ax取8位數會導致錯誤結果 !)

cmp al,1[si][bx] ;與下乙個元素比較

jle next ;小於等於則不用交換

;逆序則交換

swap:

mov ah,al ;將前一元素儲存到ah   (由於是8位,所以沒有用棧操作)

mov al,1[si][bx] ;將後一元素置入al

mov [si][bx],al ;將al置入前一元素位置

mov 1[si][bx],ah ;將ah其置入後一元素位置

next:

;繼續本趟排序

inc bx ;前一元素位置下移一格

loop foaminglop ;

;開始下趟排序

jmp foaming ;

endfoaming:

;結束排序

mov ax,4c00h

int 21h

code  ends

end start;結束程式

改錯----你的程式還有錯誤,修改如下

data  segment               ;定義資料段

org       2000

arr  db        5,2,1,0,2,3,8,6,5,9

count  equ       $-arr

data  ends

code  segment               ;定義**段

assume    cs:code,ds:data

start:

;初始化待排序列

mov       ax,seg data ;取段位址到ax

mov       ds,ax       ;將ax值置入ds

lea       si,arr      ;取陣列arr的有效位址即段內偏移置入si

mov       dx,count    ;將陣列元素個數置入dx

foaming:

;不足兩個元素,已有序

sub       dx,1        ;外迴圈次數為count-1

cmp       dx,1

jle       endfoaming  ;dx為1時結束外迴圈

xor       bx,bx       ;bx賦0

mov       cx,dx       ;內迴圈次數賦給計數器

foaminglop:

;開始一趟排序

mov       al,[si][bx] ;依次將陣列元素賦給al (注:原程式用ax取8位數會導致錯誤結果 !)

cmp       al,[si][bx+1]           ;與下乙個元素比較

jle       next        ;小於等於則不用交換

;逆序則交換

swap:

mov       ah,al       ;將前一元素儲存到ah   (由於是8位,所以沒有用棧操作)

mov       al,[si][bx+1]           ;將後一元素置入al

mov       [si][bx],al ;將al置入前一元素位置

mov       [si][bx+1],ah           ;將ah其置入後一元素位置

next:

;繼續本趟排序

inc       bx          ;前一元素位置下移一格

loop      foaminglop  ;

;開始下趟排序

jmp       foaming     ;

endfoaming:

;結束排序

lea       si,arr

mov       cx,count

disp:

mov       al,[si]

xor       ah,ah

call      dispax

inc       si

loop      disp

mov       ax,4c00h

int       21h

dispax  proc      near

; 以10進製數形式顯示無符號字的值,要顯示的值事先存 ax 中

push      bx

push      cx          ;儲存bx、cx、dx、si

push      dx

push      si

push      ds

push      cs

pop       ds

jmp       numdef

divarr  dw        10000,1000,100,10,1

nz  db        0

numdef:

mov       byte ptr nz,0           ; 狀態,看是否已輸出過非 0

push      ax

lea       si,divarr

mov       cx,5

disp1:

pop       ax

mov       dx,0

mov       bx,[si]

div       bx

push      dx

cmp       al,0

jne       disp2       ; 當 al不為0時輸出

cmp       byte ptr nz,1           ; 當al 為0時,再比較nz 是否為 1

je        disp2       ; 等於1 表示前面已輸出過非 0 應將 0 輸出

cmp       cx,1        ; 當最後一位仍 為0 時 輸出 0 而非空格

je        disp2

mov       dl,20h

jmp       disp3

disp2:

add       al,30h

mov       dl,al

mov       byte ptr nz,1

disp3:

mov       ah,2

int       21h

inc       si

inc       si

loop      disp1

pop       dx

pop       ds

pop       si          ; 恢復bx、cx、dx、si

pop       dx

pop       cx

pop       bx

retdispax  endp

code  ends

end       start       ;結束程式

2樓:哥德堡快遞

已經有注釋了,還注毛呢,不會連mov、push、inc都不知道吧。。。補充一下:

org 2000 ; 當前位址往後偏移2000位元組

arr db 5,2,1,0,2,3,8,6,5,9count equ $-arr ; 當前位址-arr變數的位址,這裡表示arr的位元組數。count只是乙個常熟,不佔記憶體位址

組合語言求注釋

3樓:匿名使用者

v12 equ p1.3    ;這5句申明位變數用相應的變數名取代對應的io口

v10 equ p1.2    ;

out equ p1.1    ;

full equ p3.2    ;

loww equ p3.3    ;

org 0000h    ;微控制器復位後程式入口位址main: mov p1,#0ffh    ;p1所有口置1mov p3,#0ffh    ;p3所有口置1mov r7,#5    ;r7=5

lcall del1    ;延時

m1: jnb v12,m0    ;v12為0轉移到m0clr full    ;full清零

setb loww    ;loww置1

sjmp m2    ;跳轉到m2

m0:jnb v10,sleep    ;v10為0轉移到sleepclr loww    ;loww清零

setb full    ;full置1

m2:clr out    ;out清零

;lcall del1    ;延時

sjmp m1    ;跳轉到m1

sleep: setb out    ;out置1m3: setb loww    ;loww置1lcall del1    ;延時

clr loww    ;loww清零

lcall del1    ;延時

djnz r7,m3    ;r7減1為0轉移到m3mov p1,#0ffh    ;p1全置1mov p3,#0ffh    ;p3全置1mov pcon,#02h    ;pcon=2sjmp $    ;原地迴圈

del1: mov r1,#100    ;外層迴圈100次d1: mov r2,#100    ;中層迴圈100次d2:

 mov r3,#100    ;內層迴圈100次djnz r3,$    ;r3減1不為0原地等待djnz r2,d2    ;r2減1不為0轉d2djnz r1,d1    ;r1減1不為0轉d1ret    ;

del2: mov r4,#255    ;意思與del1一樣d3: mov r5,#255    ;

d4: mov r6,#255    ;

djnz r6,$    ;

djnz r5,d4    ;

djnz r4,d3    ;

retend    ;程式結束

什麼是組合語言,什麼是彙編和組合語言?

叢依波弘瀾 組合語言 assembly language 是面向機器的程式設計語言。在彙編語閤中,用助記符 memoni 代替操作碼,用地址符號 symbol 或標號 label 代替地址媽。這樣用符號代替機器語盲的二進位制碼,就把機器語音變成了組合語言。於是組合語言亦稱為符號語言。使用組合語言編寫...

什麼是組合語言,什麼是彙編和組合語言?

組合語言就是計算機語言,它是有0,1組成的.通俗的說就是我們人和計算機交流的語言. 介於機器語言和高階語言之間的一種 什麼是彙編和組合語言? 揚落 彙編語copy言是一種低階計算bai機程式語言,說 低階du 並不是指語言的功能和複雜程度,而是它zhi出現在計算機發展史dao的早期,但現在仍廣泛應用...

《組合語言程式設計題目解答,組合語言程式設計題目,線上等答案!!!!急!!!!!!!!!!

3 計算1090h 1280h的和。4 ax 1090h,bx 90h。5 mov dx,1 mov ax,100h mov bx,16 imul bx 1 執行後,ax f000h,bx 16,dx ffffh 2 若將imul改為mul則執行完後,ax 1600h,bx 16,dx 000bh ...