zoukankan      html  css  js  c++  java
  • 第四章总结

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

    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所需的地址等有用的信息。

  • 相关阅读:
    P1909 买铅笔
    树形结构
    图片
    cookie
    JSON
    操作数组
    竖线分割|
    订单提交中... 后前面三点动画
    w'w
    解决扫码枪输入input时受中文输入法的影响
  • 原文地址:https://www.cnblogs.com/asm085/p/9909253.html
Copyright © 2011-2022 走看看