yearn2005 发表于 2013-6-6 00:48:06

关于INT21

本帖最后由 yearn2005 于 2013-6-6 00:57 编辑

做到实验8 ,整个程序流程是理清了 但不明白 执行了INT21后 为什么IP=0000有大虾来科普下吗 assume cs:codesg
codesg segment




         mov ax,4c00h
               int 21h
               
start:   mov ax,0         ;该处偏移地址为0005 执行到15行时候被改写为标号S2出的内容【jmp short s1】
s:       nop                     ;该处偏移地址为0008
         nop
               
               mov di,offset s    ;取得标号S处的偏移地址0008装如DI寄存器中
               mov si,offset s2   ;取得标号S2处的偏移地址0020装入SI寄存器
               mov ax,cs:   ;cs:的内容装入AX
               mov cs:,ax   ;通过以上步骤 标号S处【偏移地址0008】被改写为标号S2出的内容【jmp short s1】
               
s0:      jmp short s      ;跳转到【0005处】执行了 【jmp short s1】


s1:      mov ax,0
            int 21h            ;执行到这IP被改为0000于是程序执行CS:0000 {
               mov ax,0
               
s2:      jmp short s1
         nop
               
codesg ends
end start




F:\a>debug s8.exe
-r
AX=0000BX=0000CX=0023DX=0000SP=0000BP=0000SI=0000DI=0000
DS=13D9ES=13D9SS=13E9CS=13E9IP=0005   NV UP EI PL NZ NA PO NC
13E9:0005 B80000      MOV   AX,0000
-u
13E9:0005 B80000      MOV   AX,0000
13E9:0008 90            NOP
13E9:0009 90            NOP
13E9:000A BF0800      MOV   DI,0008
13E9:000D BE2000      MOV   SI,0020
13E9:0010 2E            CS:
13E9:0011 8B04          MOV   AX,
13E9:0013 2E            CS:
13E9:0014 8905          MOV   ,AX
13E9:0016 EBF0          JMP   0008
13E9:0018 B80000      MOV   AX,0000
13E9:001B CD21          INT   21
13E9:001D B80000      MOV   AX,0000
13E9:0020 EBF6          JMP   0018
13E9:0022 90            NOP
13E9:0023 CD21          INT   21

yearn2005 发表于 2013-6-6 00:59:20

课程里 没讲过mov ax,4c00hint21h 的含义,就是说这2条是一段程序的结束必须有的标准格式。

bafengao 发表于 2013-6-6 06:27:12

谢谢楼主分享

网友 发表于 2013-6-18 19:50:16

为自己代言

bypeng 发表于 2013-6-19 16:07:52

调用21号中断功能4CH号,楼主可以查INT 21中断类型
页: [1]
查看完整版本: 关于INT21