程序是通过编写代码来实现的,就如同写文章。
可以认为程序就是数据,数据也是程序。什么时候是程序,什么时候是数据,要通过代码中的设计来实现的。
代码可以在编辑器中写,存放也是从左到右,从上到下。保存后叫源代码。需要编译。还可以在解释器里编写,不需编译。
编译是把文本代码转换成二进制代码的过程。转换后才能在电脑上执行。
写代码的第一步,了解程序模式 扁平模式是32位的主要模式,MASM语法表示
.MODEL flat, stdcall
就是所有存储器程序数据作为一个段。早期由于物理技术水平限制,分了4个段。名字为CS,DS,SS,ES.
实现方法就是 CS,DS,SS,ES都指向一个位置。同时增加了两个段寄存器FS,GS。
为了更清楚在什么机器上执行,可以指明运行cpu类型,MASM语法
.686P
这里指明的只是一种。
写代码的第二步,了解程序入口和数据入口
程序和数据放在一起,如何区分和操作是通过寄存器来实现的。寄存器包括通用寄存器有八个
EAX.EBX,ECX,EDX,ESI,EDI,ESP,EBP。标志寄存器EFR和指令位置寄存器EIP。最主要的要记住这些约定:
EAX为累加器,ECX为计数器,EBX,EBP为基址寄存器,ESI,EDI为变址寄存器,EBP还可以是基址指针,ESP 为堆栈指针。
段寄存器CS+EIP是程序入口,DS+通用寄存器任何就是数据入口。MASM语法抽象为表示
.data
数据入口
.code
程序入口
写代码的第三步,了解程序终止。
程序需要有一些初始数据,如堆栈
.STACK 4096
程序不是无休无止的,必须有一个范围,和停止标志,需要一些初始数据设置。
main:
invoke ExitProcess,0
end main
ExitProcess,0 是winAPI函数,还需在代码中给编译器指明
ExitProcess PROTO, :DWORD
并要放在前面。
这样,就构成一个简单什么都不做的MASM程序。整理为:
.686P
.MODEL flas,stdcall
.STACK 4096
ExitProcess PROTO,:DWORD
.data
.code
main:
invoke ExitProcess,0
end main
C语言表现就更为简单,如下面.模式都由系统自动完成了。
#include<stdio.h>
void main(){
}