1.输入部分实现
;下面是写入过程,各寄存器存的东西:
;AX 用于DOS调用,然后还用于*10,/10之后存放结果
;BX 用于记录存了多少个数(每个数2字节16位)
;CX 存放SHL、SHR的移动次数(超过1要放在CL里)
;DX 用于存放得到每个数之前的临时值
NNUM:;先把当前数字放入内存,然后使BX+2,然后下一个数字的开始(到NEXT)
; MOV CL,4
; SHR DX,CL
MOV [BX],DX
ADD BX,2
MOV DX,0
;这里要让AL=0,DX=0,防止NEXT的第一句将数字*10对输入的第一个字符起作用
NEXT:
;输入下一个数字
MOV AH,1
INT 21H
;对输入的数进行判定,看是否是空格或者回车
CMP AL,'.' ;如果是回车符号,则证明输入完了
JZ SORTSTART ;结尾的话跳到SORT部分排序
CMP AL,' '
JZ NNUM ;如果是空格,则证明当前输入完了,将CX里的数字放到存储器中去
;对之前的数字的高位数字调整,压缩BCD
MOV CL,4
SHL DX,CL
;加入这次的个位数
SUB AL,30H ;-30H得到对应的数字
ADD DL,AL
JMP NEXT ;如果不是空格,证明当前元素没输入完,则再次检测输入当前数字的下一位
2.排序部分实现
利用双层LOOP配合堆栈段实现
;上面完成了存入数据的操作,下面是排序的操作,各寄存器的内容:
;AX 存放交换的第一个数字
;BX 没用到&#