Skip to content

Latest commit

 

History

History
90 lines (66 loc) · 2.71 KB

File metadata and controls

90 lines (66 loc) · 2.71 KB

存储器访问

  1. 字长为32位,只支持整字访问。
  2. 字节采用小端方式存储。
  3. 对齐寻址。
  4. 设置存储器栈。

整数类型: 32位补码表示


浮点数: 采用IEEE754标准,提供32位的单精度浮点数。

寻址方式

定义reg为寄存器组,reg[ra]为ra中的数据;mem为存储器,mem[addr]为内存中的数据,a为一个数字。下面示例了汇编语言中的寻址方式与操作数值之间的对应关系。

  1. 寄存器寻址:ra==reg[ra]
  2. 立即数寻址:$a==a
  3. 寄存器间接寻址:[ra]==mem[reg[ra]]
  4. 变址寻址:@a[ra;rb;s]=mem[a+reg[ra]+reg[rb]*s],其中ra,rb和s均可留空,并且rb和s的留空状态相同,不可省略逗号(便于处理),不可全部留空。
  5. 栈操作的默认操作地址保存在栈帧中。
  6. 地址绝对寻址:#12==memory[12]

指令集

数据转移指令:mv,push,pop

该指令集采取寄存器-存储器体系结构,每条数据转移指令最多涉及1次存储器访问。

指令格式: mv d,s

将s的内容转移到d中。其中源和目的最多有一个是存储器且两个不能都是立即数,并且立即数只能放在s。


push r ;pop r :将r寄存起压入栈或压出栈

运算指令

运算指令的目的地址必须是寄存器。

逻辑运算指令 and,or,not,xor

设operation:and or xor;d,s为寄存器,存储器或立即数;

指令格式: operation d,s1,s2

其表示为:d=s1 op s2

其中立即数只能出现在s2位置。


nor指令格式: nor s:寄存器或存储器内容取反并放回原地址

算数运算指令 add(f),sub(f),mul(f),div(f),sub1,add1

设op=add(f),sub(f),mul(f) or div(f)

op d,s1,s2表示d=s1 op s2

其中s2可以为立即数,(f)表示对浮点数操作。


inc和dec执行-1和+1操作。 指令格式:

inc rx

dec rx

比较指令

cmp r1,r2

比较两个寄存器内的值,并设置条件码寄存器。r2位置支持整数立即数

跳转指令

跳转指令可分为以下几种:

  • je:相等则跳转
  • ja:大于则跳转
  • jge:大于等于则跳转
  • jb:小于则跳转
  • jle:小于等于则跳转
  • jmp:无条件跳转

跳转地址寻址方式有两种:绝对地址和PC相对地址寻址。其中相对地址只能存在寄存器中。例如:

jmp $0:转到0号地址

jmp r1:转到PC+r1地址

调用及返回指令

调用的子函数前5个参数由寄存器传递,从第六个开始由栈传递。由r0保存返回值。前6个寄存器由调用者保存,当被调用者使用其他寄存器时也要保存。 call label:调用Label处的子程序

call 绝对地址:调用决对地址处的子程序

ret:从子函数中返回,恢复现场