汇编笔记---第一个程序

上一课讲了栈,现在开始写第一个程序吧。

assume cs:test

test segment

   start:mov ax, 2

           add ax,ax

           add ax,ax

           mov ax,4c00h

           int 21h

test ends

end start

 

assume 是伪指令,用来和代码段建立一个连接,这个指令由编译器执行。cs:test  cs是指向代码寄存器段地址,所以 assume cs:test 的意思就是连接test段,用来执行代码

segment  是段的意思,程序都是由一小段一小段代码组成的,因此,test是段名称,segment指示一个代码段。

与segment 配套使用的是 ends   表示一个段的结束。那和assume配对使用的是end.表示一个程序结束。

start:表示这个代码段里从这里开始执行。所以 end start表示执行完成。

通常,我们一个涵数或程序都有返回的,如没有返回,那这个程序也许没有意义或cpu不知在哪里返回,就结束不了的。所以

mov ax,4c00h

int 21h

就是返回代码,具体原因以后再讲,只要记住返回就是这个代码。

程序写完了,需要编译,然后才能执行。汇编程序也需要经过编译--》连接-->生成exe

编译器通常使用微软件的masm    连接器link.exe 具体方法可参考网上,我不说明了。或直接用一个汇编工具来编写代码。

 

再讲讲用dos 来加载汇编程序,在dos命下运行到debug,然后加载汇编生成的exe程序,加载后,在cpu寄存器cs:ip指向的地方就是程序的开始地址,但有一点要记住,dos系统会在cs:ip的内存地方增加256个字节的psp区域,用来与系统通信,具体不需要了解,这是系统原因,我们只讲汇编,而汇编编写就需要用到系统,而系统又是一个复杂的结构,所以,我们不希望被系统结构问题转移了视线。回到刚才, 那么程序真正运行的地址应该是cs:ip目前的地址+256个内存单元地址才是程序地址,也就需要先换算出psp的物理地址,再+256才到程序的物理地址。

 

 

posted @ 2010-07-08 09:23  你的影子  阅读(143)  评论(0编辑  收藏  举报