最近在学习汇编语言,王爽的那本书。他用的汇编编译器是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中,似乎会自动的指定这些内容。(看起来是,没有理论支持)