zoukankan      html  css  js  c++  java
  • 汇编编程

    一个源程序从写入到执行的过程

    共分为三部:

    1. 编写源程序
    2. 编译连接,编译后生成的可执行文件分为两部分:
      • 程序和数据
      • 相关的描述信息(提供给操作系统的)
    3. 执行
      在操作系统中,执行可执行文件时。操作系统将按照可执行文件中的描述信息,将可执行文件中的机器码和数据加载进入内存,并进行相应的初始化。

    源程序

    assume cs:codesg
    codesg segment
        mov ax,0123H
        mov bx,0456H
        add ax,bx
        add ax,ax
    codesg ends
    end

    该段源程序分为三部分

    1. 伪指令
    2. 程序(汇编指令)
    3. 标号

    伪指令没有对应的机器码(不是汇编指令)。被编译器来执行。
    比如segmentends就是一对成对使用的伪指令,这是编写被编译器编译的汇编程序必须要使用的一对伪指令。segment和ends的功能就是声明一个段。segment说明一个段的开始,而ends则说明一个段的结束。一个段必须有一个名称来标识(标号)
    一个汇编程序就是有多个段来组成的,分别用来存放数据和代码。一个源程序将计算机所要处理的信息按类别划分待不同的段中。
    end指令指示整个程序的结束。编译器如果碰到了伪指令end,就会结束对源程序的编译。
    assume假设某一段寄存器与程序中的某一个段相关联。在需要时编译程序可以将段寄存器和某一个具体的段相关联。
    汇编源程序中的标号代表了一个地址,比如codesg作为一个段的名称。在他最终被编译以后,连接程序将其处理为一个段的段地址。
    UTOOLS1560169840527.png
    好像可以这样认为,一个汇编程序就是有程序段和数据段组成。

    程序的返回

    以DOS(单任务操作系统)为基础讨论。
    程序P1将可执行文件P2装入内存,并将cpu控制权交给P2。P2开始运行,P1暂停。
    P2运行结束,将cpu控制权交还给使他运行的程序P1,之后P1继续运行。
    其中,这个交还cpu控制权的过程,称为程序返回。
    其中,

    mov ax,4c00H
    int 21H

    实现程序返回的功能。
    UTOOLS1560169885399.png

    语法错误和逻辑错误

    语法错误就是一般可以在编译期间发现的错误
    而逻辑错误通常要在程序运行中才能够发现。
    其中,逻辑错误要比语法错误能以解决。

    谁将可执行文件中的程序装在如内存并使他运行

    对于DOS环境,也就是是command.exe(系统shell)。
    任何通用操作系统都会提供一个shell(壳)程序,这是用户和系统进行交互的接口(方式之一)。

    debug为什么能实现程序执行的跟踪

    这是因为和shell执行可执行文件不同,debug并不会完全放弃对cpu的控制。
    UTOOLS1560169960996.png
    debug将可执行文件装入内存以后,cx中存放程序的长度(汇编指令的长度)
    UTOOLS1560169982794.png
    PSP占256个字节,观察图4.19可以发现ds和cs相差10H。这也可以从侧面证明这一点。
    PSP是DOS用来和程序进行通信的,之后才存放的是真正的程序。





  • 相关阅读:
    Postgresql HStore 插件试用小结
    postgres-xl 安装与部署 【异常处理】ERROR: could not open file (null)/STDIN_***_0 for write, No such file or directory
    GPDB 5.x PSQL Quick Reference
    postgresql 数据库schema 复制
    hive 打印日志
    gp与 pg 查询进程
    jquery table 发送两次请求 解惑
    python 字符串拼接效率打脸帖
    postgresql 日期类型处理实践
    IBM Rational Rose软件下载以及全破解方法
  • 原文地址:https://www.cnblogs.com/freesfu/p/11000012.html
Copyright © 2011-2022 走看看