• 汇编和中断


    MISP汇编

    0.常见操作符

    • add $r10, $r1, $r2 表示r10 = r1+r2
    • addi $r1, $zero, 1000表示0寄存器和立即数1000相加放入r1
    • lw $r0, 8($sp) 表示load word sp地址+8 到r0
    • beq $r3, $r9, LABEL 表示branch equal如果相等,则跳转LABEL
    • load从内存加载寄存器
    • store存储回去
    • 加减乘除addisubidivimulti
    • slt表示set if less than如果小于执行
      • slt $d, $rs, $rt
      • slit $d, $rs, 5
    • j LABEL LABEL寻址
    • jr $a0 寄存器寻址
    • jal LABEL多合一跳转
      • 当前PC + 4存入 $ra寄存器
      • j LABEL返回

    举例

    1.判断求和

    if(i == j) {
    	f = i + j
    } else {
    	f = i - j
    }
    

    汇编

    bne $r3, $r4, ELSE # bne——branch not equal
    add $r5, $r3, $r4
    j EXIT # j——jump
    ELSE:
    sub $r5, $r3, $r4
    EXIT
    

    2.for loop

    sum = 0
    for(i = 0; i < 100; i++) {
    	sum += i
    }
    

    汇编

    addi $s3, $zero, 0 # sum = 0
    addi $s4, $zero, 0 # i = 0
    addi $s5, $zero, 100 # 100
    LOOP:
    beq $s4, $5, EXIT
    add $s3, $s4, $s3
    addi $s4, $s4, 1
    j LOOP # -16
    EXIT:
    

    3.函数

    • 函数体——Label标签
    • jal——跳转并链接(jump and link)
    • 传参——栈
    # fac(5)
    addiu $s0, $0, 5 # 函数参数5存入栈 add immidiate unsigned
    sw $s0, $sp # s0写入sp
    addi $sp, $sp, -4 # 栈指针指向下一个
    jal FACT # 跳转
    
    # 函数体
    lw $s0, 4($sp) # 读取参数
    

    4.函数返回

    # 函数体最前面
    sw $ra, 0$(sp)
    addiu $sp, $sp, -4
    lw $t1, 4($sp)
    lw $s0, 8($sp)
    
    jr $t1 # 跳转回去
    

    中断

    当外界发生变化,通过中断CPU注意某个时间的发生。这个时候,CPU执行的状态被保存,中断响应程序被执行

    • OS加载时候加载IVT(比如类型01的程序,中断响应程序存在0x003上)
    • 硬件中断——鼠标、键盘响应操作
    • 软件中断——高级语言异常处理

    Q&A

    • 32位机器的中断路径(ISR)只有4个字节,如何执行程序?
      • 操作系统进行中断操作,然后执行程序
    • 按键中断响应路径到操作系统再到应用,系统如何知道?
      • 每个键盘操作都是一个地址映射
    • 出错了?为什么不直接跳转错误处理?
      • 不是1对1的关系,要降低耦合程度
  • 相关阅读:
    pycurl之公共方法--请求/上传/下载,解析json
    BAT启动关闭VMWARE的虚拟机
    LINUX免密登录SSH下的操作之自动COPY部署到其他机器
    python 可迭代对象
    python itertools 迭代器增加元素
    python django
    《Linux下mysql安装》
    linux下安装mysql
    hive基本语法
    linux连接工具MobaXterm下载及使用
  • 原文地址:https://www.cnblogs.com/littlepage/p/12526798.html
Copyright © 2020-2023  润新知