【汇编语言程序设计】将内存DATA开始存放的10个8位带符号二进制数进行由小到大排序的程序
答案:2 悬赏:20 手机版
解决时间 2021-01-20 23:50
- 提问者网友:聂風
- 2021-01-20 17:06
【汇编语言程序设计】将内存DATA开始存放的10个8位带符号二进制数进行由小到大排序的程序
最佳答案
- 五星知识达人网友:人间朝暮
- 2021-01-20 17:16
CODE SEGMENT
ASSUME CS:CODE
ORG 100H
START: JMP BEGIN
DATA DB 10,9,8,7,6,5,4,3,2,1
NUM EQU $-DATA
BEGIN:
PUSH CS
POP DS
PUSH CS
POP ES
LEA SI,DATA
MOV CX,NUM
CALL SORTBYTE
MOV AH,4CH
INT 21H
;===============================================
; 字节数组排序(有符号数冒泡排序)
SORTBYTE PROC NEAR
; 数组长度置入cx,字数组首地址置入 si
PUSH AX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSHF
PUSH CX
POP DX
DEC DX
@SORTBL1:
MOV CX,DX
MOV DI,SI
@SORTBL2:
MOV AL,[DI+1]
CMP AL,[DI]
JG @SORTBNEXT ; 从小到大(无符号换成 JB)
XCHG AL,[DI]
MOV [DI+1],AL
@SORTBNEXT:
INC DI
LOOP @SORTBL2
DEC DX
JNZ @SORTBL1
POPF
POP DI
POP SI
POP DX
POP CX
POP AX
RET
SORTBYTE ENDP
;===============================================
CODE ENDS
END START
ASSUME CS:CODE
ORG 100H
START: JMP BEGIN
DATA DB 10,9,8,7,6,5,4,3,2,1
NUM EQU $-DATA
BEGIN:
PUSH CS
POP DS
PUSH CS
POP ES
LEA SI,DATA
MOV CX,NUM
CALL SORTBYTE
MOV AH,4CH
INT 21H
;===============================================
; 字节数组排序(有符号数冒泡排序)
SORTBYTE PROC NEAR
; 数组长度置入cx,字数组首地址置入 si
PUSH AX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSHF
PUSH CX
POP DX
DEC DX
@SORTBL1:
MOV CX,DX
MOV DI,SI
@SORTBL2:
MOV AL,[DI+1]
CMP AL,[DI]
JG @SORTBNEXT ; 从小到大(无符号换成 JB)
XCHG AL,[DI]
MOV [DI+1],AL
@SORTBNEXT:
INC DI
LOOP @SORTBL2
DEC DX
JNZ @SORTBL1
POPF
POP DI
POP SI
POP DX
POP CX
POP AX
RET
SORTBYTE ENDP
;===============================================
CODE ENDS
END START
全部回答
- 1楼网友:渡鹤影
- 2021-01-20 17:40
dseg segment
a1 dw 1212h,3434h,5656h,7878h,9090h,2121h,4343h,6565h,8787h,9999h
c equ ($-a1)/2
dseg ends
assume cs:cseg, ds:dseg
cseg segment
start:
mov ax, dseg
mov ds, ax
mov cx, c*2
dec cx
dec cx
$0:
mov bx, 0
$2:
mov ax, a1[bx]
cmp ax, a1[bx+2]
jg $1
xchg ax,a1[bx+2]
mov a1[bx], ax
$1:
inc bx
inc bx
cmp bx, cx
jl $2
dec cx
dec cx
jg $0
;print result
mov cx, c
mov bx, 0
$3:
mov ax, a1[bx]
call print
mov ax,0e20h
int 10h
inc bx
inc bx
loop $3
mov ah,4ch
int 21h
print proc near
push cx
push bx
xor cx, cx
mov bx, 10
test ax, 8000h
jz Q0
push ax
mov ah,0eh
mov al,'-'
int 10h
pop ax
neg ax
Q0:
xor dx, dx
div bx
xor dx,0e30h
push dx
inc cx
cmp ax, 0
jnz Q0
Q1:
pop ax
int 10h
loop Q1
pop bx
pop cx
ret
print endp
cseg ends
end start
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯