INT 21H(25H)和INT 21H(35H)的请教!

时间:2022-07-30 01:00:33
INT 21H(25H)和INT 21H(35H)的请教!
问题是这样一来的。沈美明,温冬婵的IBM-PC汇编(2版)的295页有个设和取中断向量的说明,即INT 21H(25H)和INT 21H(35H)解释,
大致如下:
设中断向量:
把由AL指定的中断类型的中断向量DS:DX放在中断向量表中
预置:AH=25H
      AL=中断类型号
      DS:DX=中断向量
执行:INT 21H

取中断向量:
把由AL指定的中断类型的中断向量从中断向量表中取到ES:BX中
预置:AH=35H
      AL=中断类型号
执行:INT 21H
返回时送:ES:BX=中断向量

1,个人以取中断向量来请教:
假设我想得知INT 4 的向量,
    MOV AX,DATAS
    MOV ES,AX
    mov bx,0

    MOV AH,35H
    MOV AL,4
    INT 21H

    MOV CX,ES:[BX]
    MOV DX,ES:[BX+2]
那么通过这段后CX是不是就是INT 4入口的偏移地址,DX就是INT 4的入口段地址
也就是说等效于
MOV CX,0000:0010H
MOV DX,0000:0012H
呢?
也就是说INT 21H(35H)的功能就是把以AL里的数据为中断类型号的中断入口地址(中断向量)以偏移和段地址的顺序存入ES:[BX]及后面的两个字的内存空间里?

2。之所以问是因为我把上面那段代码完善后,如下:

DATAS SEGMENT
    DB 16 DUP(?)
DATAS ENDS



CODES SEGMENT
    ASSUME CS:CODES,ES:DATAS
START:
    MOV AX,DATAS
    MOV ES,AX
    mov bx,0

    MOV AH,35H
    MOV AL,4
    INT 21H

    MOV CX,ES:[BX]
    MOV DX,ES:[BX+2]

    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

在DEBUG时执行INT 21H(35H)时程序不知跑那去了,没法观察ES:[BX]处的变化,所以这里请教下。顺便也请教如何来DEBUG下这个实验?

先谢过!
注:不要照书摘段说明来回答,尽可能以可以理解的文字来指导我下!谢谢!

6 个解决方案

#1



mark

#2



没人指点一下吗?

#3


路过帮顶!!!!!!!!

#4


对中断21的35号功能理解错误,这里ES返回的是中断向量的段地址,BX返回的是中断向量的偏移量。
  MOV CX,ES:[BX]
  MOV DX,ES:[BX+2]
应该改成
  mov  cx, bx  ;偏移量
  mov  dx, es  ;段地址

后面的说法成立
在dos操作系统,可以直接到中断向量表中取地址。

#5


着个问题应该不是很复杂吧?
我也只是对“DS:DX=中断向量”和“返回时送:ES:BX=中断向量”这两句没掌握透所以才实验了下,又没实验出来才问下。是嫌分少还是INT 21H(25),(35)很少用到而不大清楚,还是其他原因?
只要你回答的很精辟我乐意加分啊。一般性回答(只要针对问题的)多少我也会给分的啊。
难道这个问题很复杂吗?不至于一个版块都没人能谈几句的吧?
汗!

#6


引用 4 楼 gzgzlxg 的回复:
对中断21的35号功能理解错误,这里ES返回的是中断向量的段地址,BX返回的是中断向量的偏移量。
MOV CX,ES:[BX]
MOV DX,ES:[BX+2]
应该改成
mov  cx, bx  ;偏移量
mov  dx, es  ;段地址

后面的说法成立
在dos操作系统,可以直接到中断向量表中取地址。

谢谢!
那么INT 21H(25H)中的"DS:DX=中断向量 "不也就是说DS就是向量的段地址,DX里的数据就是向量的偏移地址。
说到这我倒突然想起来了,不可能是DS:[DX],因为DX不能用来寻址。被那个“:”迷惑了,写成“DS、DX=中断向量"多好。。。
谢谢 gzgzlxg大超侠,这个版块就算您最厉害了! INT 21H(25H)和INT 21H(35H)的请教!
感谢指点!我给你加分!
谢谢!

#1



mark

#2



没人指点一下吗?

#3


路过帮顶!!!!!!!!

#4


对中断21的35号功能理解错误,这里ES返回的是中断向量的段地址,BX返回的是中断向量的偏移量。
  MOV CX,ES:[BX]
  MOV DX,ES:[BX+2]
应该改成
  mov  cx, bx  ;偏移量
  mov  dx, es  ;段地址

后面的说法成立
在dos操作系统,可以直接到中断向量表中取地址。

#5


着个问题应该不是很复杂吧?
我也只是对“DS:DX=中断向量”和“返回时送:ES:BX=中断向量”这两句没掌握透所以才实验了下,又没实验出来才问下。是嫌分少还是INT 21H(25),(35)很少用到而不大清楚,还是其他原因?
只要你回答的很精辟我乐意加分啊。一般性回答(只要针对问题的)多少我也会给分的啊。
难道这个问题很复杂吗?不至于一个版块都没人能谈几句的吧?
汗!

#6


引用 4 楼 gzgzlxg 的回复:
对中断21的35号功能理解错误,这里ES返回的是中断向量的段地址,BX返回的是中断向量的偏移量。
MOV CX,ES:[BX]
MOV DX,ES:[BX+2]
应该改成
mov  cx, bx  ;偏移量
mov  dx, es  ;段地址

后面的说法成立
在dos操作系统,可以直接到中断向量表中取地址。

谢谢!
那么INT 21H(25H)中的"DS:DX=中断向量 "不也就是说DS就是向量的段地址,DX里的数据就是向量的偏移地址。
说到这我倒突然想起来了,不可能是DS:[DX],因为DX不能用来寻址。被那个“:”迷惑了,写成“DS、DX=中断向量"多好。。。
谢谢 gzgzlxg大超侠,这个版块就算您最厉害了! INT 21H(25H)和INT 21H(35H)的请教!
感谢指点!我给你加分!
谢谢!