汇编语言实例

汇编语言——在屏幕上依次显示’A’~‘Z’,按下ESC键字符改变颜色

// An highlighted block
ASSUME CS:CODE

STACK SEGMENT
     DB 128 DUP(0)
STACK ENDS

DATA SEGMENT
     DW 0,0
DATA ENDS

CODE SEGMENT
START:
     MOV AX,STACK
     MOV SS,AX
     MOV SP,128
     MOV AX,DATA
     MOV DS,AX
     ;改变中断例程入口地址
     MOV AX,0
     MOV ES,AX
     PUSH ES:[9*4]
     POP DS:[0]
     PUSH ES:[9*4+2]
     POP DS:[2]
     MOV WORD PTR ES:[9*4],OFFSET INT9
     MOV ES:[9*4+2],CS
     ;显示a~z
     MOV AX,0B800H
     MOV ES,AX
     MOV AH,'A'
S:
     MOV ES:[160*12+40*2],AH
     CALL DELAY  
     INC AH
     CMP AH,'Z'
     JNA S
     MOV AX,0
     MOV ES,AX
     ;恢复原有地址
     PUSH DS:[0]
     POP ES:[9*4]
     PUSH DS:[2]
     POP ES:[9*4+2]
     
     MOV AH,4CH
     INT 21H
DELAY: 
    ;延时程序
     PUSH AX
     PUSH DX        
     MOV DX,10H
     MOV AX,0
S0:
     ADD AX,1
     SBB DX,0
     CMP AX,0
     JNE S0
     CMP DX,0
     JNE S0
     POP DX
     POP AX
     RET

INT9:
    ;定义中断例程
    PUSH AX
    PUSH BX
    PUSH ES
    IN AL,60H
    PUSHF
    PUSHF
    POP BX
    AND BH,11111100B
    PUSH BX
    POPF
    CALL DWORD PTR DS:[0]
    
    CMP AL,1;ESC
    JNE INT9RET
    MOV AX,0B800H
    MOV ES,AX
    INC BYTE PTR ES:[160*12+40*2+1]
    
INT9RET:
    POP ES
    POP BX
    POP AX
    IRET
    
CODE ENDS
  END START

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值