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用来和程序进行通信的,之后才存放的是真正的程序。





  • 相关阅读:
    iOS “请在微信客户端打开链接” UIWebview加载H5页面携带session、cookie、User-Agent信息 设置cookie、清除cookie、设置User-Agent
    iOS AR技术初体验,使用EasyAR示例程序的小白指南
    导入GPUImage,实时滤镜相机,GUPImage遇到的问题解决,_OBJC_METACLASS_$_GBGPUImageView in GBGPUImageView.o
    iOS 除去图片的白色背景(接近白色),或者其它颜色的替换,获取像素点的ARGB值
    用const取代宏定义更好的管理内存
    一些字体设计的练习
    Appium 解决锁屏截屏问题(java篇)
    解决Appium无元素可选的如何定位(java篇)
    解决Appium 抓取toast(java篇)
    Appium 解决手势密码 (java篇)
  • 原文地址:https://www.cnblogs.com/freesfu/p/11000012.html
Copyright © 2011-2022 走看看