|
主题 : : 实验12.编写0号中断的处理程序。 db'overflow',0这里是不可执行的代码,故用jmp do0start转移到正式 [已解决] |
回复[ 4次 ]
点击[ 331次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2010-10-23 13:15 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2010-09-24 16:38 |
assume cs:code
code segment
start: mov ax,cs
mov ds,ax
mov si,do0
mov ax,0
mov es,ax
mov di,0200h
mov cx,offset do0_end - offset do0
cld
rep movsb
mov ax,0
mov es,ax;;;;;;;;;;;;;;;;;;;;;;;
mov word ptr es:[0],200h
mov word ptr es:[2],0
mov ax,1000h
mov bl,1
div bl
mov ax,4c00h
int 21h
do0: ;jmp do0start ;书上说 db'overflow',0这里是不可执行的代码,故用jmp do0start转移到正式的do0start程序
;如果去掉这句代码程序照样正常运行的啊。是不是为了避免每次调用该中断子程序时去重复定义
; 'overflow',0这些字符呢。。所以才跳过。如果是这样话的话,那么 db 'overflow',0
;这条指令是不是就没有被执行呢。。怎么还会在内存中生成'overflow',0呢。。
db 'overflow',0
do0start:
mov ax,cs
mov ds,ax
mov si,200h;加上jmp do0start 的话这里改成 mov si,202h
mov ax,0b800h
mov es,ax
mov di,12*160+30*2
mov ah,2
s: cmp byte ptr [si],0
je do0_ok
mov al,[si]
mov es:[di],ax
add di,2
inc si
jmp s
do0_ok:
mov ax,4c00h
int 21h
do0_end:nop
code ends
end start
另外,在debug时,
AX=1000 BX=0001 CX=0000 DX=0000 SP=0000 BP=0000 SI=0063 DI=022F
DS=2208 ES=0000 SS=2208 CS=2208 IP=002D NV UP EI PL NZ NA PO NC
2208:002D F6F3 DIV BL
-t
Program terminated normally 当程序正常结束了。。但我想查看下div bl这条指令执行之后的cs:ip值的话应该怎么查呢?
- | | |
|
|
|
|
[第1楼]
[ 回复时间:2010-10-23 18:52 ]
[引用]
[回复]
[ top ] | |
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07 |
do0: ;jmp do0start ;书上说 db'overflow',0这里是不可执行的代码,故用jmp do0start转移到正式的do0start程序
;如果去掉这句代码程序照样正常运行的啊。是不是为了避免每次调用该中断子程序时去重复定义
; 'overflow',0这些字符呢。。所以才跳过。如果是这样话的话,那么 db 'overflow',0
;这条指令是不是就没有被执行呢。。怎么还会在内存中生成'overflow',0呢。。
'overflow'是数据,数据段定义的数据一样。指令好数据没有什么区别,都放在内存中,主要取决于cs:ip去读取哪块内存。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2010-10-23 18:55 ]
[引用]
[回复]
[ top ] | |
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07 |
但我想查看下div bl这条指令执行之后的cs:ip值的话应该怎么查呢?
--------------------
执行div后,cs:ip指向了mov ax,4c00h。准确的说,在读入div指令后,cs:ip就已经指向mov ax,4c00h(第二张检测点)。
跟踪执行div后,查看cs,ip这两个寄存器的值。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2010-10-23 20:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2010-09-24 16:38 |
回复:[第2楼]
------------------
另外,在debug时,
AX=1000 BX=0001 CX=0000 DX=0000 SP=0000 BP=0000 SI=0063 DI=022F
DS=2208 ES=0000 SS=2208 CS=2208 IP=002D NV UP EI PL NZ NA PO NC
2208:002D F6F3 DIV BL
-t
Program terminated normally 当程序正常结束了。。但我想查看下div bl这条指令执行之后的cs:ip值的话应该怎么查呢?
-
div bl这条指令执行之后程序已经退出了。。
2208:002D F6F3 DIV BL
-t
Program terminated normally
看不到。。。 | | |
|
|
|
|
[第4楼]
[ 回复时间:2010-10-24 10:46 ]
[引用]
[回复]
[ top ] | |
荣誉值:4
信誉值:0
注册日期:2010-09-24 16:38 |
此贴由 贴主 于 [ 2010-10-24 10:46 ] 结贴。 结贴原因:问题已解决 | | |
|