. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->INT指令
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  实验12.编写0号中断的处理程序。 db'overflow',0这里是不可执行的代码,故用jmp do0start转移到正式  [已解决] 回复[ 4次 ]   点击[ 331次 ]  
g3109
[帖 主]   [ 发表时间: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值的话应该怎么查呢?
-
abob
[第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去读取哪块内存。
abob
[第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这两个寄存器的值。
g3109
[第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 
看不到。。。
g3109
[第4楼]   [ 回复时间:2010-10-24 10:46 ]   [引用]   [回复]   [ top ] 
荣誉值:4
信誉值:0
注册日期:2010-09-24 16:38
此贴由 贴主 于 [ 2010-10-24 10:46 ] 结贴。 结贴原因:问题已解决
得分情况:
此问题已结贴!
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved