老师 发表于 2014-10-28 20:01:37

对15.4节程序的修改版

首先说下为什么要修改这个程序,我用的是WIN7用书本上直接往显存里写数据的方法不能再屏幕上输出热河东西,但是呢,用BIOS的10号中断就可使,所以该了一下这个程序。
代码是这样的(P280)
ASSUME cs:Code,ds:Data

Data SEGMENT
   DW 0,0
Data ENDS

Code SEGMENT
Start:
      mov ax,Data
                mov ds,ax
                mov ax,0H
                mov es,ax

                push es:
                pop ds:
                push es:
                pop ds:

                cli
                mov WORD PTR es:,OFFSET Int9h
                mov WORD PTR es:,cs
                sti

                mov ah,2
                mov bh,0
                mov dh,12
                mov dl,40
                int 10H

                mov ah,9
                mov bh,0
                mov bl,2
                mov al,'A'

        S:int 10H
          inc al
          call Sleep
                cmp al,'Z'
                jna S

                push ds:
                pop es:
                push ds:
                pop es:

                mov ax,4c00H
                int 21H

Sleep:
      push ax
                push dx

                mov ax,0
                mov dx,0ffffH
        S1: sub ax,1
                sbb dx,0
                cmp ax,0
                jne S1
                cmp dx,0
                jne S1

                pop dx
                pop ax
                ret

Int9h:
                push ax
                push cx

                in al,60H
                pushf
                pushf
                pop cx
                and ch,11111100B
                push cx
                popf
                call DWORD PTR ds:

                cmp al,1
                jne Int9hret
                inc bl

    Int9hret:
                pop cx
                pop ax
                iret

Code ENDS

END Start

但是这个程序有一点非常奇怪,就是本来要求是在12行40列显示A-Z的,但是呢,程序运行的时候却足足显示了3行的字母,请高手指教这是为什么呢?
页: [1]
查看完整版本: 对15.4节程序的修改版