天天看点

【汇编】时钟中断的调变速(.asm源码)

项目环境

  • 编译环境:搭建一个nasm2.8的编译环境。
  • 镜像文件:采用winhex_18.2刷入编码。
  • 虚拟机:采用Bochs-2.4.5。

项目软件

  • 傻瓜式环境配置。
  • 解压文件到D盘能直接使用。
  • 运行结果

调速模块

;out  0x43,0x34
  ;out  0x40,low8
  ;out  0x40,high8

  mov dx,0x40
  mov al,0x10            ;高八位,稍微修改一点就能改变速度
  out dx,al      

程序源码(.asm)

org 0x8400
start:    
    sti

    mov ax,0xb800                 ;指向文本模式的显示缓冲区
    mov es,ax

    mov ax,0
    mov ds,ax
    
    mov word [ds:0x20],int_time0
    mov word [ds:0x22],0

    ;变速
    mov dx,0x43
    mov al,0x34
    out dx,al                      ;ffff

    mov dx,0x40
    mov al,0x00                        ;
    out dx,al

    mov dx,0x40
    mov al,0x10                        ;高八位,稍微修改一点就能改变速度
    out dx,al

    ;out  0x43,0x34
    ;out  0x40,low8
    ;out  0x40,high8
    
    mov si,1600
    mov bx,0
    push bx
x0:    
    pop bx
x:    
    call delay
    mov byte [es:bx],'Z'
    mov byte [es:bx+1],0x0c
    inc bx
    inc bx

    cmp bx,1600
    jnz x

    jmp x0


int_time0:
x2:    
    mov byte [es:si],'L'
    mov byte [es:si+1],0x0a
    inc si
    inc si
x3:    
    mov al,0x20
    mov dx,0x20 
    out dx,al           ;EOI=1,中断结束
    
    iret
delay:  
    mov cx,60000
x4:      

继续阅读