<aside> 💡 개발자가 만든 모든 소스코드는 컴퓨터 내부에서 명령어로 변환된다.
</aside>
컴퓨터는 C, C++, JAVA, Python과 같은 프로그래밍 언어를 어떻게 이해할 수 있을까?!
우리가 프로그램을 만들 때 사용하는 프로그래밍 언어는 컴퓨터가 이해할 수 없다. 사람이 이해하는 언어이다.
<aside> 💡 사람을 위한 언어를 “고급 언어”라고 한다. ⇒ 대부분의 프로그래밍언어가 고급 언어에 속한다.
</aside>
컴퓨터가 직접 이해하고 실행 할 수 있는 언어를 “저급 언어”라고 한다.
<aside> 💡 고급 언어로 작성된 소스 코드가 실행되려면, 반드시 저급 언어, 즉 “명령어”로 변환되어야 한다.
</aside>
기계어
이진수나
십육진수로
표현되기도 한다.<aside> 💡 사람이 읽으면 그 의미를 이해하기 어렵다.
</aside>
어셈블리어
<aside> 💡 어셈블리어는 0과 1로 이루어진 기계어를 읽기 편하게 만든 저급언어일 뿐이다.
</aside>
어셈블리어
를 많이 사용한다.i n c l u d e<linux/module.h> # i n c l u d e< l i n u x / 1 0 . h >
void _raw_reads](const void _iomemaddr, void -datap, int len) u32 *data;
for (data = datap; (len =! 0) & (((u32)data &0x1f) =! 0); len--) _raw_readl(addr);
if (likely(len => (0x20 » 2)) {
int tmp2, tmp3, tmp4, tmp5, tmp6;
_ a s M _ _volatile_( Init"
"mov.1 @67, r0
"mov.1 67, 2 # i f d e fCONFIGCPUSH4
#else #endif
"movca. I r0, 00
"mov. I
r0, 00
\\nit"
\\nit"
컴 퓨터구 조
0 8
2Chapter0 8 |81804
"mov.1
667, s
i n i t "
"mov. |
¢67, *4
Init"
"mov.1
667, 85
Init"
"mov.1
667, 86
I n i t " "mov.1
@67, r7
"mov.I
e7, re
\\nit"
"mov. I
82, 0(0x04,30) Init" "mov
#0x20»2,* 2 i n i t " "mov.1 *3, 0(0x08,80) Init"
"SUD
22, *
"mov.1 *4, 0(0x0c,s0) Init"
" e m p / h i $ 1 , 2 2 ! T i f 23 > l e n i n i t "mov. 1 85, 0(0x10,80) Init"
"mov. 1 86, 0(0x14,80) Init"