📄 e7.asm
字号:
DATA segment
NUM dw 20 dup(?);存输入数列
i dw 0 ;数列个数
A DB ?;输出16进制的4位是的判断数
rec db 5 dup(?) ;输出缓存
DATA ENDS
code segment
assume CS:code,DS:DATA
start:
MOV AX,DATA
MOV DS,AX
MOV SI,0;NUM的偏移量初始化
MOV BX,0;存数的中间量,初始值置0
input:
MOV AH,01H
INT 21H
CMP AL,20H;遇到空格写数据
je write1
CMP AL,0DH;遇到回车写最后一个数据
je write2
sub AL,30H;若不是空格,回车
MOV CL,AL ;先把值传到CX中
MOV CH,00H;CX中的高位0
MOV AX,BX ;互换
MOV BX,0AH;BX=10
MUL BX ;结果传到DX+AX
MOV BX,AX ;互换
ADD BX,CX ;加新的数
JMP input ;
write1:
MOV [NUM+SI],BX ;存数
ADD SI,2 ;指向下一个
INC i ;数的个数加一
MOV BX,0 ;存数的中间量,初始值置0
JMP input ;
write2: ;
MOV [NUM+SI],BX ;存数
ADD SI,2 ;指向下一个
INC i ;数的个数加一
MOV DL,0AH;换行
MOV AH,02H
INT 21H
MOV CX,i ;循环次数
dec CX ;先减一
loop1:
MOV DI,CX ;存着CX
MOV BX,0
loop2:
MOV AX,NUM[BX]
CMP AX,NUM[BX+2] ;比较
ja continue ;比较下一个
XCHG AX,NUM[BX+2] ;交换
MOV NUM[BX],AX ;
continue:
ADD BX,2 ;下一个数
loop loop2
MOV CX,DI
loop loop1
mov cx,i
mov di,0
loopnum:
mov ax,[num+di]
add di,2
mov bx,10
mov si,4
changenum: ;二进制->BCD
mov dx,0
div bx
mov [rec+si],dl
dec si
cmp ax,0
ja changenum
outputnum: ;输出(从initnum开始,做预备工作)
inc si
mov dl,[rec+si]
add dl,30h
mov ah,02h
int 21h
cmp si,4
jb outputnum
mov dl,20h
mov ah,02h
int 21h
loop loopnum
MOV AH,02H;回车和换行
MOV DL,0AH
INT 21H
MOV DL,0DH
INT 21H
MOV CX,i;
MOV DI,0;
loopNUM2:
MOV BX,[NUM+DI];
ADD DI,2;
MOV A,4;
CHangeNUM2: ;
ROL BX,1;
ROL BX,1;
ROL BX,1
ROL BX,1;
MOV DL,BL;
AND DL,0FH;
ADD DL,30H;
CMP DL,3AH;
JL PRINT
ADD DL,7H;
PRINT:MOV AH,02H;
INT 21H
SUB A,1
CMP A,0
ja CHangeNUM2;
MOV DL,20H;
MOV AH,02H
INT 21H
loop loopNUM2 ;
MOV AH,02H;回车和换行
MOV DL,0AH
INT 21H
MOV DL,0DH
INT 21H
MOV AH,4CH;结束
INT 21H
code ENDS
end start
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -