单品机中,当中断时,ROM地址为60H,则入栈时,SP、PC值是多少?出栈时,SP、PC值又是多少???

单品机中,当中断时,ROM地址为60H,则入栈时,SP、PC值是多少?出栈时,SP、PC值又是多少???,第1张

入栈时,sp值指示堆栈所在位置即变为裂衫原来的sp+1,(sp)为60h,pc的值为中断服磨源键务程序所在的入口地址(0003h~0023h)

出瞎巧栈时,sp的值为中断处理过程中恢复现场之后的sp-1,pc的值指向主程序地址即为60h、

直接装入法腔蠢:

PUSH DS

PUSH AX

XOR AX, AX

MOV DS, AX

MOV AX, OFFSET SERVE 取来偏伍液陪移地址.

MOV DS: [60H * 4], AX 写入.

MOV AX, SEG SERVE 取来段地址.

MOV DS: [60H * 4 + 2], AX 写入.

POP AX

POP DS

完.

--------------------

利用DOS系统功能调用埋余:

PUSH DS

MOV AX, SEG SERVE 取来段地址.

MOV DS, AX

MOV DX, OFFSET SERVE 取来偏移地址.

MOV AX, 2560H 25H:写中断向量;60H:中断类型码.

INT 21H

POP DS

第一段程序:

CLI

CLD

MOV AX,0 //这里,为什么要赋0呢?

MOV ES,AX //为什么灶卖要通过AX才能传到ES

说明:

因为实模式下中断向量表是在0000:0000处开始的,所以要将目标位置的段地址设为0。与段寄存器有关的数据传送等指令不允许立即数作为另一个 *** 作数,所以要借助AX等通用寄存器。

MOV DI,4*60H //这个是中断向量指针

MOV AX,OFFSET_INTR //然后把偏移值传到AX

STOSW //这里就很有问题了,书上的话是"AX->[DI][DI+1],然后DI+2"莫名

咧,首先是为什么STOSW是个什么东西,然后上面的DI+1是指连续四个

存储单元中从下往上的第二个单元吗?然后,DI+2,是在什么条件下发

生的?

说明:

STOSW指令会将AX的内容存储到ES:[DI]处开始的两个字节里(AL在低地址的字节即ES:[DI]中、AH放到高地址的字节即ES:[DI+1]处,完成后自动将DI加2以指向下一次的目的地址。这部分和书上的意思是完全一致的,这里只是用自然语言描述了一下。

你所说的该中断向量的连续四个字节[DI]、[DI+1]、[DI+2]、[DI+3]中,[DI]和[DI+1]中的字是中断入口地址的偏移量部分,[DI+2]、[DI+3]是中断入口地址的段地址部分。假设某中断服务程序的入口地址是 FFF0:1234,那么[DI]、[DI+1]、[DI+2]、[DI+3]分别就应该是 34h, 12h, f0h, ffh。你此处提问的后半部分我没太明白,希望前面的解释能有帮助。

MOV AX,SEG_INTR

STOSW

STI

第二段程序:

MOV AX,00H

MOV ES,AX

MOV BX,60H*4 /正型/这里好像是把内存四个连续单元的第一个地址赋值给BX

MOV AX,006DH //006DH是偏移地址

MOV ES:[BX],AX //好讨厌额,这里又不懂了,书上说是"装入偏移地址",

可是MOV BX,60H*4感觉好像是已经装好了(#‘′)。。。

说明:

CS:006D是真正的中断处理程序的入口地址,这段程序是要将这个地址填写到中断向量表中 60H 中断的表项里。由于每个中断向量要占4个字节(分别存放对应的中断处理程序的入口地址的偏移/段地址),因此第60H号中断向量在表中的位置(注意不是中断处理程序的入口地址)就是0000:60H*4到0000:60H*4+3处的4个字节,程序把60H*4这个起始字节的偏移量放在BX里,ES放的是0段,AX放的则是要填入表中的真正的中断处理程序的入口地址,CS是这段代码的段地址(因为这个程序提供的60H中断处理程序也是在这个代隐清逗码段里)然后依次填入。

PUSH CS

POP AX //这里书上说是"获取中断服务程序的段基址"我就觉得不懂,照说这段基址怎么会和CS有关系呢

MOV ES:[BX+2],AX

说明:

PUSH CS/POP AX是以前8086汇编里很常用的替代MOV AX,CS的办法(好像是比MOV AX,CS少用一个指令周期,能少许快点),其作用就是MOV AX,CS。这段程序是要把60H中断向量指向自己的中断处理程序(位于CS:006D处),这个中断处理程序是和这里的初始化代码从同一个段计算偏移的、段地址也相同,所以直接用执行到此初始化代码时的CS填写中断向量的段地址即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12475903.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存