汇编语言-汇编程序初识

汇编语言-汇编程序初识

指令介绍:

mov ax,bx

mov ax,bx

将bx寄存器中的数据复制移动到ax中

add ax,bx

add ax,bx

执行ax+bx运算,将运算结果赋值给ax,即ax = ax+bx;

sub ax,bx

sub ax,bx

执行ax-bx运算,将运算结果赋值给ax,即ax = ax-bx

inc ax

inc ax

执行 ax+1 运算,将运算结果赋值给ax,即ax = ax+1 ;

jmp cs:ip

jmp 1000:0jmp 1000

第一种方式:设置cs(指令存放段地址)为1000,设置ip(指令存放地址偏移量)为0.
第二种方式:设置ip(指令存放地址偏移量)为1000.

push

push指令执行步骤:

  1. SP = SP-2
  2. 向SS:SP指向的字单元中送入数据

pop指令执行步骤:

  1. 从SS:SP指向的字单元中读取数据
  2. SP = SP+2

举例说明


//下面描述了向一个10000H~1000FH这段空间当作栈,进行了入栈出栈操作。

//初始化栈的段地址和地址偏移量
mov ax,1000
mov ss,ax
mov sp,0010

//设置数据
mov ax,001A
mov bx,001B

//入栈
push ax
push bx

//清零
sub ax,ax
sub bx,bx

//出栈
pop bx
pop ax

汇编程序

介绍完了指令,下面我们来介绍如何编写,编译,链接,运行一个汇编程序吧。

编写

打开文本编辑器,编写下面文字,存储为.asm类型的文件。之后,我们用test.asm文件举例。

assume cs:abe

abe segment

        mov ax,2H
        add ax,ax
        add ax,ax

        mov ax,4c00H
        int 21H

abe ends

end

知识点介绍:

  1. segment …ends

    segment ...ends为成对使用的定义段的伪指令。在编译的时候,被编译器翻译为一个段。这里面的段和我们之前提到的内存中的段是一个道理。segment表示段的开始,ends表示段的结束,一个汇编程序是由多个段组成的,这些段被用来存放代码,数据,堆栈来使用。

    abe为段的名字,我们叫它标号,一个标号代表一个地址。

  2. end

    end是一个汇编程序的结束标记,编辑器在编译汇编程序的过程中,如果碰到了伪指令end,就结束对汇编程序的编译,即编译结束。

  3. assume

    assume这条指令,假设某一段寄存器和程序中的某一个segment... ends定义的段相关联。通过assume说明这种关联,在需要的情况下可以将段寄存器和某一个具体的段相关联。

  4. 程序结束符号

    下面这两行代码表示结束程序。

mov ax,2c00H
int 21H

编译

我使用的是masm 5.0,来编译文件。编译,就是将我们之前编写的代码,编程机器可读的机器码。通过编译,我们将编辑文件,编译成了目标文件。(test.asm -> test.obj)

下面是运行图片:

这里写图片描述

链接

我使用的是overlay linker3.60,通过连接,我们将编译生成的目标文件连接成可执行文件。(test.obj -> test.exe)

下面是运行图片:

这里写图片描述

执行

输入下面命令行即可:

这里写图片描述

原文地址:https://www.cnblogs.com/AbeDay/p/5026852.html