• 第四章总结


    这章我们主要讲如何写和编译一个汇编程序。

    1汇编程序组成

    一个汇编源程序由两种指令组成,一种是汇编指令,一种是伪指令。

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

    伪指令是没有对应的机器指令,最终不为CPU执行,而由编译器执行,编译器根据伪指令来进行相关的编译工作。

    下面结合书上的例子进行说明:

    assume cs:codesg       ;通过assume将用作代码段的codesg和CPU的段寄存器CS联系起来,assume的作用是把寄存器和具体的段联系起来

    codesg segment        ;定义一个段,其中codesg是端标识(名称)

      mov ax,0123H

      mov bx,0456H

      add ax,bx

      add ax,ax

      mov ax,4c00H        ;程序返回

      int 21H         ;程序返回

    codesg ends          ;结束这个段

    end              ;汇编程序结束的标记

    注意:1,区别ends和end的区别:end是汇编程序的结束,ends是段的结束标记

    2在源代码中除了汇编指令和伪指令,还有标号,如此例中的codesg,指代了一个地址,作为段的名称,这个名称最终被编译,连接程序处理为段的段地址。

    程序返回:将CPU的控制权交还给使得它得以运行的程序

    所用到的代码为:

      mov ax,4c00H

      int 21H

    语法错误:程序在编译时被编译器发现的错误是语法错误。

    逻辑错误则不能被编译器发现,因此更不容易被发现。

    2编译一个汇编程序

    在dos环境下使用masm工具编译。用法是

    masm 文件名[.asm]

    如果文件是以asm为拓展名,那么可以不加拓展名,否则一定要加拓展名。

    我们不妨忽略中间列表文件和交叉引用文件的生成,然后通过

    link 文件名.obj

    连接产生可执行文件。

    然后就可以直接输入可执行文件名执行了。

    注意:1如果我们在这两个命令结束的地方加上“;”那么就会以简化的方式生成文件。

     2我们也可以通过debug命令来调试这个程序,debug用法在前面的实验中已经提过,这里不多赘述。(单步调试到int 21h这条命令时,使用p命令调试)

    在DOS环境下,我们运行一个程序,就是其他程序将CPU的控制权交给这个程序,所以当这个程序执行完毕以后要将CPU的控制权交还给原程序。

    因此当调用一个程序开辟内存空间时,该区域前256个内存单元为PSP数据区,也就是ds指向的位置,而cs=ds+10H,也就是说从cs处才是程序的字节码。

    也就是书上说的:PSP区和程序区虽然物理地址连续,却有不同的段地址。 psp数据区(段前缀)是操作系统在执行程序时为程序所建立的一个信息块,里面包括了传递给待运行程序的命令行参数,   程序运行结束时返回DOS所需的地址等有用的信息。

  • 相关阅读:
    Root Android and Install Recovery linux shell script & Android root原理
    MPEG4 144962和H.264什么区别?
    Android root的两种方法 udev漏洞和setuid漏洞
    [转载]android三个特殊的资源目录 /res/xml /res/raw 和 /assets
    avast注册号|好用的avast注册号|没过期avast注册号
    忘记烦恼|如何忘记烦恼|忘记烦恼的方法
    第六感|最近又出现第六感了这个是什么问题呢
    移动手机为什么还有话费,就停机了,和客服的谈话
    .net保存中文到cookie时是乱码取出来的时候
    skype账号|超值skype账号|14分钟skype账号|1元40个|15天有效期
  • 原文地址:https://www.cnblogs.com/asm085/p/9909253.html
Copyright © 2020-2023  润新知