实验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 这里的CS指向的是你中断程序里面的CS,因为你进入中断程序后,CS和IP均会被中断向量表改变。而你程序里面的CS和IP都被保存在堆栈里面了。 capital:
push cx;此处的cx,si指的是什么里面的cx,si,是调用7ch的程序,还是7ch处中断程序自身的cx,si
push si
那这个里面的si又是多少呢? 这里的cx和si当然是程序本身的,因为你即便调用了中断程序,但是这两个地方并没有被改变,而你看到的push和pop的配对使用,只是为了进入中断程序后,不因为中断程序中对cx和si的改变而影响进入中断程序前cx,si的值。 :D有点懂了,多谢多谢!
页:
[1]