现在的位置: 首页 > 综合 > 正文

Assemble(王爽)——nasm 和 masm的一些简单区分

2013年05月18日 ⁄ 综合 ⁄ 共 746字 ⁄ 字号 评论关闭

    最近在学习汇编语言,王爽的那本书。他用的汇编编译器是masm;而用选择的nasm;所以最近用了下,对两者区别有点体会,记录下。

    首先,why nasm?我选择nasm,最重要的一个原因是它开源:我现在一般选择的软件,都是开源免费的,不再用盗版的、不正规的软件了。这是我的一个起誓。我努力去守誓!另外,就是跟masn比较相似,有利于我学习这本书。

    汇编语言分为汇编指令,伪指令、标号(这是书上说的)。现在的体会来说,主要是汇编 “伪指令”区别比较大,其他的暂时还没发现区别。

    1、段(代码段、数据段、堆栈段)指定。

         学过汇编的人,都知道这3个段。在我们编码的时候,也会在不同的段进行编码。现在看来,数据段,就像高级语言中的变量声明一样(vc的对c语言编译,要求变量都写在最前端,是不是这个原因?)。

         在masm中                                        在nasm中

      assume ds:data                                   section .data

      data segment                                               str: 'hello world!‘

             db 'hello word',10 ;

       data ends;

    明显的,masm中段需要跟对应的段寄存器想对应(用伪指令assume)。然后,指定一个段的别名,然后就是短内容。        在nasm中,段是没有别名,也没指定结束(masm中的ends)。但是,变量会指定别名:str。

     另外,在nasm中,除了cs,其他的段寄存器是还要指定内容的,比如,这里ds就需要赋值,赋值内容就是data,即该段的别名——其实就是一个地址。在nasm中,似乎会自动的指定这些内容。(看起来是,没有理论支持)


抱歉!评论已关闭.