关于安装int9的一个问题,高手帮小弟看看,谢谢!

malpower 2009-01-11 09:45:20
我在安装int9中断的时候遇到的问题,大概是这样的
中断服务程序安装后可以执行,但是执行完了以后就死机了,大概是跳到了一个无效地址.
代码是这样的,

org 0x100
jmp start
pro:
push ax ; 保护现场
push bx
push cx
push dx
sti ;开中断
mov ah,3 ;中断服务,在屏幕上打印一个A
mov bh,0
int 0x10
mov ah,0x09
mov al,'A'
mov bh,0
int 0x10
inc dl
mov bh,0
int 0x10
cli ;关中断
pop dx ;还原现场
pop cx
pop bx
pop ax
iret ;中断返回
start:
mov ax,0
mov ds,ax
mov ax,cs
cli
mov [0x0026],ax ;修改中断向量表
mov ax,[pro]
mov [0x0024],ax
sti
mov ax,cs
mov ds,ax
mov ah,4c ;返回DOS
int 0x21



以上代码是用NASM编译后在MS-DOS下运行的,是直接考到软盘上在虚拟机上运行,然后又重新启动计算机在真机环境下一试过,一样,都会死机(虚拟机就不工作了).
...全文
119 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
invaliddescriptor 2009-01-17
  • 打赏
  • 举报
回复
帮顶
malpower 2009-01-17
  • 打赏
  • 举报
回复
好的,那我试试
malpower 2009-01-17
  • 打赏
  • 举报
回复
xtdumpling 大哥,按照您指点的方法进行编码,和最开初使用的代码效果一样,都返回到了一个无效地址.
是不是和我的计算机有关呢?
xtdumpling 2009-01-17
  • 打赏
  • 举报
回复
回9L:
我在Windows 2000和XP的命令行里面试验是可以的.
wtaming 2009-01-15
  • 打赏
  • 举报
回复
高手啊
malpower 2009-01-14
  • 打赏
  • 举报
回复
继续自己顶!!!!!!!!!
xtdumpling 2009-01-14
  • 打赏
  • 举报
回复
只用保留中断程序
;title nasm replace int 9
org 0x100
jmp start
pro:
push ax ; 保护现场
push bx
push cx
push dx
; sti ;开中断
cli;;;关中断

mov ah,0eh
mov al,'A'
mov bl,07h
int 0x10;;;显示'A',光标前移

mov al,0x20;发送EOI, end of interrupt
out 0x20,al

; cli ;关中断
sti;;;开中断
pop dx ;还原现场
pop cx
pop bx
pop ax
iret ;中断返回
start:
mov ax,0
mov ds,ax
mov ax,cs
cli
mov [0x0026],ax ;修改中断向量表
; mov ax,[pro]
mov ax,pro;;; pro的地址
mov [0x0024],ax
sti

; mov ax,cs
; mov ds,ax
; mov ah,0x4c ;返回DOS
; int 0x21
mov ah,0x31
mov dx,start-pro;;中断程序驻留,退出
int 0x21
xtdumpling 2009-01-14
  • 打赏
  • 举报
回复
org 0x100 
jmp start
pro:
push ax ; 保护现场
push bx
push cx
push dx
; sti ;开中断
cli;;;

mov ah,0eh
mov al,'A'
mov bl,07h
int 0x10

mov al,0x20
out 0x20,al

; cli ;关中断
sti
pop dx ;还原现场
pop cx
pop bx
pop ax
iret ;中断返回
start:
mov ax,0
mov ds,ax
mov ax,cs
cli
mov [0x0026],ax ;修改中断向量表
; mov ax,[pro]
mov ax,pro;;;
mov [0x0024],ax
sti

; mov ax,cs
; mov ds,ax
; mov ah,0x4c ;返回DOS
; int 0x21
mov ah,0x31
mov dx,$-pro
int 0x21
cnzdgs 2009-01-13
  • 打赏
  • 举报
回复
这里不该加cs,搞错了。对NASM不太熟,应该是lea ax,[pro],可能你现在的写法也是对的。
malpower 2009-01-12
  • 打赏
  • 举报
回复
mov ax,cs:[pro]

nasm 说是错误的
cnzdgs 2009-01-11
  • 打赏
  • 举报
回复
还有,int9程序中,如果你不打算自己处理键盘输入,应该调用原int9程序来处理,不能直接返回。
cnzdgs 2009-01-11
  • 打赏
  • 举报
回复
mov ax,cs:[pro]
另外最后不要用4c功能退出,要用31功能退出并驻留。

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧