|
主题 : : 让我晕乎了一天的实验16,哎。。 [待解决] |
回复[ 5次 ]
点击[ 584次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-03-12 12:22 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:0
注册日期:2009-12-18 19:53 |
看了半天别人的帖子的,才发现其实不复杂,
assume cs:code
stack segment
db 128 dup (0)
stack ends
code segment
setscreen:
jmp short set
table dw sub1+200h, sub2+200h, sub3+200h, sub4+200h 这里
set:
push bx
cmp ah, 3
ja sret
mov bl, ah
mov bh, 0
add bx, bx
call word ptr table[bx+200h] 这里
sret:
pop bx
iret
sub1:
push bx
push cx
push es
mov bx, 0b800h
mov es, bx
mov bx, 0
mov cx, 2000
s1:
mov byte ptr es:[bx], ' '
add bx, 2
loop s1
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
s2:
and byte ptr es:[bx], 11111000b
or es:[bx], al
add bx, 2
loop s2
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
s3:
and byte ptr es:[bx], 10001111b
or es:[bx], al
add bx, 2
loop s3
pop es
pop cx
pop bx
ret
sub4:
push cx
push di
push si
push ds
push es
mov si, 0b800h
mov ds, si
mov es, si
mov si, 160
mov di, 0
cld
s4:
push cx
mov cl, 160
rep movsb
pop cx
loop s4
mov cx, 80
mov si, 0
s42:
mov byte ptr es:[160*24+si], ' '
add si, 2
loop s42
pop es
pop ds
pop si
pop di
pop cx
ret
setscreenend:
nop
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], 200h
mov word ptr es:[7ch*4+2], 0h
mov ax, 4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-03-23 17:13 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-03-05 21:32 |
怎么运行了什么都没有啊,不用从键盘上输1,2,3,4,吗?还是这个程序什么都不显示啊, | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-03-24 15:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-03-05 21:32 |
回复:[贴 主]
------------------
assume cs:code
stack segment
db 128 dup (0)
stack ends
code segment
setscreen:
jmp short set
table dw sub1+200h, sub2+200h, sub3+200h, sub4+200h 这里
set:
push bx
cmp ah, 3
ja sret
mov bl, ah
mov bh, 0
add bx, bx
call word ptr table[bx+200h] 这里
sret:
pop bx
iret
sub1:
push bx
push cx
push es
mov bx, 0b800h
mov es, bx
mov bx, 0
mov cx, 2000
s1:
mov byte ptr es:[bx], ' '
add bx, 2
loop s1
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
s2:
and byte ptr es:[bx], 11111000b
or es:[bx], al
add bx, 2
loop s2
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
s3:
and byte ptr es:[bx], 10001111b
or es:[bx], al
add bx, 2
loop s3
pop es
pop cx
pop bx
ret
sub4:
push cx
push di
push si
push ds
push es
mov si, 0b800h
mov ds, si
mov es, si
mov si, 160
mov di, 0
cld
s4:
push cx
mov cl, 160
rep movsb
pop cx
loop s4
mov cx, 80
mov si, 0
s42:
mov byte ptr es:[160*24+si], ' '
add si, 2
loop s42
pop es
pop ds
pop si
pop di
pop cx
ret
setscreenend:
nop
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], 200h
mov word ptr es:[7ch*4+2], 0h
int 7ch
mov ax, 4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-03-24 15:17 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2010-03-05 21:32 |
回复:[贴 主]
------------------
assume cs:code
stack segment
db 128 dup (0)
stack ends
code segment
setscreen:
jmp short set
table dw sub1+200h, sub2+200h, sub3+200h, sub4+200h 这里
set:
push bx
cmp ah, 3
ja sret
mov bl, ah
mov bh, 0
add bx, bx
call word ptr table[bx+200h] 这里
sret:
pop bx
iret
sub1:
push bx
push cx
push es
mov bx, 0b800h
mov es, bx
mov bx, 0
mov cx, 2000
s1:
mov byte ptr es:[bx], ' '
add bx, 2
loop s1
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
s2:
and byte ptr es:[bx], 11111000b
or es:[bx], al
add bx, 2
loop s2
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
s3:
and byte ptr es:[bx], 10001111b
or es:[bx], al
add bx, 2
loop s3
pop es
pop cx
pop bx
ret
sub4:
push cx
push di
push si
push ds
push es
mov si, 0b800h
mov ds, si
mov es, si
mov si, 160
mov di, 0
cld
s4:
push cx
mov cl, 160
rep movsb
pop cx
loop s4
mov cx, 80
mov si, 0
s42:
mov byte ptr es:[160*24+si], ' '
add si, 2
loop s42
pop es
pop ds
pop si
pop di
pop cx
ret
setscreenend:
nop
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], 200h
mov word ptr es:[7ch*4+2], 0h
int 7ch
mov ax, 4c00h
int 21h
code ends
end start | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-03-27 11:38 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:0
注册日期:2009-12-18 19:53 |
这只是一个int7ch中断安装程序而己,哎。。楼上的兄弟还得好好看看书。
安装好了之后,你可以调用int 7ch完成里面的功能
随便写一个简单程序来测试这个int7ch是否能正常运行,完成里面的功能 | | |
|
|
|
|
[第5楼]
[ 回复时间:2010-03-27 11:39 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:0
注册日期:2009-12-18 19:53 |
其实就是和书上的程序一样,就是我写了‘这里“的地方有一点不同。。 | | |
|