zoukankan      html  css  js  c++  java
  • 汇编语言学习——第四章 第一个汇编程序

    1、一个汇编语言程序从写出到最终执行的简要过程:

    编写--> 编译,链接 --> 执行

    2、编译,链接

    使用汇编语言编译程序(MASM.EXE)对源程序文件中的源程序进行编译,产生目标文件;

    再用连接程序(LINK.EXE)对目标文件进行连接,生成可在操作系统中直接运行的可执行文件。

    3、可执行文件

    可执行文件中包含两部分内容:
    程序(从原程序中的汇编指令翻译过来的机器码)和数据(源程序中定义的数据)
    相关的描述信息(比如:程序有多大、要占多少内存空间等)

     

    4、一个简单的源程序

    assume cs:codesg

    codesg segment

    start:

           MOV AX, 0123H

           MOV BX, 0456H

          ADD AX, BX,

          ADD AX, AX

    // 程序返回

    MOV  AX, 4C00H

    INT 21H

    codesg ends

    end start

     

    5、指令

    1)汇编指令有对应的机器码的指令,可以被编译为机器指令,最终为CPU所执行。

    2)伪指令。没有对应的机器码的指令,最终不被CPU所执行。

    伪指令是由编译器来执行的指令,编译器根据伪指令来进行相关的编译工作。

     

    6、定义一个段

     segment和ends是一对成对使用的伪指令,这是在写可被编译器编译的汇编程序时,必须要用到的一对伪指令。

     segment和ends的功能是定义一个段,segment说明一个段开始,ends 说明一个段结束。

    一个段必须有一个名称来标识,使用格式为:

    段名 segment

    段名 ends

     

    7、End。

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

    如果程序写完了,要在结尾处加上伪指令end 。否则,编译器在编译程序时,无法知道程序在何处结束。

    8、程序返回
    应该在程序的末尾添加返回的程序段。
        mov ax,4c00H
        int 21H
    这两条指令所实现的功能就是程序返回。

    9、编译和链接的作用

    连接的作用有以下几个:
    1)当源程序很大时,可以将它分为多个源程序文件来编译,

    每个源程序编译成为目标文件后,再用连接程序将它们连接到一起,生成一个可执行文件;

    2)程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,生成一个可执行文件;
    3)一个源程序编译后,得到了存有机器码的目标文件,

    目标文件中的有些内容还不能直接用来生成可执行文件,连接程序将这此内容处理为最终的可执行信息。

    所以,在只有一个源程序文件,而又不需要调用某个库中的子程序的情况下,也必须用连接程序对目标文件进行处理,生成可执行文件。

    注意,对于连接的过程,可执行文件是我们要得到的最终结果。

     

    10、程序的执行

    程序最先以汇编指令的形式存在源程序中,经编译、连接后转变为机器码,存储在可执行文件中。

    一个程序的执行必须由一个正在执行的程序对其进行调用。

    在DOS中,可执行文件中的程序P1若要运行,必须有一个正在运行的程序P2 ,

    将 P1 从可执行文件中加载入内存,将CPU的控制权交给它,P1才能得以运行;

    当P1运行完毕后,应该将CPU的控制权交还给使它得以运行的程序P2。

     

    汇编程序从写出到执行的过程

    编程->1.asm->编译(masm) ->1.obj ->链接(link) ->加载->内存中的程序->CPU运行

    11、程序执行过程的跟踪   debug 1.exe

    程序加载后,ds中存放着程序所在内存区的段地址,这个内存区的偏移地址为 0 ,则程序所在的内存区的地址为:ds:0;

    这个内存区的前256 个字节中存放的是PSP,dos用来和程序进行通信。

    从 256字节处向后的空间存放的是程序。

     
    所以,我们从ds中可以得到PSP的段地址SA,PSP的偏移地址为 0,则物理地址为SA×16+0。

    因为PSP占256(100H)字节,所以程序的物理地址是:
       SA×16+0+256= SA×16+16×16=(SA+16)×16+0
    可用段地址和偏移地址表示为:SA+10:0。

    到了 int 21,我们要用P命令执行:

    int 21 执行后,显示“Program terminated normally”,返回到Debug中。

    表示程序正常结束。

    注意,要使用P命令执行int 21。

    个人总结: 这一章通过编写第一个源程序,认识源程序从编写到被执行的过程。

  • 相关阅读:
    关于线程池,那些你还不知道的事
    Java发送邮件
    原来实现项目多环境打包部署是如此的简单
    史上最全的maven的pom.xml文件详解
    Linux系统基础知识整理(一)
    计算机启动过程的简单介绍 计算机启动流程 计算机BIOS作用 POST 开机自检 计算机启动顺序 分区表 操作系统启动
    交换机工作原理、MAC地址表、路由器工作原理详解
    $(function(){})和$(document).ready(function(){}) 的区别
    关于RAM与ROM的区别与理解
    CDN的作用与基本过程
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3263049.html
Copyright © 2011-2022 走看看