. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->外中断
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  15.5节 的一个问题  [待解决] 回复[ 4次 ]   点击[ 321次 ]  
704274243
[帖 主]   [ 发表时间:2009-09-21 20:39 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-09-19 16:10
assume cs:code 
stack segment 
   db 128 dup(0) 
stack ends 

code segment 
                start:          mov ax,stack 
                                mov ss,ax 
                                mov sp,128 

                                push cs 
                                pop ds 

                                mov ax,0 
                                mov es,ax 

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

                                push es:[9*4] 
                                pop es:[200h] 
                                push es:[9*4+2] 
                                pop es:[202h] 

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

                                mov ax,4c00h 
                                int 21h 

                  int9:         push ax 
                                push bx 
                                push cx 
                                push es 

                                in al,60h 

                                pushf 
                                call dword ptr cs:[200h]   这里cs为什么是0????

                                cmp al,1 
                                jne int9ret 

                                mov ax,0b800h 
                                mov es,ax 
                                mov bx,1 
                                mov cx,2000 
                       s:       inc byte ptr es:[bx] 
                                add bx,2 
                                loop s 

                   int9ret:     pop es 
                                pop cx 
                                pop bx 
                                pop ax 
                                iret 

                     int9end:   nop 

code ends 
end start


 call dword ptr cs:[200h]   这里cs为什么是0????
tinyparticle
[第1楼]   [ 回复时间:2009-09-21 20:56 ]   [引用]   [回复]   [ top ] 
荣誉值:188
信誉值:4
注册日期:2009-07-05 19:26
cli  
mov word ptr es:[9*4],204h  
mov word ptr es:[9*4+2],0  
sti 
请参阅书P280页内容,理解以上指令的含义
704274243
[第2楼]   [ 回复时间:2009-09-22 18:49 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-09-19 16:10
那个我倒是理解,但是这边cs=0,我就搞不懂底层是如何操作的了
704274243
[第3楼]   [ 回复时间:2009-09-22 18:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-09-19 16:10
也许在编译的时候,当程序执行到哪里时,cs已经是0?
wangjin880
[第4楼]   [ 回复时间:2009-11-27 15:14 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2009-11-12 15:50
因为 我们把自己写的int9号中断例程存放在0:204h处,我们又用0:204h这个中断向量修改原来的int9号中断例程的中断向量表,当CPU调用int9号中断例程时,用中断类型码乘以4 所找到的中断向量实际上是我们刚才修改的地址,我们刚才把地址修改为0:204 ,CPU就会用这个地址去设置CS和IP的值,所以CS=0
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved