模糊的汽车灯
种子
共回答了14个问题采纳率:78.6% 举报
Output macro X
mov dx,offset X
mov ah,9
int 21h
EndM
;
STACKS SEGMENT STACK ;堆栈段
DW 128 DUP(?) ;注意这里只有128个字节
STACKS ENDS
;
DATAS SEGMENT;数据段
Old db 13,10,9,'Old:$'
Num DB 97,78,-1,0,32,14,21,27,-20,99
New db 13,10,9,'New:$'
DATAS ENDS
;
CODES SEGMENT;代码段
ASSUME CS:CODES,DS:DATAS
START:MOV AX,DATAS ;初始化
MOV DS,AX
Output Old
call Show
call Sort
call @ADD
Output New
call Show
mov ah,7
int 21h
MOV AX,4C00H ;退出程序
INT 21H
Show:;逐位输出显示
mov si,offset Num
mov cx,10
next1:lodsb
cbw
call crt
mov ax,0e20h
int 10h
loop next1
ret
Sort:;从小到大进行排序
MOV CX,10 ;内循环变量存于CX中,初值为N-1
DEC CX
LOOP1:
MOV DI,CX ;外循环变量存于DI中,初值为N-1
MOV BX,0;地址指针置为0
LOOP2:
MOV Al,Num[BX] ;取相邻两数比较
CMP Al,Num[BX+1]
JLE CONT ;被减数不大于减数则转移
XCHG Al,Num[BX+1] ;不符合,交换
MOV Num[BX],Al ;存大数
CONT:
INC BX ;修改地址指针
LOOP LOOP2 ;若一遍未比较完,继续
MOV CX,DI
LOOP LOOP1 ;若N-1遍未作完,继续
RET
@ADD:;然后逐位加5
mov si,offset Num
mov cx,10
mov al,5
next2:
add [si],al
inc si
loop next2
ret
;
crt:;输出一个字数据
push dx
push cx
push bx
or ax,ax
jns @div
push ax
mov al,'-' ;输出负号
mov ah,0eh
int 10h
pop ax
neg ax ;求补
@div:xor cx,cx
mov bx,10
nx1:xor dx,dx
div bx
or dx,0e30h
push dx
inc cx
cmp ax,0
jnz nx1
nx2:pop ax
int 10h
loop nx2
pop bx
pop cx
pop dx
ret
CODES ENDS
END START
1年前
5