计算机组成与体系结构——大小端存储_堆栈_执行(逆)波兰式

274 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

一、多字节存储方式

大多数现有体系结构采用按字节寻址,分为大端存储和小端存储

端(Endianness)代表了计算机中存储多字节数据的顺序

Ⅰ、大端存储

大端(Big Endian):低位有效字节存储在高位地址

优点:

  • 更加自然:字节顺序和地址顺序一致
  • 可以快速确定数字的符号(符号位在最低地址)
  • 字符串的存储顺序和整数一致:"ABC" = 0x41 0x42 0x43 => 0x414243

Ⅱ、小端存储

小端(Little Endian):低位有效字节存储在低位地址

优点: 高位数字转为低位更方便:32位数字0x12345678和低16位0x5678的地址是一样的

大端存储和小端存储代表的字节顺序而不是位顺序

二、CPU内部的数据存储

CPU内部的数据存储架构有以下几种

  • 堆栈型架构:操作数隐式放置在堆栈中
  • 累加器型架构:当指令对应的运算涉及两个操作数时,其中一个操作数隐式放置在累加器寄存器中
  • 通用寄存器型架构:操作数保存在寄存器中,又可细分为:存储器-存储器型,多个操作数放置在内存;寄存器-存储器型,操作数放置在寄存器和存储器中;取-存型所有操作数放置在寄存器中

各架构的汇编操作示例:

假设要实现地址x的存储单元和地址y的存储单元中数据相加,写入地址z的存储单元

;堆栈型架构
PUSH x
PUSH y
ADD
POP z

;累加器型架构
LOAD x
ADD y
STORE z

;通用寄存器型架构(存储器-存储器型)
ADD ax, x, y
STORE ax, z

;通用寄存器型架构(寄存器-存储器型)
LOAD ax, x
ADD ax, y
STORE ax, z

;通用寄存器型架构(取-存型)
LOAD ax, x
LOAD bx, y
ADD cx, ax, bx
STORE cx, z

三、堆栈型架构的存储

Ⅰ、优点

堆栈型架构具有以下优点:

  • 所有的运算都是零地址指令
  • 单地址指令只包括PUSHPOP

对一个三地址指令OP dt, sc1, sc2,即(操作码,目的地址,操作数一的地址,操作数二的地址),可改写为:

PUSH sc1
PUSH sc2
OP
POP dt

Ⅱ、应用——执行(逆)波兰式

1、波兰式的转换

前缀表达式,即波兰式; 后缀表达式,即逆波兰式;

在数据结构中我们学了表达式树遍历法

给定前中后缀表达式,写出表达式树,进行前序中序后序遍历即可。最后的波兰式和逆波兰式无需括号

在这里插入图片描述

通常还有另外一种方法——按优先级替换,这种方法可以依托栈实现

在这里插入图片描述

2、堆栈执行(逆)波兰式

使用堆栈执行波兰式,首先要解析各符号

从左向右扫描整个波兰式,从最右边的符号开始解析:

  • 如果是操作数,将其入栈
  • 如果是运算符,堆栈弹出操作数,计算,结果入栈

在这里插入图片描述