|
主题 : : 实验12 编写0号中断的处理程序 疑问? [待解决] |
回复[ 5次 ]
点击[ 684次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2007-10-23 21:14 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-10-10 19:41 |
有两个问题不明白,请教:
1、怎么样修改程序才能使“divide error”显示到-t(debug中调试发生0号中断时)下方。
2、do0程序中代码
do0start:mov ax,cs ;cs改为0亦可,为什么不用0?
mov ds,ax
mov si,202h
完整源程序见下
assume cs:code
code segment
start:mov ax,cs
mov ds,ax
mov si,offset do0
mov ax,0
mov es,ax
mov di,200h
mov cx,offset do0end-offset do0
cld
rep movsb
mov ax,0
mov es,ax
mov word ptr es:[0*4],200h
mov word ptr es:[0*4+2],0
mov ax,4c00h
int 21h
do0: jmp short do0start
db "divide error!"
do0start:mov ax,0
mov ds,ax
mov si,202h
mov ax,0b800h
mov es,ax
mov di,12*160+36*2
mov cx,0dh
s:mov al,[si]
mov es:[di],al
inc si
add di,2
loop s
mov ax,4c00h
int 21h
do0end:nop
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2007-10-24 10:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:106
信誉值:0
注册日期:2007-06-26 15:10 |
能把"divide error"显示出来就行了啊,不管什么地方
第二个问题,什么意思,它是在取cs段地址,为什么是0啊 | | |
|
|
|
|
[第2楼]
[ 回复时间:2007-10-24 10:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:106
信誉值:0
注册日期:2007-06-26 15:10 |
do0start:mov ax,cs ;cs改为0亦可,为什么不用0?
?怎么会cs改为0亦可?
它要取当前段的地址,把当前段为传输数据的原地址. | | |
|
|
|
|
[第3楼]
[ 回复时间:2007-10-31 20:52 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-10-22 14:47 |
我写的,可以显示不固定长度字符串
assume cs:code
code segment
start:
mov ax, cs
mov ds, ax
mov si, offset do0
mov ax, 0
mov es, ax
mov di, 200h
mov cx, offset do0end - offset do0
cld
rep movsb
mov ax, 0
mov ds, ax
mov ds:[0], word ptr 200h
mov ds:[2], word ptr 0h
; do0 - do0end 是需要装载的中断处理程序
; 该段程序被复制到0000:0200开始处的空间
do0:jmp short do0start
db 'divide error !!!', 0
do0start:
mov ax, 0
mov ds, ax
mov si, 202h
mov ax, 0B800h
mov es, ax
xor di, di
mov ah, 10001100B
; do0loop 这个循环将中断处理程序开始的以0结束的一段字符串,复制到显存的13行30列的位置
do0loop:
mov al, ds:[si]
cmp al, 0
je next
mov es:[160*12+30*2+di], ax
inc si
add di, 2
jmp short do0loop
next:
mov ax, 4c00h
int 21h
do0end:
nop
code ends
end start | | |
|
|
|
|
[第4楼]
[ 回复时间:2007-11-25 12:55 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-10-19 19:09 |
0 号优先级远高于单步中断,故显示在前边。
那是因为在这个特定的条件下 CS 的值为 0 ,所以两者没多大的区别,只要能指向需要的地址就行了。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2007-12-03 12:06 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2007-11-12 19:53 |
|
|