汇编程序的编写
一个完整的汇编程序一点一点的来介绍会感觉比较麻烦,我们直接从一个完整的Hello world程序来看
1 | assume cs:code,ds:data |
这里我们主要理解该程序的结构,明白如何书写,如何从文件到运行。
- 程序开头我们使用了assume,将我们的寄存器和代码关联起来,一个程序要分为数据段,代码段时我们就可以使用assume,assume
cs:code,ds:data表示将code代码段与cs寄存器关联起来,data段与ds寄存器关联起来,(本质是将段的起始地址放入对应寄存器中) - 中间可以出现多个segment,表示一个段的标识,这里只有数据段和代码段两个,希望将数据和代码区分时,可以将数据单独拿出来做一个数据段。每一个ends表示一个段的结束,(与end区别)
- data,code是标号,表示一个地址,可以理解为一个段的名字。
- Start:表示代码段的起始,本质是将当前地址赋给cs,因为cs:ip指向需要执行的语句。不申明的话指向程序起始地址(hello
world),但是该语句是数据,不能执行,因此需要使用start申明。代码段结束使用end start
如何从代码到执行
汇编的源码放在一个.asm文件中,第一步编译为obj文件,然后在将obj文件连接起来得到exe文件,最后由操作系统运行exe
文本文件(.asm)—-> .obj文件 —> .exe —> 结果
在DOSBox中:
1 | masm 1.asm |