linux汇编和windows,为什么Windows,Linux等汇编语言之间存在差异?

存在一些用于各种平台的汇编程序,在给定源文件的情况下,将直接生成输出二进制文件被加载到特定地址 . 这种组装器已经广泛用于一些小型微控制器,或者用于6502和Z80等历史处理器 . 在组装程序时,有必要知道预期驻留的地址;使用不同的地址需要重新组装程序 . 另一方面,在这样的系统中组装是一步过程 . 在源代码上运行汇编程序并获取可执行输出 . 在某些情况下,可以将源代码,汇编器和输出一次全部存储在内存中(在我的Commodore 64上,我使用的汇编程序发布在Compute的Gazette杂志中,就像那样工作) .

尽管重新组装所有内容的地址更改可能对于“接管机器”的程序是实用的,但在许多情况下,最好使用多步骤过程,其中源文件被处理为目标代码文件,其中包含汇编指令,但也包含各种关于它们的“象征性”信息;然后以各种方式处理这些文件,以便产生可以直接加载到内存中的内存映像,或者是一个组合的可重定位目标文件,操作系统的加载器将知道如何调整它可能加载到的任何地址 .

为了使对象链接系统有用,它必须允许延迟某些类型的地址计算,直到链接或加载程序 . 一些系统仅允许在链路/加载时执行极其简单的计算,而其他系统允许更复杂的计算 . 当它们可行时,更简单的方案可能更有效,但它们的局限性可能会迫使解决方法 . 例如,将使用BX循环小于256字节的数据结构的例程可能被写为:

mov bx,StartAddr

lp:mov al,[bx] ...做一些计算inc bx cmp bl,

可以使用 cmp bx,(StartAddr+Length) ,但如果编译工具可以支持它,那么仅比较低字节会更快 . 另一方面,某些16位汇编/链接工具可能要求所有地址修复都使用存储在代码中的16位地址来完成 .

由于不同的系统允许其对象代码格式中的不同功能,因此它们需要在其汇编语言中使用不同的功能来控制它们 . 指令集可以由芯片制造商指定,但是用于表示可重新定位的地址计算的特征通常不是 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值