|
主题 : : 实验16的CALL问题 [已解决] |
回复[ 26次 ]
点击[ 1074次 ] | |
荣誉值:0
信誉值:4
注册日期:2008-10-16 23:41 |
本人已写完实验16的代码,如下:
DATAS SEGMENT
buff1 db "my teacher is ytt!"
buff2 db "I am a student!" ;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
db 128 dup (0) ;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
mov ax,stacks
mov ss,ax
mov sp,128
push cs
pop ds
MOV AX,0
MOV es,AX
mov si,offset int7c
mov di,200h
mov cx,offset int7cend-offset int7c
cld
rep movsb
cli
mov word ptr es:[7cH*4],200h
mov word ptr es:[7cH*4+2],0h
sti
mov bx,datas
mov ds,bx
mov bx,0b800H
mov es,bx
mov si,offset buff1
mov di,0
mov cx,12H
s1: mov bx,[si]
mov es:[di],bx
mov es:[di+1],70h
add di,2
add si,1
loop s1
mov si,offset buff2
mov di,160
mov cx,0FH
s2: mov bx,[si]
mov es:[di],bx
mov es:[di+1],70h
add di,2
add si,1
loop s2
call time
mov ah,1
mov al,2
int 7cH
call time
;此处输入代码段代码
MOV AH,4CH
INT 21H
time:push cx
push bx
mov cx,3000H
nottime:mov bx,3000H
nottime1: dec bx
jnz nottime1
loop nottime
pop bx
pop cx
ret
int7c:jmp short set
table:dw sub1,sub2,sub3,sub4
set:push bx
cmp ah,3
ja sret
mov bl,ah
mov bh,0
add bx,bx
call word ptr table[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
int7cend:nop
CODES ENDS
END START
四个子程序没有什么问题,我试过单独CALL SUB1,CALL SUB2,CALL SUB3,CALL SUB4都没什么问题。
安装INT 7CH中断程序也没什么问题。经过调试,发现到call word ptr table[bx]这一步就出问题,不能正确地定位子程序的入口。各位高手看下,哪里错了?谢谢 | | |