首页
社区
课程
招聘
[旧帖] [求助]debug 加载程序出错! 求教!!! 0.00雪花
发表于: 2012-6-1 23:30 1427

[旧帖] [求助]debug 加载程序出错! 求教!!! 0.00雪花

2012-6-1 23:30
1427
我照着王爽书上写了个 0号中断的处理程序,编译构建都没问题,也可运行,可是用debug 加载时出错:
File not found

请高手指教,这是什么原因?

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 1
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
居然没人回答...   我在CMD中直接运行该程序却能运行,只是没有出现预想的显示结果(显示出错提示)!!!下面是我的源码:
assume cs:code

code segment
        start:mov ax,cs
              mov ds,ax
              mov si,offset do0                                        ;设置 ds:si 指向(被安装程序)源地址
             
              mov ax,0000h
              mov es,ax
              mov di,200h                                        ;设置 es:di 指向(被安装程序)目的地址
             
              mov cx,offset do0end - offset do0                        ;获取被安装程序长度(字节数)
              cld                                                ; movsb 设置循环递增(传送方向)
              rep movsb                                                ;循环传送
              ;do0 安装程序
                                                                     
              mov ax,0                                               
              mov es,ax
              mov word ptr es:[0*4],200h                        ;设置0号中断向量中的IP
              mov word ptr es:[0*4+2],0                                ;设置0号中断向量中的CS
              ;设置中断向量表
             
              mov ax,1000h
              mov bl,1
              div bl
             
              mov ax,4c00h
              int 21h
              ;程序退出
             
              ;0号中断处理程序内容
             
          do0:jmp short do0start                                ;跳到处理程序 “代码段”
              db 'divide error!'                                ;处理程序的 “数据段”
             
     do0start:mov ax,cs
              mov ds,ax
              mov si,202h                                        ;设置 ds:si 指向字符串
              
              mov ax,0b800h
              mov es,ax
              mov di,12*160+36*2                                ;设置 es:di 指向显存空间的中间位置,有关这个地址的问题我压根不懂(以上地址是书上的,网上的内容也是这样的)
              
              mov cx,13
            s:mov al,[si]
              mov es:[di],al                                        ;内存不能到内存,所以借助寄存器
              inc si
              add di,2                                                ;为什么加2?
              loop s
              
              mov ax,4c00h
              int 21h                                                ;处理程序直接回到DOS 不返回中断产生时的程序
              ;中断处理程序全部内容
              
       do0end:nop                                                ;这一步不仅为空操作,实际上也没有执行(不管是安装程序,还是中断处理程序)
                       
code ends
end start                            
             

不知道是不是显示出错信息那里有问题(已注释),还是其他问题
2012-6-2 10:52
0
雪    币: 1
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我用的是 XP 的系统,我发现在DOS中显示内容的地址应该跟系统有关系...
2012-6-2 11:01
0
雪    币: 1
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
assume cs:code

code segment
        main:mov ax,0b800h
             mov es,ax
             mov byte ptr es:[12*160+40*2],'!'
             int 0
code ends
end main             

为什么这么简单的程序都不能显示“! ” 和 “divide overflw”呢?求高手指教
2012-6-2 11:19
0
游客
登录 | 注册 方可回帖
返回
//