- 字长为32位,只支持整字访问。
- 字节采用小端方式存储。
- 对齐寻址。
- 设置存储器栈。
整数类型: 32位补码表示
浮点数: 采用IEEE754标准,提供32位的单精度浮点数。
定义reg为寄存器组,reg[ra]为ra中的数据;mem为存储器,mem[addr]为内存中的数据,a为一个数字。下面示例了汇编语言中的寻址方式与操作数值之间的对应关系。
- 寄存器寻址:ra==reg[ra]
- 立即数寻址:$a==a
- 寄存器间接寻址:[ra]==mem[reg[ra]]
- 变址寻址:@a[ra;rb;s]=mem[a+reg[ra]+reg[rb]*s],其中ra,rb和s均可留空,并且rb和s的留空状态相同,不可省略逗号(便于处理),不可全部留空。
- 栈操作的默认操作地址保存在栈帧中。
- 地址绝对寻址:#12==memory[12]
该指令集采取寄存器-存储器体系结构,每条数据转移指令最多涉及1次存储器访问。
指令格式: mv d,s
将s的内容转移到d中。其中源和目的最多有一个是存储器且两个不能都是立即数,并且立即数只能放在s。
push r ;pop r :将r寄存起压入栈或压出栈
运算指令的目的地址必须是寄存器。
设operation:and or xor;d,s为寄存器,存储器或立即数;
指令格式: operation d,s1,s2
其表示为:d=s1 op s2
其中立即数只能出现在s2位置。
nor指令格式: nor s:寄存器或存储器内容取反并放回原地址
设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:从子函数中返回,恢复现场