从简单的程序学习汇编(一)加法程序

本教程将会通过一个一个例子来教会大家如何写汇编程序,今天就从最简单的加法程序开始。(本文只为了让读者能容易理解并自己写出程序,所以语言简化,并不具有专业性和权威性,具体解释请自己参考文献,同时也多包涵文中出现的学术性错误)

首先是本程序要实现的是两个数x,y相加,然后把结果,存到z里。
先给出程序 的源码:

datas segment
      x dw 1234h
      y dw 5678h
      z dw ?
datas ends
codes segment
    assume cs:codes,ds:datas
start:
    mov ax,datas
    mov ds,ax
    mov ax,x
    add ax,y
    mov z,ax
    mov ah,4ch
    int 21h
codes ends
    end start

我们来逐条分析一下这个程序。
datas segment一开始这一个预算是定义数据段的开始,这个datas是可以自己随便写的,但是为了方便理解我们就用数据的英语,这个segment是固定格式不能乱改。
在这条代码后面就开始我们的变量的定义,变量定义的格式是:

[变量名] [db,dw,dd] 表达式1,表达式2.....

变量名就类似于C语言的中int x=10;中的x,是编程人员自己定义的。第二参数相当于其中的int是定义数据类型的,db是定义字节,dw是定义字,dd是定义双字,这些都是表示这个变量的长度。表达式就是其中的10,就是传入参数,可以是二进制,八进制,十进制,十六进制。如果不确定的可以输入?。比如这个代码中的z dw ?就相当于C语言中的int z;最后把所以变量定义完了后,就要用datas ends来结束定义,注意这个datas必须和你定义数据段开头的段名一致。

然后就是定义代码段了,首先codes segment和上面一样,codes是可以自己定义的,但后面ends前面的一定要一样,然后assume cs:codes,ds:datas就是把代码段和数据段放进段寄存器中,这段代码的具体意思就是,把codes段放进CS这个寄存器里,吧datas段放进ds寄存器里,assume是固定格式,不能改变和删除。
这条代码写完后,就是开始我们正式的指令的书写,先写start:这就表示代码的开始。

    mov ds,ax

这个也是固定格式,是为了把数据取出来,其中datas就是数据段的段名。接下来的代码主要用的是mov指令,就是把后面的数据传输到前面的指令。在写完代码后要写

    mov ah,4ch
    int 21h

来结束程序,也是固定格式,不能改变。
结束程序后,用codes ends来结束代码段,最后在末尾填上end start一个完整的程序就写完了。写完后就可以编译和链接来生成exe文件,具体的方法可以参考这篇文章。

最后祝大家身体健康。

你可能感兴趣的:(从简单的程序学习汇编(一)加法程序)