首页
社区
课程
招聘
[求助]汇编程序 调用中断程序有点问题
发表于: 2008-7-3 14:42 5220

[求助]汇编程序 调用中断程序有点问题

2008-7-3 14:42
5220
cw8253        equ 43h   ;8253控制字端口
t08253        equ 40h                ;8253定时器0端口
num                 equ 2e9ch        ;11932=n=10ms*1.1932Mhz=10*1193.2
ou8259        equ 20h   ;8259A偶地址
ji8259        equ 21h                ;8259A奇地址

data        segment
second db ?
minute db ?
hour   db ?
countsec db 00h
SPACES DB "   ","$"
data        ends

code         segment
        assume cs:code,ds:data
       
start:  
                                mov ax,data
                                mov ds,ax
                               
                                cli                                                        
                                call init8253            ;初始化8253
                                                                 
                                push ds                  ;改中断服务程序地址
                                mov ax,seg interupt
                                mov ds,ax
                                lea dx,interupt
                                mov ah,25h
                                mov al,08h
;                          mov ax,2508h
                          int 21h
                          nop
                          nop        
                          pop ds  

        mov ah,02h
                                mov dl,'2'
                                int 21h
                                                               
;                                call init8259  ;初始化8259
                                sti

        mov ah,02h
                                mov dl,'2'
                                int 21h

l2:                        mov ah,06h                    ;直接控制台读写
                          mov dl,0ffh                   ;输入
                          int 21h
                          cmp al,' '                               
                                jnz l2             ;anykey to quit loop
                                                                                               
                                mov ah,4ch
                                int 21h
                               
init8253 proc             ;///////initialize8253
                                mov bx,num                       
                                mov        al,36h         ;00110110 选择计数器0;先读低8位,后读高8位;方式3;二进制输入
                                out cw8253,al                                                ;将控制字36h输入控制字寄存器
                                mov        al,bl                                        ;计数值低字节9c
                                                                     ;计数器0端口
                                out t08253,al                        ;写入低字节
                                mov        al,bh                                        ;写高字节
                                out t08253,al                        ;///////
                                ret
init8253 endp

init8259 proc                                                  ;initialize8259A
                                mov al,00010011b        ;上升沿触发;不使用ICW3;使用ICW4
                                out ou8259,al                                        ;写入ICW1               
                                mov al,00001000b  ;IRQ0向量号 08h
                                out ji8259,al       ;写入ICW2
                                mov al,00000001b  ;普通全嵌套;非缓冲;正常结束;8086
                                out ji8259,al                                ;写入ICW4
                                mov al,11111110b  ;只开放IRQ0
                                out ji8259,al                                ;写入OCW1
                                ret
init8259 endp

interupt proc                                                               
                                mov ah,02h        ;输出1 调试。。
                                mov dl,'1'
                                int 21h  
                                 
              mov al,20h     ;发eoi
                                out 20h,al   
                                                                                                  
                    iret               
interupt endp
                                                                                   
code        ends
end start

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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
自己先顶下:
程序编译每问题,运行的时候,有时候能输出 1,有时候就不能,然后直接退出;要不就弹出窗口说错误指令。。。
程序初始化部分应该没问题。
有高人能帮忙调试下,告诉我这种程序该怎么写么。。。

还有,系统的向量表我改完,还用不用恢复啊?应该不用吧。。。
2008-7-3 14:44
0
雪    币: 234
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你是用什么系统执行的?
如果是dos执行之后出错的话很大可能就是程序问题
如果是winNT系统执行出错也是正常的。NT不允许直接操作硬件。
如果想了解,建议重点看看保护模式汇编(不是win32asm)就能明白。其次就是操作系统理论。
2008-7-3 22:19
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
好专业,...谢谢
我是在windows xp 上编译的,..问题还没解决....还得忙着考试.....所以才上来求助..
2008-7-3 22:52
0
游客
登录 | 注册 方可回帖
返回
//