teq如何在mips中工作

时间:2015-05-02 06:48:54

标签: c++ mips

我编译了这段代码:

int main()
{
    int x;
    try
    {
        x=2/0;
    }
    catch (...)
    {
        x=1;
    }
    return 0;
}

到mips,这就是我得到的:

.file   1 "main.cpp"
.section .mdebug.abi32
.previous
.nan    legacy
.gnu_attribute 4, 1
.abicalls
.option pic0
.text
.align  2
.globl  main
.cfi_sections .eh_frame_entry
$LFB6 = .
.cfi_startproc
.set    nomips16
.set    nomicromips
.ent    main
.type   main, @function
main:
.frame  $fp,24,$31      # vars= 8, regs= 1/0, args= 0, gp= 8
.mask   0x40000000,-4
.fmask  0x00000000,0
.set    noreorder
.set    nomacro
addiu   $sp,$sp,-24
.cfi_def_cfa_offset 24
sw  $fp,20($sp)
.cfi_offset 30, -4
move    $fp,$sp
.cfi_def_cfa_register 30
li  $2,2            # 0x2
move    $3,$0
teq $3,$0,7
div $0,$2,$3
mfhi    $2
mflo    $2
sw  $2,8($fp)
move    $2,$0
.cfi_epilogue_begin
move    $sp,$fp
.cfi_def_cfa_register 29
lw  $fp,20($sp)
addiu   $sp,$sp,24
.cfi_restore 30
.cfi_def_cfa_offset 0
j   $31
nop

.set    macro
.set    reorder
.end    main
.cfi_endproc
$LFE6:
.size   main, .-main
.ident  "GCC: (Sourcery CodeBench Lite 2014.11-22) 4.9.1"

我想特别询问指令teq,我知道这意味着“陷阱如果相等”,所以当被除数为零时它会陷阱(这里它为零)。

我不明白陷阱后会发生什么,我的意思是这个汇编文件中的catch块在哪里?在搜索网络时,我看到了不同的东西,如协处理器0,异常代码寄存器等等。

那么这里发生了什么?

0 个答案:

没有答案