文章目录
- 一、多字节存储方式
- 二、CPU内部的数据存储
- 三、堆栈型架构的存储
- 完
一、多字节存储方式
大多数现有体系结构采用按字节寻址,分为大端存储和小端存储
端(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
三、堆栈型架构的存储
Ⅰ、优点
堆栈型架构具有以下优点:
- 所有的运算都是零地址指令
- 单地址指令只包括
PUSH
和POP
对一个三地址指令OP dt, sc1, sc2
,即(操作码,目的地址,操作数一的地址,操作数二的地址)
,可改写为:
PUSH sc1
PUSH sc2
OP
POP dt
Ⅱ、应用——执行(逆)波兰式
1、波兰式的转换
前缀表达式,即波兰式;
后缀表达式,即逆波兰式;
在数据结构中我们学了表达式树遍历法:
给定前中后缀表达式,写出表达式树,进行前序中序后序遍历即可。最后的波兰式和逆波兰式无需括号
通常还有另外一种方法——按优先级替换,这种方法可以依托栈实现:
2、堆栈执行(逆)波兰式
使用堆栈执行波兰式,首先要解析各符号
从左向右扫描整个波兰式,从最右边的符号开始解析:
- 如果是操作数,将其入栈
- 如果是运算符,堆栈弹出操作数,计算,结果入栈
完