第三章 --- 第六节
2012-01-04 20:29
134 查看
编程1:
将10000H~1000FH这段空间当做栈,初始状态时空的,将AX、BX、DS中的数据入栈。
MOV AX, 1000H
MOV SS, AX
MOV SP, 0010H
PUSH AX
PUSH BX
PUSH DS
编程2:
(1)将10000H~1000FH这段空间当做栈,初始状态是空的;
(2)设置AX = 001AH,设置BX = 001BH;
(3)将AX、BX中的数据入栈;
(4)然后将AX、BX清零;
(5)从栈中恢复AX、BX原来的内容。
MOV AX, 1000H
MOV SS, AX
MOV SP, 0010H
MOV AX, 001AH
MOV BX, 001BH
SUB AX, AX
SUB BX, BX
POP BX
POP AX
编程3:
(1)将10000H~1000FH这段空间当做栈,初始状态是空的;
(2)设置AX = 002AH,BX = 002BH;
(3)利用栈,交换AX和BX中的数据。
MOV AX, 1000H
MOV SS, AX
MOV SP, 0010H
MOV AX, 002AH
MOV BX, 002BH
PUSH AX
PUSH BX
POP AX
POP BX
编程4:
我们如果要在10000H处写入字型数据2266H,可以用以下的代码完成:
MOV AX, 1000H
MOV DS, AX
MOV AX, 2266H
MOV [0], AX
看题目:
补在10000H处写入字型数据2266H
___________________________
___________________________
___________________________
MOV AX, 2266H
PUSH AX
要求:不能使用“MOV 内存单元, 寄存器”这类指令。
答案:
MOV AX, 1000H
MOV SS, AX
MOV SP, 0002H ;字型单元的地址是低地址
MOV AX, 2266H
PUSH AX
结论:PUSH、POP实际上是一种内存传送指令,可以在寄存器和内存之间传送数据,与MOV指令不同的是,PUSH和POP指令访问的内存单元的地址不是在指令中给出的,而是由SS:SP指出的。
同时,PUSH和POP指令还要改变SP中的内容。
注意:
PUSH、POP等栈操作指令,修改的只是SP,也就是说,栈顶的变化范围最大为0~FFFFH。
栈的综述:
1、8086CPU提供了栈的操作机制,方案如下:
在SS,SP中存放栈顶的段地址和偏移地址;
提供入栈和出栈指令,他们根据SS:SP指示的地址,按照栈的方式访问内存单元。
2、PUSH指令的执行步骤
SP = SP - 2
向SS:SP指向的字单元中送入数据
3、POP指令的执行步骤:
从SS:SP指向的字单元中读取数据
SP = SP + 2
4、任意时刻,SS:SP指向栈顶元素。
5、8086CPU只记录栈顶,栈空间的大小我们要自己管理。
6、用栈来暂存以后需要恢复的寄存器的内容时,寄存器出栈的顺序要和入栈的顺序相反。
7、PUSH、POP实质上是一种内存传送指令,注意它们的灵活使用。
将10000H~1000FH这段空间当做栈,初始状态时空的,将AX、BX、DS中的数据入栈。
MOV AX, 1000H
MOV SS, AX
MOV SP, 0010H
PUSH AX
PUSH BX
PUSH DS
编程2:
(1)将10000H~1000FH这段空间当做栈,初始状态是空的;
(2)设置AX = 001AH,设置BX = 001BH;
(3)将AX、BX中的数据入栈;
(4)然后将AX、BX清零;
(5)从栈中恢复AX、BX原来的内容。
MOV AX, 1000H
MOV SS, AX
MOV SP, 0010H
MOV AX, 001AH
MOV BX, 001BH
SUB AX, AX
SUB BX, BX
POP BX
POP AX
编程3:
(1)将10000H~1000FH这段空间当做栈,初始状态是空的;
(2)设置AX = 002AH,BX = 002BH;
(3)利用栈,交换AX和BX中的数据。
MOV AX, 1000H
MOV SS, AX
MOV SP, 0010H
MOV AX, 002AH
MOV BX, 002BH
PUSH AX
PUSH BX
POP AX
POP BX
编程4:
我们如果要在10000H处写入字型数据2266H,可以用以下的代码完成:
MOV AX, 1000H
MOV DS, AX
MOV AX, 2266H
MOV [0], AX
看题目:
补在10000H处写入字型数据2266H
___________________________
___________________________
___________________________
MOV AX, 2266H
PUSH AX
要求:不能使用“MOV 内存单元, 寄存器”这类指令。
答案:
MOV AX, 1000H
MOV SS, AX
MOV SP, 0002H ;字型单元的地址是低地址
MOV AX, 2266H
PUSH AX
结论:PUSH、POP实际上是一种内存传送指令,可以在寄存器和内存之间传送数据,与MOV指令不同的是,PUSH和POP指令访问的内存单元的地址不是在指令中给出的,而是由SS:SP指出的。
同时,PUSH和POP指令还要改变SP中的内容。
注意:
PUSH、POP等栈操作指令,修改的只是SP,也就是说,栈顶的变化范围最大为0~FFFFH。
栈的综述:
1、8086CPU提供了栈的操作机制,方案如下:
在SS,SP中存放栈顶的段地址和偏移地址;
提供入栈和出栈指令,他们根据SS:SP指示的地址,按照栈的方式访问内存单元。
2、PUSH指令的执行步骤
SP = SP - 2
向SS:SP指向的字单元中送入数据
3、POP指令的执行步骤:
从SS:SP指向的字单元中读取数据
SP = SP + 2
4、任意时刻,SS:SP指向栈顶元素。
5、8086CPU只记录栈顶,栈空间的大小我们要自己管理。
6、用栈来暂存以后需要恢复的寄存器的内容时,寄存器出栈的顺序要和入栈的顺序相反。
7、PUSH、POP实质上是一种内存传送指令,注意它们的灵活使用。
相关文章推荐
- 第三章 第六节 背面剔除
- 第三章 第六节 数据流
- 第三章 第六节 SWT类的常量与函数
- 第三章 第六节 转换模型坐标到视点坐标
- 《ARM与Linux些许问题》第三章:Linux如何从用户态进入内核态
- 第三章 表单(语义化)
- 第三章 共享程序集和强命名程序集
- 软件开发工具第三章
- Android大话设计模式 第三章----开放封闭原则---孙悟空任弼马温一职
- <第三章>Node 学习笔记 |>URL网站解析<|
- 启动MySQL 监视器(Monitor) 【数据库高效编程 - 学习笔记 第三章】
- Java编程思想(第三章)
- 第三章 面向对象编程基础知识
- android群英传笔记--第三章--自定义控件二topView的简单封装
- 第三章 字符设备驱动程序
- 第三章 文件操作
- 《tiny6410裸机程序》第三章:基础汇编test1
- android群英传笔记--第三章--自定义控件四音频条形图
- 飞思卡尔_第三章_存储器映像控制模块
- android群英传笔记--第三章--自定义控件五粘性上下滑动scrollview