📄 32060624_王克_asmhomework_1.asm
字号:
;----------------------------------------------------------------
; ╭══════┤ 32060624___王克 ├═════╮
; ║ ║
; ║ ║
; ║ ★ 汇编语言 第一次作业 ★ ║
; ║ |---------------------------------------------| ║
; ║ ║
; ║ 对给定的16个数进行排序(倒序),并输出在屏幕上。 ║
; ║ ║
; ║ 2004.10.10 ║
; ║ ║
; ╰ ════════════════════════════╯
;━┅━┅━┅━┅━┅━┅━┅━┅━━┅━┅━┅━┅━┅━┅━┅━━┅━┅━━┅━
.MODEL SMALL
.STACK 100h
.DATA
table_len DW 16
table DW 200,300,400,10,20,0,1,8
DW 41h,40,42h,50,60,0FFFFh,2,3
result DB 5 DUP(?),' $'
.CODE
.STARTUP ;冒泡排序法
START:
MOV AX,@DATA
MOV DS,AX
;--------------------------;泡排序-------------------------------------------------------
LP1:
MOV BX,1 ;泡排序的标志
MOV CX,table_len
DEC CX
MOV SI,OFFSET table
LP2: MOV AX,[SI]
CMP AX,[SI+2]
Ja CONTINUE
XCHG AX,[SI+2]
MOV [SI],AX
xor BX,BX ;BX清零
CONTINUE:
ADD SI,2
LOOP LP2
CMP BX,1
JZ convert
JMP SHORT LP1
;------------------------;将二进制转化成BCD码,并打印------------------------------
convert:
mov si,offset table
mov cx,table_len
lp3:
push cx ;保存原记数器值
MOV CX,5
MOV AX,word PTR [si]
MOV BX,10
MOV DI,OFFSET RESULT+4 ;从后往前保存
LP4: XOR DX,DX ;将DX清零
DIV BX
OR DL,30H ;也可用add dl,30h
MOV BYTE PTR [DI],DL ;将16进制的数转换到ASCII中对应的数,0的ASCII码为 30H (48D)
cmp ax,0
jz print ;当商为0时,直接去打印,可不打印高位的0.
DEC DI
LOOP LP4
print:
MOV DX,di ;从DI开始打印,因为RESULT不一定够5位
MOV AH,9
INT 21H ;调用DOS的21号中断的9号功能,将DB输出
inc si
inc si
pop cx
loop lp3
;-------------------------------end------------------------------------------------------
.EXIT
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -