☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

汇编代码不应与普通代码混合

8.47 ID_mixedAsm
目录 › next › previous

汇编代码的格式由实现定义,不具备可移植性,且可读性较差,故不应与普通代码混合。

如果条件允许,应使用汇编语言实现独立的库,再由 C/C++ 代码调用。

示例:

int avg(int a, int b) {
    int sum;
    __asm {                // Non-compliant
        mov eax, a
        mov ebx, b
        lea eax, [eax + ebx]
        mov sum, eax
    }
    return sum / 2;        // Non-compliant
}

例中 avg 函数同时含有汇编代码和 C 代码是不符合要求的,至少应将汇编代码单独隔离成一个函数,如:

int add(int a, int b) {
    __asm {                // Compliant
        mov eax, a
        mov ebx, b
        lea eax, [eax + ebx]
    }
}

int avg(int a, int b) {
    int sum = add(a, b);   // Compliant
    return sum / 2;
}

依据

ISO/IEC 9899:1999 J.5.10-implementation ISO/IEC 9899:2011 J.5.10-implementation ISO/IEC 14882:2003 7.4(1)-implementation ISO/IEC 14882:2011 7.4(1)-implementation

参考

MISRA C 2004 2.1 MISRA C 2012 Dir 4.3 MISRA C++ 2008 7-4-3
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.