当前位置: 代码迷 >> 汇编语言 >> 栈异常求解
  详细解决方案

栈异常求解

热度:213   发布时间:2016-05-02 04:38:14.0
栈错误求解
我安装9号中断的程序,在调试的时报报出以下的错误:

程序代码如下:

assume cs:code
stack segment
db 128 dup (0)
stack ends
data segment
    c1 db '1) reset pc','$'
    c2 db '2) start system','$'
    c3 db '3) clock','$'
    c4 db '4) set clock','$'
    dc db 1500 dup (' '), '$'
    in9 dw 0,0
data ends
code segment
table dw offset clear, offset caidan
tablecaidan dw offset c1,offset c2,offset c3,offset c4
start:
mov ax,stack
mov ss,ax
mov sp,128


mov ax,0
mov es,ax
push es:[9*4]
pop es:[200h]
push es:[9*4+2]
pop es:[202h]

mov si,offset int9
mov di,204h
mov cx,offset int9end - offset int9
cld
rep movsb

cli
mov word ptr es:[9*4], 204h
mov word ptr es:[9*4+2],0
sti

; call word ptr table[0]
; call word ptr table[2]

mov ax,4c00h
int 21h
int9:
push ax
push bx
push es
in al,60h
pushf
call dword ptr cs:[200h]
int9ret:pop es
pop bx
pop ax
iret 
int9end:nop

;cmp al,1
;jb int9ret
;cmp al,4
;ja int9ret
;mov ah,0
;add ax,ax
;mov bx,ax
;call word ptr table[bx]
caidan:
push ax
push dx
push cx
push ds
push si
mov si,0
mov dh,5
mov cx,4
  cais: push dx
  ;locate
        mov ah,2
mov bh,0
mov dl,0
int 10h
;set menu
mov ax,data
mov ds,ax
mov dx,tablecaidan[si]
mov ah,9
int 21h
add si,2
pop dx
add dh,1
loop cais
caidanend:
pop si
pop ds
pop cx
pop dx
pop ax
ret
clear:
push ax
push dx
push ds
mov ah,2
mov bh,0
mov dh,0
mov dl,0
int 10h

mov ax,data
mov ds,ax
mov dx,offset dc
mov ah,9
int 21h

clearend:
pop ds
pop dx
pop ax
ret
code ends
end start


------解决方案--------------------
给 int9 设置中断向量到自己的代码,最起码两个 mov 指令要一齐运行吧,中间不能断的,否则不就指向了错误的地方而这时你还要再输入 debug 的指令?
------解决方案--------------------
楼主最好使用标准方法,INT 21h ah=35h获取中断向量,ah=25h设置中断向量,不要自己修改中断向量表。
  相关解决方案