8086汇编:输入输出和数组操作的一些函数

最近为了应付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
  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值