|
主题 : : 完成试验16啦,测试通过 [待解决] |
回复[ 15次 ]
点击[ 1466次 ] | |
|
|
|
|
[帖 主] [ 发表时间:2008-09-16 09:00 ] | |
荣誉值:18
信誉值:0
注册日期:2008-08-31 11:07 |
assume cs:code
stack segment
db 128 dup(0)
stack ends
code segment
start: mov ax, stack
mov ss, ax
mov sp, 128
mov ax, cs
mov ds, ax
mov si, offset setscreen
mov ax, 0
mov es, ax
mov di, 200h
mov cx, offset setscreenend - offset setscreen
cld
rep movsb
mov ax, 0
mov es, ax
mov word ptr es:[7ch*4], 0h
mov word ptr es:[7ch*4+2], 20h
mov ax, 4c00h
int 21h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;屏幕设置
setscreen: jmp short set ;安装后这条语句地址是0020:0000,下一条0020:0002
table: dw offset sub1 - offset setscreen, offset sub2 - offset setscreen, offset sub3 - offset setscreen, offset sub4 - offset setscreen
set: push bx
cmp ah, 3
ja sret
mov bl, ah
mov bh, 0
add bx, bx ;bx是偏移地址
call word ptr cs:2h[bx] ;即0020:(0002+bx)
sret: pop bx
iret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;清屏
sub1: push bx
push cx
push es
mov bx, 0b800h
mov es, bx
mov bx, 0
mov cx, 2000
sub1s: mov byte ptr es:[bx], ' '
add bx, 2
loop sub1s
pop es
pop cx
pop bx
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;设置前景色
sub2: push bx
push cx
push es
mov bx, 0b800h
mov es, bx
mov bx, 1
mov cx, 2000
sub2s: and byte ptr es:[bx], 11111000b
or es:[bx], al
add bx, 2
loop sub2s
pop es
pop cx
pop bx
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;设置背景色
sub3: push bx
push cx
push es
mov cl, 4
shl al, cl
mov bx, 0b800h
mov es, bx
mov bx, 1
mov cx, 2000
sub3s: and byte ptr es:[bx], 10001111b
or es:[bx], al
add bx, 2
loop sub3s
pop es
pop cx
pop bx
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;向上滚动一行
sub4: push cx
push si
push di
push es
push ds
mov si, 0b800h
mov es, si
mov ds, si
mov si, 160
mov di, 0
cld
mov cx, 24
sub4s: push cx
mov cx, 160
rep movsb
pop cx
loop sub4s
mov cx, 80
mov si, 0
sub4s1: mov byte ptr [160*24+si], ' '
add si, 2
loop sub4s1
pop ds
pop es
pop di
pop si
pop cx
ret
setscreenend: nop
code ends
end start | | |
|
|
|
|
[第3楼] [ 回复时间:2008-10-10 11:35 ] | |
荣誉值:0
信誉值:2
注册日期:2008-09-10 20:50 |
mov word ptr es:[7ch*4], 0h
mov word ptr es:[7ch*4+2], 20h
中断例程入口地址为什么要这样写?
写成 mov word ptr es:[7ch*4], 200h
mov word ptr es:[7ch*4+2], 0h
为什么不行? | | |
|