wen_hu 发表于 2011-5-28 13:12:36

实验12 编写0号中断处理的处理 的疑问

本帖最后由 loop 于 2011-5-31 12:13 编辑

assume cs:code

code segment

           start:
                mov ax,cs
                mov ds,ax
                mov si,offset do


                mov ax,0
                mov es,ax
                mov di,0200h
                mov cx,offset doend- offset do
                cld
                rep movsb
               
                mov ax,0
                mov es,ax
                mov word ptr es:,200h
                mov word ptr es:,0
               

               
                mov ax,4c00h
                int 21h

do:               
                jmp short dostart
                db "welcome to fishc.com!"
    dostart:
                mov ax,cs;                   不知道此处的cs指向的是哪个cs,是中断处理程序的cs,还是进行除法运算的cs呢
                mov ds,ax
                mov si,202h

                mov ax,0b800h
                mov es,ax
                mov di,12*160+60

                mov cx,21
        s:      mov al,
                mov es:,al
                inc si
                add di,2
                loop s
                mov ax,4c00h
                int 21h
    doend:      nop

code ends
end start

不知道 dostart:处的cs指向的是哪个cs,是中断处理程序的cs,还是进行除法运算的cs呢


而且在13章中编写中断07ch处进行大小写转换程序
capital:
        push cx;此处的cx,si指的是什么里面的cx,si,是调用7ch的程序,还是7ch处中断程序自身的cx,si
        push si

change:mov cl,
        mov ch,0
        jcxz,ok
        and byte ptr ,11011111b
        inc si
        jmp short change
    ok: pop si
        pop cx
        iret       

tawtg 发表于 2011-5-28 17:08:21

这里的CS指向的是你中断程序里面的CS,因为你进入中断程序后,CS和IP均会被中断向量表改变。而你程序里面的CS和IP都被保存在堆栈里面了。

wen_hu 发表于 2011-5-28 20:20:55

capital:
      push cx;此处的cx,si指的是什么里面的cx,si,是调用7ch的程序,还是7ch处中断程序自身的cx,si
      push si

那这个里面的si又是多少呢?

tawtg 发表于 2011-5-28 20:34:28

这里的cx和si当然是程序本身的,因为你即便调用了中断程序,但是这两个地方并没有被改变,而你看到的push和pop的配对使用,只是为了进入中断程序后,不因为中断程序中对cx和si的改变而影响进入中断程序前cx,si的值。

wen_hu 发表于 2011-5-28 21:20:15

:D有点懂了,多谢多谢!
页: [1]
查看完整版本: 实验12 编写0号中断处理的处理 的疑问