zuoside__lord
跃I.0
采纳率52.2%
2018-05-11 13:54

汇编语言是不是一点儿移植性都没有

5

代码就不贴了,被这个绕晕了都,同一个电脑,同样都是masm形式汇编 不同编译器而已,编译结果就不一样?一个编译器可以编译成功,一个报错,求告知,它就一点儿都不具备移植性么,连编译器都要一样么 ,这两个编译器 一个叫masm for windows 集成实验环境2012,一个叫masm32 sdk ,,

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

5条回答

  • caozhy 回答这么多问题就耍赖把我的积分一笔勾销了 3年前

    不知道你怎么个不同的编译器,tasm和masm肯定是不兼容的,虽然都是x86的汇编器,但是AT&T和INTEL的语法根本不同。
    还有就是你使用了宏和外部的库,这些在另一个汇编器上没找到,所以不行。
    大体上说,x86的汇编,用masm 6.15就好了,就这个工具都是20年前的了,微软也没有更新过。

    至于编译出来的程序,如果用到基本的x86指令,那么现在的处理器都可以跑。即便不是x86的处理器,比如平板电脑或者手机,也可以用bochs, dosbox跑,因为cpu指令不同,需要一个翻译,效率低一些。

    点赞 2 评论 复制链接分享
  • qq_36583286 qq_36583286 3年前

    兄弟,你理解错了,首先你要明白,汇编语言是一种针对具体机器的低级语言,这里说的不同机器一般来讲是指CPU指令系统不相兼容的两种机器,比如常用的8086与51,DSP,ARM,等等,他们的指令系统都不是通用的。自然移植到别的机器上不行, 举个例子来说吧,假如51,的P0端口可以用来点亮一盏灯,但是对8086或者其他单片机就不一定了,有可能是P1或者其他口了 你所写的汇编语言是针对8086CPU的,每台机子上的8086核心都是一样的,所以都能够运行,要是你拿到51等其他片子就肯定不行了 还要说的是,8086的CPU是8位的,然而真实的PC机是32位或64位的,所以你都要用编译软件来编译运行,并且计算机内有虚拟的8086内核,所以你才能运行 不行你将写好的程序,在dos下直接debug, 是肯定会出错的 说了这么多不知道你明白了没有??

    点赞 评论 复制链接分享
  • qq812239513 qq812239513 3年前

    好吧首先是它们两个各自用了不同版本的汇编变编译器,移植性不存在的(只是不同平台和比如windows 和Linux)如果单纯是在windows下面使用你只要使用比较低版本的指令集(.386)应该都会兼任不同的电脑,你的程序会报错估计应该也是编译参数出错,或者不同版本的编译器。其实微软有更新masm。只不过它没有被单独发行(在Visual Studio 2010中的ml.exe)。只要你愿意你甚至是可以下载windows sdk 然后手动翻译头文件去开发windows 汇编应用(附上当年用过的神器http://www.easycode.cat/通过设置可以改成中文)。最后虽然汇编也许显得非常老旧,但是却无处不在。为以后的高级语言做铺垫(也许这是了解计算机工作原理内部最好的方法)。

    点赞 评论 复制链接分享
  • liliang0849 liliang0849 3年前

    汇编的问题是,就算都是x86,每个平台上连他妈的语法都不一样

    点赞 2 评论 复制链接分享
  • lili2425960 科学财子 3年前

    有一定的移植性,如果两个硬件结构和资源一致,就可以运行,如果稍有差别就不行了。汇编语言更接近硬件,他的许多功能是依靠硬件的资源的,有这个资源就可以运行,没有就运行不聊了

    点赞 评论 复制链接分享

为你推荐