Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 接收器控制寄存器的中断电平是多少_Assembly_Mips_Interrupt Handling - Fatal编程技术网

Assembly 接收器控制寄存器的中断电平是多少

Assembly 接收器控制寄存器的中断电平是多少,assembly,mips,interrupt-handling,Assembly,Mips,Interrupt Handling,我正在尝试创建一个处理键盘输入的硬件中断处理程序。问题是,只有当接收器控制寄存器的值为1时,我的处理程序才应该继续。目前,我的代码生成的值为3,因此我的处理程序只是退出,因为我只想处理硬件中断。我在网上找不到任何地方描述什么是3级中断,以及如何修复代码,使其产生1级中断 有人能告诉我3级是什么,或者至少给我指出一个资源吗?谢谢 再加上。我的原因寄存器的值也是256。我认为所有的代码都是十六进制的,因此这将是一个代码4。我看到的是来自非法地址的负载。这没有意义,因为直到我按下键盘上的一个键,中断处

我正在尝试创建一个处理键盘输入的硬件中断处理程序。问题是,只有当接收器控制寄存器的值为1时,我的处理程序才应该继续。目前,我的代码生成的值为3,因此我的处理程序只是退出,因为我只想处理硬件中断。我在网上找不到任何地方描述什么是3级中断,以及如何修复代码,使其产生1级中断

有人能告诉我3级是什么,或者至少给我指出一个资源吗?谢谢

再加上。我的原因寄存器的值也是256。我认为所有的代码都是十六进制的,因此这将是一个代码4。我看到的是来自非法地址的负载。这没有意义,因为直到我按下键盘上的一个键,中断处理程序才被调用。代码如下:

.data 0xffff0000 
RecvCtrlReg: .word 0

.ktext  0x80000180

    #move   $k1, $at

    #la $k0, frogger    # save the address to frogger function for long call

    mfc0    $k1, $13
    beq $k1, 0, keyboard    # If cause register is not zero, exit

    li  $v0, 10     # Do nothing and exit
    syscall

    keyboard:           # else check interupt level

    lw  $t7, RecvCtrlReg    
    beq $t7, 1, continue    # if the Reciever Control Reg is 1, its a hardware interrupt, so continue

    li  $v0, 10     # else do nothing and exit
    syscall
    continue:

    jalr    $k0     # long call frogger function

    mtc0    $0, $13     # set cause register to 0

    mfc0    $k0, $12        # Fix status register
    andi    $k0, 0xfffd # clear EXL bit
    ori $k0, 0x1        # Enable interrupts
    mtc0    $k0, $12        # Store value back into status register

    #move   $at, $k1

    eret

这不仅仅是因为寄存器中断位字段本身就足够并接受请求。通常情况下,原因寄存器的中断字段也是按位与状态寄存器的中断字段进行AND运算。结果位一起被OR运算,值与
状态
寄存器的IE(中断主启用)位进行and运算,将导致中断