|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
首先说下为什么要修改这个程序,我用的是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:[9*4]
pop ds:[0H]
push es:[9*4+2]
pop ds:[2H]
cli
mov WORD PTR es:[9*4],OFFSET Int9h
mov WORD PTR es:[9*4+2],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:[0H]
pop es:[9*4]
push ds:[9*4+2]
pop es:[2H]
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:[0]
cmp al,1
jne Int9hret
inc bl
Int9hret:
pop cx
pop ax
iret
Code ENDS
END Start
但是这个程序有一点非常奇怪,就是本来要求是在12行40列显示A-Z的,但是呢,程序运行的时候却足足显示了3行的字母,请高手指教这是为什么呢?
|
|