导图社区 《微机原理》-汇编语言
《微机原理》系列,将汇编语言内容整理出来了。常用指令集,保存便于查看和记忆。包括:指令集、汇编指令、MIPS32、一些概念、MIPS常用汇编指令、汇编程序。 整活!让知识自己说话~~
编辑于2023-01-29 11:17:32 河南微机原理 汇编语言
指令集
复杂指令集CISC
特点
①指令系统复杂庞大,指令数目一般多达2、3百条
②寻址方式多
③指令格式多
④指令字长不固定
⑤可访存指令不加限制
⑥各种指令使用频率相差很大
⑦各种指令执行时间相差很大
代表
Inter公司 X86系列CPU
精简指令集RISC
特点
①精简了指令系统,流水线以及常用指令均可用硬件执行
②采用大量的寄存器,使大部分指令操作都在寄存器之间进行,提高了处理速度
③每条指令的功能尽可能简单,并在一个机器周期内完成
④所有指令长度均相同(32b或64b)
⑤只有Load和Store操作指令才访问存储器,其它指令操作均在寄存器之间进行
汇编指令
符号语言,使用助记符和标号
MIPS
格式
MIPS32
特殊寄存器 3个
通用寄存器 32个
$zero一直是0
$t0--$t9常用
$s0--$s7通常在子函数调用时 做入栈出栈保留数据
存储器
结构
用户空间 0x0000 0000
代码段 0x0040 0000
数据段 0x1000 0000
mars数据段从0x10010000开始
堆
栈 0x7FFF FFFF
先进后出原则
内核空间 0x8000 0000
指令四字节 邻居4口家 图上一共8GB
1 GB = 2¹⁰ MB = 2²⁰ KB = 2³⁰ B 一个地址指向一个字节
对齐
一些概念
宏汇编语言基本指令
什么是宏汇编指令
是指令序列的符号表示
包括
符号指令
图里面的大多数
伪指令
宏指令
编译
将高级语言程序翻译成汇编语言程序或机器语言程序的过程
目标程序
经汇编程序翻译而获得的机器指令序列程序
装载
MIPS常用汇编指令
算术指令 R型,op均为0
add / addu addi / addiu sub / subu 等
没有subi
数据传输指令
存储器↔CPU lw/sw/lh\lhu等
还需注意符号数
特殊寄存器→通用寄存器 mfhi/mflo
Hi/Lo→通用寄存器
▪ 没有存储器到存储器的MIPS指令 ▪ 没有常数到存储器的MIPS指令 ▪ 没有通用寄存器到通用寄存器的指令(那是算术指令)
立即数→寄存器 lui、li
高位立即数
宏指令
逻辑指令
逻辑指令, 不考虑符号
and / andi or / ori nor或非 xor异或
控制指令
条件转移
beq相等则跳转 bne不等则跳 Imm表示中间人
if
for
while
case实现
跳转表实现
在(存储器)数据段提前定义各个跳转地址 在32位mips微处理器,地址都是32位(字)
分支较多时,跳转表法更简洁
无条件转移
目标地址(27:2)
if实现
比较设置指令
小于则设置为1,否则0 slt/slti有符号 sltu/sltiu无符号
子程序调用、返回
jal记住现在, 穿越时空
jr金蝉脱壳 完璧归赵
子程序调用:jal 保存子程序返回地址:jr $ra
口
$a0~$a3:存放由主程序传递给子程序的入口参数
$v0、$v1:存放由子程序传递给主程序的返回结果
子程序嵌套
需首先将$ra寄存器存入栈
寻址子程序内的局部变量采用$fp寄存器作为基地址寄存器
系统功能调用 syscall
数据段内存映像这样画
动态数据区有局部变量和链表
汇编程序
伪指令
.globl 全局标签
.date 数据段起始定义
.byte字节 .half半字(以偶数地址对齐) .word字(以四倍地址对齐) .float单精度浮点型/32位 .double双精度浮点型/64位 .ascii分配字节序列存ASCII字符串 .asciiz补充了一个0x00 NULL字符 .space分配n个字节空间
变量: 字符串“”
注意,align只规定下一个数据的首地址必须为 以后管不着。
字符‘’
.text 代码段起始定义
操作数类型
寄存器操作数
add
存储器操作数
.align n #
lw和sw等
立即数操作数
addi和lw等 立即数成指令的一部分
编码方式
二进制 操作码+操作数 先马后数
R型指令
一 二 目 的藏最后
I型指令
手中剑
J型指令
别跳出地球了
寻址原理
找对象
操作数寻址 (数据)
寄存器寻址
R/I型
add
指令中的操作数为寄存器时, 成为寄存器寻址
立即数寻址
数就在指令里
addi、lui、ori
基址寻址
存取指令 找到存储器里的宝贝
注意:sb存的是寄存器Rt低位字节的数据
指令寻址
找下一个 指令地址
通常是顺序执行 地址+4
PC相对寻址
beq
PC值+4+中间商=新PC
我按Mars软件对PC的处理理解。图片为Qtspim的。
伪直接寻址
j
J型指令
寄存器相对寻址
jr是R型指令
生搬硬套
扩展?