exp43.asm

来自「汇编语言 参考书 包含作业与答案 从入门到精通 通俗易懂」· 汇编 代码 · 共 68 行

ASM
68
字号
.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
;count			DW	0         					;保存记数器值,可用PUSH,POP代替
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
        MOV     BX,0
CONTINUE:
        ADD     SI,2
        LOOP    LP2

    CMP     BX,1
    JZ      convert
    JMP     SHORT   LP1
    

convert:								;打印程序

	mov		si,offset table
	mov 	cx,table_len
lp3:    
		;mov		[count],cx
		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	;将16进制的数转换到ASCII中对应的数,0的ASCII码为 30H (48D)
        MOV     BYTE PTR [DI],DL
        cmp		ax,0
        jz		print					;当商为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
	;mov cx,[count]
	pop	cx
	loop	lp3

.EXIT

END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?