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

📄 rjexp18.asm

📁 显示屏相关程序实现显示屏点亮控制等功能.
💻 ASM
字号:
CRLF  MACRO
      MOV  AH,02H
      MOV  DL,0DH
      INT  21H
      MOV  AH,02H
      MOV  DL,0AH
      INT  21H
ENDM
DATA  SEGMENT
FNAME DB  'DATA.AAA',0
MESS1 DB  0DH,0AH,'输入段址:$'
MESS2 DB  0DH,0AH,'输入偏移量:$'
EMESS DB  'ERROR $'
ERROR DB  0DH,0AH,'INPUT ERROR!',0DH,0AH,'$'
DATBUF DB 80 DUP(?)
DATA  ENDS
STACK  SEGMENT
STA  DB  50 DUP(?)
TOP  EQU LENGTH STA
STACK ENDS
CODE SEGMENT
     ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START:MOV  AX,DATA
      MOV  DS,AX
      MOV  ES,AX
      MOV  AX,STACK   ;段寄存器和堆栈初始化
      MOV  SS,AX
      MOV  SP,TOP
      MOV  AH,09H
      MOV  DX,OFFSET MESS1
      INT  21H         ;显示提示信息1
      CALL GETNUM
      MOV  BP,DX       ;段址→BP
      MOV  AH,09H
      MOV  DX,OFFSET MESS2      ;显示提示信息2
      INT  21H 
      CALL GETNUM
      MOV  SI,DX          ;偏移量→SI
      MOV  AH,3CH
      MOV  CX,00H        ;建立名为DATA.AAA的文件,文件属性为可读写
      MOV   DX,OFFSET FNAME
      INT  21H
      MOV  BX,AX
      JC   ERRORPR    ; 建立文件出错转ERRORRRR
      CLD             ; 清方向标志
VVV:  MOV  CX,0080    ;字符缓冲区DATBUF能容纳的最大字符数
      MOV  DS,BP      ;DS指向内存数据区域段
      MOV  DI,OFFSET DATBUF   ;缓冲区首址
UUU:  LODSB           ;从DS:SI取字符送AL
      CMP  AL,1AH     ;若为结束字符`CTRL-Z`则转EEE
      JE   EEE
      STOSB           ;存于缓冲区DATBUF中
      LOOP  UUU
      MOV   AH,40H
      MOV  CX,0080
      PUSH  ES       ;缓冲区DATBUF 中80个字符写入文件DATA.AAA中
      POP   DS
      MOV  DX,OFFSET DATBUF
      INT  21H
      JC   ERRORPR          ;出错转ERRORRR
      JMP  VVV
EEE:  MOV  SI,OFFSET DATBUF
      SUB  DI,SI            ;缓冲区中存入
      JE   EXIT             ;字符数为0,则转EXIT
      MOV  AH,40H
      MOV  CX,DI
      PUSH ES               ;将缓冲区中剩余字符写入文件
      POP  DS
      MOV  DX,OFFSET DATBUF
      INT  21H
      JC   ERRORPR          ;出错转ERRORPR
EXIT: MOV  AH,3EH
      INT  21H              ;关闭文件
      JC   ERRORPR 
      MOV  AX,4C00H
      INT  21H              ;返回DOS
ERRORPR:MOV  BX,AX 
        MOV  AH,09H         ;显示出错信息
        MOV  DX,OFFSET EMESS
        INT  21H 
        CALL BINIHEX        ;显示出错代码
        JMP  EXIT

BINIHEX PROC NEAR
        MOV  CH,04          ;要显示的数据的位数
ROT:    MOV  CL,04
        ROL  BX,CL          ;最高4位移到最低4位
        MOV  AL,BL
        AND  AL,0FH         ;取低4位
        ADD  AL,30H         ;变为ASCII码
        CMP  AL,3AH         ;是否大于9
        JL   PRINT          ;不大于9转PRINT
        ADD  AL,27H         ;是A-F吗?
PRINT:  MOV  DL,AL
        MOV  AH,02          ;显示出错代码
        INT  21H
        DEC  CH             ;显示完4位数字否?
        JNZ  ROT            ;未完则转ROT
        RET                 ;返回
BINIHEX ENDP

GETNUM  PROC  NEAR
        PUSH  CX
        XOR   DX,DX
GGG:    MOV   AH,01H      
        INT   21H
        CMP   AL,0DH
        JZ    PPP
        CMP   AL,20H
        JZ    PPP
        SUB   AL,30H
        JB    KKK
        CMP   AL,0AH
        JB    GETS
        CMP   AL,11H
        JB    KKK
        SUB   AL,07H
        CMP   AL,0FH
        JBE   GETS
        CMP   AL,2AH           ;键盘读入子程序
        JB    KKK
        CMP   AL,2FH
        JA    KKK
        SUB   AL,20H
GETS:   MOV  CL,04
        SHL  DX,CL
        XOR  AH,AH
        ADD  DX,AX
        JMP  GGG
KKK:    MOV  AH,09H
        MOV  DX,OFFSET ERROR
        INT  21H
PPP:    PUSH  DX
        CRLF  
        POP   DX
        POP   CX
        RET
GETNUM  ENDP
CODE    ENDS
END START

⌨️ 快捷键说明

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