⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ylib16.asm

📁 第1章 微型计算机与微处理器 第2章 存储器 第3章 微型计算机输入输出接口 第4章 微型计算机的中断系统 第5章 可编程接口芯片 第6章 DMA传输 第7章 数/模与模/数转换 第
💻 ASM
字号:
; YLIB  PROC
;-------------------------------------------------

PUBLIC  READDEC,READINT,WRITEDEC,WRITEINT,WRITEHEX,CRLF

;-------------------------------------------------

CODE1   SEGMENT USE16

        ASSUME  CS:CODE1,DS:CODE1

;-------------------------------------------------
c10     dw      10
sign    db      ?
hextab  db      '0123456789ABCDEF'
CF	DB	0DH, 0AH,'$'
;-------------------------------------------------
CRLF	PROC	FAR
	PUSH	DX
	PUSH	AX
	PUSH	DS
	PUSH	CS
	POP	DS
	LEA	DX, CF
	MOV	AH, 09H
	INT	21H
	POP	DS
	POP	AX
	POP	DX
	RET
CRLF	ENDP
;------------------------------------------------
READDEC PROC    FAR
        
        PUSH    DX
        PUSH    DS
        PUSH    BX
        
        CMP     DX, 0FFFFH
        JE      RDEC0
        MOV     AH, 09H
        INT     21H
RDEC0:
        PUSH    CS
        POP     DS
        MOV     BX, 0
RDEC1:
        MOV     AH, 1
        INT     21H
        CMP     AL, 0DH
        JE      RDECDONE
        CMP     AL,'0'
        JB      RDECERR
        CMP     AL, '9'
        JA      RDECERR
        AND     AX, 0FH
        XCHG    AX, BX
        MUL     C10
        ADD     BX, AX
        JMP     RDEC1
RDECERR:
        LEA     DX,RDECMSS
        MOV     AH, 9
        INT     21H
        JMP     RDEC1
RDECDONE:
        MOV     DL, 0AH
        MOV     AH, 2
        INT     21H

        MOV     AX, BX
        POP     BX
        POP     DS
        POP     DX

        RET
READDEC ENDP

;-------------------------------------------------

READINT PROC    FAR
        push    ds
        push    dx
        push    bx

        cmp     dx, 0ffffh
        je      rintskip
        mov     ah, 09h
        int     21h

rintskip:
        push    cs
        pop     ds

rint00: mov     sign,0
        mov     bx, 0

rint0:  mov     ah, 1   ;Input  first char
        int     21h

        cmp     al, 0dh
        je      rint5
        cmp     al,'+'
        je      rint3
        cmp     al,'-'
        jne     rint1
        mov     sign,1
        jmp     rint3

rint2:  lea     dx,rinterr
        mov     ah, 9
        int     21h
        jmp     rint00
rint3:  mov     ah,1
        int     21h
rint1:  cmp     al, 0dh
        je      rint5
        cmp     al,'0'
        jb      rint2
        cmp     al,'9'
        ja      rint2
rint4:  and     ax, 0fh
        xchg    ax, bx
        mul     c10
        add     bx, ax
        jmp     rint3
rint5:  cmp     sign, 0
        je      rint6
        neg     bx
rint6:  mov     ax, bx
        pop     bx
        pop     dx
        pop     ds
        RET

rinterr db      0dh,0ah,'Input error ! Try again. ',0dh,0ah,'$'

READINT ENDP

;-------------------------------------------------                    s

WRITEDEC        PROC    FAR
        PUSH    DS
        PUSH    DX
        PUSH    CX
        PUSH    AX

        CMP     DX, 0FFFFH
        JE      WDEC0
        MOV     AH, 09H
        INT     21H
WDEC0:
        PUSH    CS
        POP     DS
        MOV     CX, 0
WDEC1:
        MOV     DL, ' '
        MOV     AH, 2
        INT     21H

        POP     AX
        PUSH    AX
WDEC2:  MOV     DX, 0
        DIV     C10
        INC     CX
        PUSH    DX
        CMP     AX, 0
        JNZ     WDEC2

WDEC3:
        POP     DX
        AND     DX, 0FH
        OR      DX, 30H
        MOV     AH, 2
        INT     21H
        LOOP    WDEC3

        MOV     DL, ' '
        MOV     AH, 2
        INT     21H

        POP     AX
        POP     CX
        POP     DX
        POP     DS
        RET
WRITEDEC        ENDP

;-------------------------------------------------

WRITEINT        PROC    FAR
        push    ds
        push    ax
        push    dx
        push    cx
        push    ax

        cmp     dx,0ffffh
        je      wint0
        mov     ah,09h
        int     21h

wint0:  push    cs
        pop     ds

        mov     dl, ' '
        mov     ah, 2
        int     21h

        pop     ax
        cmp     ax, 0
        jge     wint1
        neg     ax
        push    ax
        mov     dl,'-'
        mov     ah,2
        int     21h
        pop     ax

wint1:  mov     cx, 0        

wint2:  mov     dx,0
        div     c10
        push    dx
        inc     cx
        cmp     ax, 0
        jnz     wint2
                       
wint3:  pop     dx
        and     dx, 0fh
        or      dx, 30h
        mov     ah, 2
        int     21h
        loop    wint3
        mov     dl, ' '
        mov     ah, 2
        int     21h

        pop     cx
        pop     dx
        pop     ax
        pop     ds

        RET
WRITEINT        ENDP

;-------------------------------------------------

WRITEHEX        PROC    FAR
        push    ds
        push    ax
        push    dx
        push    bx
        push    cx
        push    si
        push    ax

        cmp     dx, 0ffffh
        je      whex00
        mov     ah, 09h
        int     21h

whex00: push    cs
        pop     ds
        mov     dl,' '
        mov     ah, 02h
        int     21h

whex0:  pop     si
        mov     cx, 4
        lea     bx, hextab
whex1:  push    cx
        mov     cl,4
        rol     si, cl
        mov     ax,si
        and     ax, 0fh
        xlat
        mov     dl, al
        mov     ah, 2
        int     21h
        pop     cx
        loop    whex1
        mov     dl, 'H'
        mov     ah, 2
        int     21h
        mov     dl, ' '
        mov     ah,2
        int     21h
        
        pop     si
        pop     cx
        pop     bx
        pop     dx
        pop     ax
        pop     ds
        RET
WRITEHEX        ENDP

;-------------------------------------------------

;CRLF    DB      0DH,0AH,'$'

RDECMSS DB      0DH,0AH,'Input Decimal Number(0~9):$'

;-------------------------------------------------

CODE1   ENDS

;-------------------------------------------------

        END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -