- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机系统I第10章剖析
计算机系统 I ;;C/C++编译的程序中两个重要的内存区域:
栈区(stack)— 由编译器自动分配释放 ,存放函数的参数名,局部变量的名等。
堆区(heap)— 由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收。
Stack(栈):
由系统自动分配:int b; //系统自动在栈中为b开辟空间
Heap(堆):需要程序员自己申请,并指明大小
p1 = (char *)malloc(10); //C
p2 = new char[10]; //C++
p1, p2本身在栈中,分配的空间在堆中。;栈是一种存储机制,具有特有的访问规则
栈的重要作用:
中断驱动I/O
算数运算机制:基于栈的算术运算,用栈来存储中间结果,取代寄存器
数据类型转换:二进制补码与ASCII字符串之间的转换算法
后续数据结构和操作系统课程还会深入学习;定义:栈是一种具有LIFO (last-in first-out: 后进先出)访问特性的存储结构
第一个放进去的,最后一个取出来
最后一个放进去的,第一个取出来
因而栈特殊的地方在于它的访问方式,而不是它的实现。
栈的两个主要操作:
PUSH(压入): 在栈中插入一个元素
POP(弹出): 在栈中删除一个元素;汽车上的硬币盒
弹出来的第一个硬币是最后进去的。;硬件栈:在寄存器间移动数据
每压入或一个栈元素,栈中所有元素都将一起‘移动’
栈的访问总是针对第一个元素,该寄存器标识为‘TOP’
;栈向下生长,数据在内存单元之间不需要移动
通过修改栈指针(TOP),使得总是指向最近压入的数据;弹出过程;For our implementation, stack grows downward (when item added, TOS moves closer to 0)
Push
ADD R6, R6, #-1 ; decrement stack ptr STR R0, R6, #0 ; store data (R0)
Pop
LDR R0, R6, #0 ; load data from TOS ADD R6, R6, #1 ; decrement stack ptr;当栈已经满了或者空了的考虑
当执行PUSH操作 ,应该先检查栈是否满了
当执行POP操作,应该先检查栈是否为空
使用R5返回状态信息, (0-成功, 1-溢出);如果弹出过多的元素,会出现下溢出
在执行弹出操作前检查是否下溢出
将状态记录在寄存器R5 (0-成功, 1-溢出)
POP LD R1, EMPTY ; EMPTY = -x4000 ADD R2, R6, R1 ; Compare stack pointer BRz FAIL ; with x3FFF LDR R0, R6, #0 ADD R6, R6, #1 AND R5, R5, #0 ; SUCCESS: R5 = 0 RETFAIL AND R5, R5, #0 ; FAIL: R5 = 1 ADD R5, R5, #1 RETEMPTY .FILL xC000;如果压入过多的元素,会出现上溢出
在执行压入操作前检查是否上溢出
将状态记录在寄存器R5 (0-成功, 1-溢出)
PUSH LD R1, MAX ; MAX = -x3FFB ADD R2, R6, R1 ; Compare stack pointer BRz FAIL ; with x3FFF ADD R6, R6, #-1 STR R0, R6, #0 AND R5, R5, #0 ; SUCCESS: R5 = 0 RETFAIL AND R5, R5, #0 ; FAIL: R5 = 1 ADD R5, R5, #1 RETMAX .FILL xC005;;;调整empty和MAX的值来调整栈的大小
寄存器R1和R2在使用前保存其内容,使用结束后恢复原值
R5由调用程序负责保存
参数 R0,R6,R5 需要明确作用
;回顾:中断在第8章介绍过
中断服务程序的启动:有来自设备的中断信号服务请求
中断服务程序的执行:处理器保存相关状态信息,启动中断处理程序
中断服务程序的返回:中断处理程序结束,处理器恢复相关状态信息并重启暂停的程序
第8章没有解释(2)和(3),由于这两步涉及栈,现在继续介绍(2)和(3)
;处理器状态寄存器:Processor Status Regist
您可能关注的文档
最近下载
- 2024盐雾试验标准.pdf VIP
- 2015水利安全解析27 (3).doc VIP
- 钢轨探伤——任务4.2钢轨焊缝轨头探伤.pptx VIP
- 特科纳TECHNAL幕墙系统GEODE MX 52 SSG BG 设计与加工手册.pdf VIP
- 挚驱S2系列伺服说明书V220.pdf
- DBJ04_T307-2025 住宅小区配套供电工程技术规程.docx VIP
- 甘肃刘家峡水电厂#5机励磁系统模型及参数测试及PSS试验结.ppt VIP
- 初中数学课堂等待时间与学生学习心理研究论文.docx
- 特科纳TECHNAL幕墙系统SPINAL MY 62 加工手册.pdf VIP
- 10立方双层油罐图纸.pdf VIP
文档评论(0)