计算机系统I第10章剖析.pptx

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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 RET FAIL AND R5, R5, #0 ; FAIL: R5 = 1 ADD R5, R5, #1 RET EMPTY .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 RET FAIL AND R5, R5, #0 ; FAIL: R5 = 1 ADD R5, R5, #1 RET MAX .FILL xC005;;;调整empty和MAX的值来调整栈的大小 寄存器R1和R2在使用前保存其内容,使用结束后恢复原值 R5由调用程序负责保存 参数 R0,R6,R5 需要明确作用 ;回顾:中断在第8章介绍过 中断服务程序的启动:有来自设备的中断信号服务请求 中断服务程序的执行:处理器保存相关状态信息,启动中断处理程序 中断服务程序的返回:中断处理程序结束,处理器恢复相关状态信息并重启暂停的程序 第8章没有解释(2)和(3),由于这两步涉及栈,现在继续介绍(2)和(3) ;处理器状态寄存器:Processor Status Regist

文档评论(0)

586334000 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档