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

对于c语言中的赋值语句,如i=j+k;还有条件语句:if……then……;循环语句for(……)等,用汇编语言怎么对应实现?给出一个实现的思路或框架。... 对于c语言中的赋值语句,如i=j+k;还有条件语句:if……then……;循环语句for(……)等,用汇编语言怎么对应实现?给出一个实现的思路或框架。 展开
 我来答
若以下回答无法解决问题,邀请你更新回答
GTA小鸡
高粉答主

2017-03-08 · 醉心答题,欢迎关注
知道大有可为答主
回答量:2.6万
采纳率:78%
帮助的人:1.3亿
展开全部
高级语言编译成低级语言是一个很复杂的过程。高级语言里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等选择语句也是同理,只不过它们是在循环结束时跳转到标签标注的循环起点处,而不是跳转到后面的某条语句,以此实现循环。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式