汇编语言

汇编语言

一、概述

汇编语言代替01串组成的机器语言,为了便于程序员记忆和阅读

二、DLX汇编语言指令

1. 算数/逻辑运算指令

① I-类型: OPCODE DR,SR1,Imm
  • DR(目标寄存器),SR1(源寄存器)用R0,R1……R31表示, 其中R0地址内的值总是0
  • Imm(立即数):#十进制 x十六机制 b进制
    16位补码整数,-2^15 ~ 2^15-1
    可以用label代替
  • 例:ADDI R1,R0,numbers 表示将label numbers表示的10个整数的起始地址内的内容存到R1中去。
② R-类型:OPCODE DR,SR1,SR2
  • 例:ADD R3,R3,R4 表示吧R3,R4中的内容相加存入R3
③LHI-类型:LHI DR,Imm
  • 例: LHI R1,A 表示吧LABEL A 代表的地址的高16位赋给R1(R1内的是地址,该指令属于地址跳转指令)
    这里的高16位表示取前16位数字,后16位补0得到的32位数。

2. 数据传送指令

①加载指令: LW/LB DR,Imm(SR1)

基址寄存器SR1 + 偏移量Imm 得到的地址内的数据加载进DR中

②存储指令:SW/SB Imm(SR1),DR

将DR中的值存到 基址寄存器SR1 + 偏移量Imm 得到的地址内

3. 控制指令

①条件分支指令: OPCODE SR1,LABEL
  • 例:BEQZ R2,exit 表示如果R2为0,则下一条要执行的指令为exit表标识的指令
②J指令:J LABEL

表示直接执行 LABEL标识的指令

③JR指令: JR SR1

执行SR1中的指令

④TRAP指令: TRAP Imm

执行Imm代表的任务(这里的Imm是TRAP指令专有的指针)

5. 标记LEBAL

  • 字母、下划线、$开头, :结尾
  • 使用标记表示的存储单元的特征:该单元为分支指令或J指令的目标, 或该单元包含某个被加载或存储的值
  • 标记所表示的地址必须是4的倍数(后两位为0)

6. 注释

  • ;开头
  • DLX汇编语言指令中不允许有空行, 为了程序结构更清晰,使用注释添加空行

7. 伪操作

  • 汇编过程中帮助汇编器工作而发给汇编器的信息。一旦汇编器处理了这条信息, 伪操作就被抛弃掉。
  • .开头
  • 例:
    .data x0000600A 告诉DLX数据起始于单元x0000600A
    .align 2 由于DLX中字的起始地址必须是4的倍数,即后2位是0,所以用align 2 调整
    .word #10,#3.#4,#6,#8,#-2,#45,#5,#8,#9 将这10个整数 以word的形式 连续存储到 x0000600C~x0000033的地址空间中
    .space 4 留出x00006034~x00006037这四个单元
    .text x40000000 程序起始于单元x40000000
    .global main 一个DLX汇编语言程序可能由多个文件组成,global将main标记 标记为全局标记,可在多个文件中使用。main指令表示程序的起点。

三、汇编过程

1. 两趟扫描

第一次建立符号表(保存标记对应的实际的二进制地址)
第二次利用符号表把汇编语言翻译成机器语言

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值