汇编语言的编程方式和c语言编程方式有什么异同?

2024-12-02 22:16:02
推荐回答(1个)
回答1:

高级语言编译成低级语言是一个很复杂的过程。高级语言里i=j+k;一句简单的赋值到了汇编语言,可能因编译配置、平台、函数属性的不同而生成完全不同的代码。在汇编语言里是没有任何可见的变量的,所有的变量都被转化为对应的地址值。
例如有语句:
int i,j,k;
....
i=j+k;
则在32位机的汇编语言中可能表示为:
MOV EAX, DWORD PTR[ESP+0x0C] ;语句1
MOV EBX, DWORD PTR[ESP+0x08] ;语句2
ADD EAX,EBX ;语句3
MOV DWORD PTR[ESP+0x04] ;语句4
语句1表示将ESP+0x0C所指向的地址开始的4字节内容(即变量k)复制到EAX寄存器
语句2表示将ESP+0x08所指向的地址开始的4字节内容(即变量j)复制到EBX寄存器
语句3表示计算EAX和EBX寄存器之和,结果回存到EAX寄存器
语句4表示将EAX寄存器的值复制到ESP+0x04所指向的地址开始的4字节空间内(即变量i处)
if...else的选择语句一般是通过JG/JNG、JL/JNL、JE/JNE等带条件的跳转指令实现的,它们会比较标志寄存器上对应标志位的值来判断是否跳转。while、for等选择语句也是同理,只不过它们是在循环结束时跳转到标签标注的循环起点处,而不是跳转到后面的某条语句,以此实现循环。