|
主题 : : 15.1(2)疑惑 [已解决] |
回复[ 3次 ]
点击[ 467次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-08-21 15:28 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:0
注册日期:2010-07-09 09:48 |
;p280 10.8.21
;在屏幕中间一次显示a~z,并可以让人看清。在显示的过程中,按下Esc键后,改变显示的颜色。
assume cs:code
stack segment
db 128 dup(0)
stack ends
data segment
dw 0,0
data ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,128
mov ax,data
mov ds,ax
mov ax,0
mov es,ax
push es:[9*4]
pop ds:[0]
push es:[9*4+2]
pop ds:[2]
cli
mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs
sti
mov ax,0b800h
mov es,ax
mov ah,'a'
s:
mov es:[160*12+40*2],ah
call delay
inc ah
cmp ah,'z'
jna s
mov ax,0
mov es,ax
push ds:[0]
pop es:[9*4]
push ds:[2]
pop es:[9*4+2]
mov ax,4c00h
int 21h
delay:
push ax
push dx
mov dx,2000h
mov ax,0
s1:
sub ax,1
sbb dx,0
cmp ax,0
jne s1
cmp dx,0
jne s1
pop dx
pop ax
ret
;------------new int9----
int9:
push ax
push bx
push es
in al,60h
pushf
pushf
pop bx
and bh,11111100b
push bx
popf
call dword ptr ds:[0]
cmp al,1
jne int9ret
mov ax,0b800h
mov es,ax
inc byte ptr es:[160*12+40*2+1]
int9ret:
pop es
pop bx
pop ax
iret
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-08-21 15:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:0
注册日期:2010-07-09 09:48 |
cli
mov word ptr es:[9*4],offset int9
mov es:[9*4+2],cs
sti
运行到这里就出错了。cli即if=0,不允许执行可屏蔽中断。不管我用t,还是用g都调试不了,不知问题出在那里,另外,我是在xp模式下调试的。代码如下:
-t
AX=0000 BX=0000 CX=0132 DX=0000 SP=0080 BP=0000 SI=0000
DS=0B70 ES=0000 SS=0B68 CS=0B71 IP=0025 NV UP DI PL NZ
0B71:0025 26 ES:
0B71:0026 C70624007F00 MOV WORD PTR [0024],007F
-u b71:25
0B71:0025 26 ES:
0B71:0026 C70624007F00 MOV WORD PTR [0024],007F
0B71:002C 26 ES:
0B71:002D 8C0E2600 MOV [0026],CS
0B71:0031 FB STI
0B71:0032 B800B8 MOV AX,B800
0B71:0035 8EC0 MOV ES,AX
0B71:0037 B461 MOV AH,61
0B71:0039 26 ES:
0B71:003A 8826D007 MOV [07D0],AH
0B71:003E E82300 CALL 0064
0B71:0041 FEC4 INC AH
0B71:0043 80FC7A CMP AH,7A
-g31
C:\>
我想跳过这几句指令,用g31指令,结果也是一样的,直接返回到command窗口了,纳闷中。
按道理来说,t指令是单步中断指令,调用的是int 1号中断才对啊,怎么也直接返回了。是否int 1也间接调用了int 9中断,那么,才会出现上面的情况。求高手解答。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-08-21 19:22 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:6
注册日期:2010-07-13 10:33 |
你在debug输入的时候就触发debug中断
你修改的中断向量表是作用在整个Command里面的~Debug也不例外
你输入t的时候就触发9中断 | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-09-01 10:05 ]
[引用]
[回复]
[ top ] | |
荣誉值:16
信誉值:0
注册日期:2010-07-09 09:48 |
此贴由 贴主 于 [ 2010-09-01 10:05 ] 结贴。 结贴原因:问题已解决 | | |
|