NJU PA debug记录

之前总结过如何找到有问题的指令

  1. si 100 /1000,二分法迅速找到存在问题的指令范围
  2. 搞懂汇编逻辑
  3. 确定有问题的指令

但是仍然遇到困难,特别是汇编代码量大的时候。
之后添加了itrace(指令追踪)和diffTest(差别测试)功能,能快速定位问题指令,知道执行指令的期望结果。

debug经历:
测试程序mul-longlong.c,指令mulh输出错误
mulh a5 a5 a9 ;a5<-a5*a9
执行前:
a5 0xaeb1c2aa
s9 0xaeb1c2aa
执行后
a5 0x7736200d
但是期望输出是 0x19D29AB9
通过一系列类型转换测试,才发现问题

// (unsigned int)(((long long)src1 * (long long)) src2 >> 32) error

// (long long)(((long long)src1 * (long long)src2) >> 32) still error


// (long long)(((long long)((signed int) src1) * (long long)((signed int) src2)) >> 32) right

原因:
src1类型是unsigned int,转换为long long(默认是signed)出现问题
需要先把src1转换为unsigned int, 再转换为long long

posted @ 2025-02-13 09:40  joki-sr  阅读(21)  评论(0)    收藏  举报