好问题。每个新的C或C ++开发人员都牢记这一点。在本文的其余部分,我假设使用标准的x86机器。如果您使用的是Microsoft C ++编译器,请打开记事本并键入(将文件命名为Test.c)。
int main(int argc, char **argv)
{
return 0
}
然后编译该文件(使用开发人员命令提示符)cl Test.c /FaTest.asm
现在,在记事本中打开Test.asm。您所看到的是已翻译的代码-C / C ++已被翻译为汇编器。你有提示吗?
_main PROC
push ebp
mov ebp, esp
xor eax, eax
pop ebp
ret 0
_main ENDP
C / C ++程序旨在在金属上运行。这意味着他们可以访问较低级别的硬件,从而更容易利用硬件的功能。说,我要在x86机器上编写C库getch()。
根据汇编程序,我将以这种方式键入一些内容:
_getch proc
xor AH, AH
int 16h
;AL contains the keycode (AX is already there - so just return)
ret
我用汇编器运行它并生成一个.OBJ-将其命名为getch.obj。
然后,我编写一个C程序(我不包含任何内容)
extern char getch();
void main(int, char **)
{
getch();
}
现在命名该文件-GetChTest.c。一起传递getch.obj来编译此文件。(或单独编译为.obj和LINK GetChTest.Obj和getch.Obj一起生成GetChTest.exe)。
运行GetChTest.exe,您会发现它正在等待键盘输入。
C / C ++编程不仅与语言有关。要成为一名优秀的C / C ++程序员,您需要对所运行机器的类型有充分的了解。您将需要知道内存管理的处理方式,寄存器的结构等。您可能不需要所有这些信息即可进行常规编程-但它们会极大地帮助您。除了基本的硬件知识之外,如果您了解编译器的工作原理(即编译器的工作方式),也肯定会有所帮助-这可以使您根据需要调整代码。这是一个有趣的包!
两种语言都支持__asm关键字,这意味着您也可以混合使用汇编语言代码。学习C和C ++将使您总体上成为一个更全面的程序员。
不必始终与汇编程序链接。我之所以提到它,是因为我认为这可以帮助您更好地理解。通常,大多数此类库调用都使用操作系统提供的系统调用/ API(操作系统依次进行硬件交互)。