最近为了应付8086汇编的上机考试(一纸开卷),所以写了一些输入输出、数组操作相关函数,然而并没有卵用。
代码放在了下面,又需要的童鞋自取,注释什么的感觉已经写的很详细了,希望程序里没有神马BUG~
或者点击这里下载:8086汇编:输入输出和数组操作的一些函数
DELAY_SEC ;等待N秒,N由AX输入,N最大360
CLR_SCR ;清屏
SPACE ;空格
NEW_LINE ;回车换行
PRINT_CH ;输出AL中的字符
PRINT_STR ;输出DS:AX中的字符串($结尾)
PRINT_BI ;以二进制输出AX中的比特
PRINT_HEX_CH ;以十六进制输出AL低四位的比特
PRINT_HEX ;以十六进制输出AX中的比特
PRINT_DEC ;以十进制输出AX中的数值
PRINT_NUM ;以N进制输出AX中的数值;N由DL输入,N最大36
READ_CH ;读取字符到AL中
READ_STR ;读取字符串到DS:AX中;DL为缓冲区大小
READ_DEC ;读取十进制数到AX中
READ_NUM ;读取N进制数到AX中;N由DL输入,N最大36;DH返回错误码
READ_ERR ;根据错误码输出提示信息;错误码由DH输入
IF_RAD_CH ;判断AL是否为N进制合法字符;N由DL输入,N最大36;若是,AL返回对应数值;否则,AL返回值0FFH
RE_RAD_CH ;返回AL中的数值对应的N进制字符;N由DL输入,N最大36;字符由AL返回,错误则返回'?'
RAND ;生成一随机数存于AX
RAND_RANGE ;生成[0,RANGE)内的随机数;RANGE由AX输入
STR_LEN ;返回DS:AX中的字符串长度到AX中
UPPER_CH ;将AL中的字母大写
LOWER_CH ;将AL中的字母小写
UPPER_STR ;将DS:AX中的字符串大写
LOWER_STR ;将DS:AX中的字符串小写
ARR_INIT ;数组初始化;AX为数组的字节大小;SI为数组的偏移地址;数组至少4字节大小
ARR_SIZE ;返回数组的大小到AX;SI为数组的偏移地址
ARR_CAP ;返回数组的容量到AX;SI为数组的偏移地址
ARR_IS_FULL ;判断数组是否已满;是,AX返回数组大小;否,AX返回0;SI为数组的偏移地址
ARR_GET ;返回下标为AX的值到AX中;SI为数组的偏移地址;越界,则DH返回错误码5
ARR_APPEND ;在数组末尾添加AX中的值;SI为数组的偏移地址;数组已满,则DH返回错误码6
ARR_INS ;在下标BX处插入AX中的值;SI为数组的偏移地址;数组已满,则DH返回错误码6;越界,则DH返回错误码5
ARR_DEL ;删除下标为AX的值;删除的值由AX返回;SI为数组的偏移地址;越界,则DH返回错误码5
ARR_REV ;数组逆置;SI为数组的偏移地址
ARR_SORT ;数组非递减排序;SI为数组的偏移地址
ARR_ERR ;根据错误码输出提示信息;错误码由DH输入
ARR_PRINT ;输出数组内容;SI为数组的偏移地址
;-------------------
;等待N秒,N由AX输入,N最大360
DELAY_SEC PROC
PUSHF
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MUL CS:DELAY_SEC_CPS
DIV CS:DELAY_SEC_TEN
MOV BX,AX
INT 1AH
MOV CS:DELAY_SEC_TIMES,DX
DELAY_SEC_1:
INT 1AH
SUB DX,CS:DELAY_SEC_TIMES
CMP DX,BX
JB DELAY_SEC_1
POP DX
POP CX
POP BX
POP AX
POPF
RET
DELAY_SEC_CPS DW 182
DELAY_SEC_TEN DW 10
DELAY_SEC_TIMES DW 0
DELAY_SEC ENDP
;-------------------
;-------------------
;清屏
CLR_SCR PROC
PUSHF
PUSH AX
MOV AX,3
INT 10H
POP AX
POPF
RET
CLR_SCR ENDP
;-------------------
;-------------------
;空格
SPACE PROC
PUSHF
PUSH AX
PUSH DX
MOV AH,02H
MOV DL,' '
INT 21H
POP DX
POP AX
POPF
RET
SPACE ENDP
;-------------------
;-------------------
;回车换行
NEW_LINE PROC
PUSHF
PUSH AX
PUSH DX
MOV AH,02H
MOV DL,0AH
INT 21H
MOV DL,0DH
INT 21H
POP DX
POP AX
POPF
RET
NEW_LINE ENDP
;-------------------
;-------------------
;输出AL中的字符
PRINT_CH PROC
PUSHF
PUSH AX
PUSH DX
MOV DL,AL
MOV AH,02H
INT 21H
POP DX
POP AX
POPF
RET
PRINT_CH ENDP
;-------------------
;-------------------
;输出DS:AX中的字符串($结尾)
PRINT_STR PROC
PUSHF
PUSH AX
PUSH DX
MOV DX,AX
MOV AH,09H
INT 21H
POP DX
POP AX
POPF
RET
PRINT_STR ENDP
;-------------------
;-------------------
;以二进制输出AX中的比特
PRINT_BI PROC
PUSHF
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV BX,AX
MOV AH,02H
MOV CX,16
PRINT_BI_1:
ROL BX,1
MOV DL,BL
AND DL,1
ADD DL,'0'
INT 21H
LOOP PRINT_BI_1
POP DX
POP CX
POP BX
POP AX
POPF
RE