8086CPU在收到中断信息后,所引发的中断过程
1、从中断信息中取得中断类型码
2、标志寄存器的值入栈
3、设置标志寄存器的第8位TF和第9位IF的值为0
4、CS的内容入栈
5、IP的内容入栈
6、从内存地址为中断类型码*4和中断类型码*4+2的两个字节单元中读取中断处理程序的入口地址设置IP和CS
中断过程的简洁描述
1、取得中断类型码N
2、pushf
3、TF=0、IF=0
4、push cs
5、push ip
5、(IP)=(N*4),(CS)=(N*4+2)
中断处理程序的编写方法的常规步骤:
1、保存用到的寄存器
2、处理中断
3、恢复用...


- [wenjie] 嗯,谢谢,写的时候打错了,没注意到,呵呵! 07/30 15:27
- [masmaster] pop数据的时候sp=sp+2 07/29 16:37
- [kyolxs] 呵呵。。支持支持 07/25 01:56
[2010-08-14 20:09] 中断处理程序总结
阅读全文 |
评论次数(0) |
浏览次数(563) |
所属类型(汇编学习)
[2010-08-10 00:37] 第十章学习总结
RET指令用栈中的数据,修改IP的内容,从而实现近转移
RETF指令用栈中的数据,修改CS和IP的内容,从而实现远转移
RET指令相当于执行POP IP
RETF指令相当于执行POP IP,POP CS...
RETF指令用栈中的数据,修改CS和IP的内容,从而实现远转移
RET指令相当于执行POP IP
RETF指令相当于执行POP IP,POP CS...
阅读全文 |
评论次数(0) |
浏览次数(794) |
所属类型(汇编学习)
[2010-08-08 23:39] 检测点9.3
补全程序,利用loop指令,实现在内存2000H段中查找第一个值为0的byte,找到后,将它的偏移地址存储在dx中。
assume cs:code
code segment
start:
mov ax,2000h
mov ds,ax
mov bx,0
s:
mov cl,[bx]
mov ch,0
inc cx
inc b...
assume cs:code
code segment
start:
mov ax,2000h
mov ds,ax
mov bx,0
s:
mov cl,[bx]
mov ch,0
inc cx
inc b...
阅读全文 |
评论次数(0) |
浏览次数(611) |
所属类型(汇编作业)
[2010-08-08 23:21] 检测点9.2
补全程序,利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中
assume cs:code
code segment
start:
mov ax,2000h
mov ds,ax
mov bx,0
s: mov cl,[bx]
mov ch,0
jcxz ok
inc bx
jmp short s
ok: mov dx,bx
mov ax,4c00h
int 21h
code e...
assume cs:code
code segment
start:
mov ax,2000h
mov ds,ax
mov bx,0
s: mov cl,[bx]
mov ch,0
jcxz ok
inc bx
jmp short s
ok: mov dx,bx
mov ax,4c00h
int 21h
code e...
阅读全文 |
评论次数(0) |
浏览次数(532) |
所属类型(汇编作业)
[2010-07-30 23:04] 检测点6.1
1、实现依次用内存0:0~0:15单元中的内容改写程序中的数据,完成程序:
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start: mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s: mov ax,[bx]
mov cs:[bx],ax
add bx,2
loop s
mov ax,4c00h...
assume cs:codesg
codesg segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
start: mov ax,0
mov ds,ax
mov bx,0
mov cx,8
s: mov ax,[bx]
mov cs:[bx],ax
add bx,2
loop s
mov ax,4c00h...
阅读全文 |
评论次数(0) |
浏览次数(545) |
所属类型(汇编作业)
[2010-07-30 15:26] 实验4
1、编程,向内存0:200~0:23F依次传送数据0~63,只能用9条指令,包括 mov ax,4c00h和int 21h
assume cs:code
code segment
mov ax,200h
mov ds,ax
mov bx,0
mov cx,63
s:mov [bx],bx
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
2、将mov ax,4c00h之前的指令复制到内存0:200处
assume cs:code
code segment
mov ax,cs...
assume cs:code
code segment
mov ax,200h
mov ds,ax
mov bx,0
mov cx,63
s:mov [bx],bx
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
2、将mov ax,4c00h之前的指令复制到内存0:200处
assume cs:code
code segment
mov ax,cs...
阅读全文 |
评论次数(0) |
浏览次数(623) |
所属类型(汇编作业)
[2010-07-28 22:51] 栈的综述
1、8086供了栈操作机制,方案如下:
在SS、SP中存放栈顶的段地址和偏移地址;
提供入栈和出栈指令,它们根据SS:SP指示的地址,按照栈的方式访问内存单元
2、push指令的执行步骤:1、SP=SP-2;2、向SS:SP指向的字单元中送入数据
3、pop指令执行步骤:1、从SS:SP指向的字单元中读取数据;2、SP=SP+2;
4、任意时刻,SS:SP指向栈顶元素
5、8086CPU只记录栈顶,栈空间的大小要我们自己管理
6、用栈来暂存以后需要恢复的寄存器的内容时,寄存器出栈的顺序和入栈的顺序相反
7、push、pop实质上是一种内存传送指令...
在SS、SP中存放栈顶的段地址和偏移地址;
提供入栈和出栈指令,它们根据SS:SP指示的地址,按照栈的方式访问内存单元
2、push指令的执行步骤:1、SP=SP-2;2、向SS:SP指向的字单元中送入数据
3、pop指令执行步骤:1、从SS:SP指向的字单元中读取数据;2、SP=SP+2;
4、任意时刻,SS:SP指向栈顶元素
5、8086CPU只记录栈顶,栈空间的大小要我们自己管理
6、用栈来暂存以后需要恢复的寄存器的内容时,寄存器出栈的顺序和入栈的顺序相反
7、push、pop实质上是一种内存传送指令...
阅读全文 |
评论次数(2) |
浏览次数(796) |
所属类型(汇编学习)
[2010-07-26 23:51] 3.1-3.5小结
1、字在内存中存储时,要用两个地址连续的内存单元来存放,字的低位放在低地址单元中,高位字节放在高地址单元中
2、用mov指令访问内存单元,可以在mov指令中只给出单元的偏移地址,此时,段地址默认在DS寄存器中
3、[address]表示一个偏移地址为address的内存单元
4、在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器、低地址单元和低8位寄存器相对应
5、mov、add、sub是具有两个操作对象的指令,jmp是具有一个操作对象的指令
6、可以根据自己的推测,在debug中实验指令的新格式...
2、用mov指令访问内存单元,可以在mov指令中只给出单元的偏移地址,此时,段地址默认在DS寄存器中
3、[address]表示一个偏移地址为address的内存单元
4、在内存和寄存器之间传送字型数据时,高地址单元和高8位寄存器、低地址单元和低8位寄存器相对应
5、mov、add、sub是具有两个操作对象的指令,jmp是具有一个操作对象的指令
6、可以根据自己的推测,在debug中实验指令的新格式...
阅读全文 |
评论次数(0) |
浏览次数(578) |
所属类型(汇编学习)
[2010-07-25 02:09] debug 常用命令
查看、修改CPU中寄存器的内容:R命令
查看内存中的内容:D命令
修改内存中的内容:E命令(可以写入数据、指令,在内存中没有区别)
将内存中的内容解释为机器指令和对应的汇编指令:U命令
执行CS:IP指向的内存单元处的指令:T命令
以汇编指令的形式向内存中写入指令:A命令...
查看内存中的内容:D命令
修改内存中的内容:E命令(可以写入数据、指令,在内存中没有区别)
将内存中的内容解释为机器指令和对应的汇编指令:U命令
执行CS:IP指向的内存单元处的指令:T命令
以汇编指令的形式向内存中写入指令:A命令...
阅读全文 |
评论次数(0) |
浏览次数(563) |
所属类型(汇编学习)
[2010-07-25 01:07] 检测点2.2
1、给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为00010H到1000FH
开始:0001H*16+0H,结束:0001H*16+FFFFH
2、有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元,则SA应该满足的条件是:最小为:1001H,最大为:2000H
最大:SA*16+0H=20000H
最小:SA*16+FFFFH=20000H,应段首地址应为16的倍数,所以最小为1001H...
开始:0001H*16+0H,结束:0001H*16+FFFFH
2、有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元,则SA应该满足的条件是:最小为:1001H,最大为:2000H
最大:SA*16+0H=20000H
最小:SA*16+FFFFH=20000H,应段首地址应为16的倍数,所以最小为1001H...
阅读全文 |
评论次数(0) |
浏览次数(590) |
所属类型(汇编作业)
『 查看更多文章 』