• 汇编语言——汇编程序从写出到最终执行的过程


    一个汇编语言程序从写出到最终执行的简要过程:
    编写--〉编译--〉连接--〉执行

    1、编写

    notepad++选择Assembly编写程序,保存成xx.asm,样式如下

    assume cs:abc    ; abc被我们当做代码段来使用,so要把它和cs联系起来
    abc segment        ; 定义一个段(abc),到ends结束
    start:    mov ax,2    ; 给程序一个起始位置,从这开始到段结束的位置才是汇编指令,其他的都是伪指令(给编译器看的)
            add ax,ax    ; 在这个代码段写入汇编指令(这个段就是我们定义的代码段)
            add ax,ax
            mov ax,4c00H    ; 这两句汇编指令就是程序返回
            int 21H        ; 我们暂时不需要知道这两句话为啥是这样的,只要知道它的作用是程序返回(将CPU的控制权还给使它能运行的程序)
    abc ends    ; 代码段结束 
    end    start    ; 指出程序结束的位置

    2、编译

    程序经过编译后成为可执行文件

    编译方法

    进入DOS方式(cmd),进入 C:masm 目录,运行masm.exe。
    如果源程序文件不是以 asm 为扩展名的话,就要输入它的全名。比如p1.txt。
    在输入源程序文件名的时候一定要指明它所在的路径。如果文件就在当前路径下,只输入文件名就可以。
    输入要编译的源文件文件名后,按 Enter键。
    目标文件(*.obj)是我们对一个源程序进行编译要得到的最终结果。
    编译程序默认要输出的目标文件名为1.obj,所以可以不必再另行指定文件名。

    3、连接

    我们刚刚把文件编译成了(*.obj)的格式,现在要将.obj格式 --> .exe格式

    连接方法

    进入DOS方式,进入C:masm目录,运行link.exe。
    如果目标文件不是以obj为扩展名的话,就要输入它的全名。比如:p1.bin。
    在输入目标文件名的时候,要注意指明它所在的路径。这里,我们要连接的文件是当前路径下1.obj,所以此处输入“1”。
    输入要连接的目标文件名后,按Enter键。
    可执行文件是我们对一个程序进行连接要得到的最终结果。
    连接程序默认要输出的可执行文件名为 1.EXE ,所以可以不必再另行指定文件名。
    我们直接按 Enter 键,使用连接程序设定的可执行文件名。

    连接的作用

    连接的作用有以下几个:
    当源程序很大时,可以将它分为多个源程序文件来编译,每个源程序编译成为目标文件后,再用连接程序将它们连接到一起,生成一个可执行文件;
    程序中调用了某个库文件中的子程序,需要将这个库文件和该程序生成的目标文件连接到一起,生成一个可执行文件;
    一个源程序编译后,得到了存有机器码的目标文件,目标文件中的有些内容还不能直接用来生成可执行文件,连接程序将这此内容处理为最终的可执行信息。
    所以,在只有一个源程序文件,而又不需要调用某个库中的子程序的情况下,也必须用连接程序对目标文件进行处理,生成可执行文件。

    4、执行

    直接在目录下执行1.exe

    EXE文件中的程序的加载过程

    程序真正开始的位置是SA:100H位置,那256(100H)个内存单元是存放PSP的。

    PSP的作用:连接程序与系统的接口。

    程序加载后,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。

  • 相关阅读:
    SQLite在iOS开发中的使用
    实现序列化和反序列化
    NSPredicate用于对集合类中的元素进行筛选
    通知中心NSNotification与委托的异同,需要注意的要点
    OC 重写description,isEqual方法
    iOs 单例模式的定义,实现、步骤
    Obejctiv-c 里面KVC 和 KVO的实现步骤,和有关方法
    关于NSTimer的几种构建方式
    NSTimer 实现到一个指定时间(年、月、日)的倒计时
    关于UILable、UIButton、UITextField简单运用
  • 原文地址:https://www.cnblogs.com/x54256/p/8087099.html
Copyright © 2020-2023  润新知