• 第四章 第一个程序


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

    编写汇编源程序——对源程序进行编译连接——执行可执行文件中的程序。

    二、源程序

    eg:

    assume cs:codesg

    codesg segment

                mov ax,0123H

                mov bx,0456H

                add ax,bx

                add ax,ax

                mov ax,4c00H

                int 21H

    codesg ends

    end

    1、伪指令:没有对应的机器码的指令,最终不被CPU所执行。

    segmentends

    格式为:段名 segment

                   ............

                  段名 ends

    段名 segment和段名 ends之间的是这个段内存放的内容,是一个代码段。

    end

    是一个汇编程序的结束标记。

    注意:区别ends和end:

               ends和segment成对使用,标记一个段的结束,可以理解为“end segment”。

               end作用在于标记整个程序的结束。

    assume

    含义为“假设”。用assume将有特定用途的段和相关寄存器关联起来。

    eg:用codesg segment.......codesg ends定义的一个段内存放代码,所以是代码段。在程序的开头,用assume cs:codesg将用作代码段的段codesg和CPU中的段寄存器cs联系起来。

    2、源程序中的“程序”(略)

    3、标号

    如:codesg,一个标号指代了一个地址。作为一个段的名称,最终将被编译、连接程序处理为一个段的段地址。

    4、程序的结构

    定义一个段——在这个段内写入汇编指令——用end指出程序在哪里结束——用assume将段名和相应的段寄存器连接起来。

    5、程序返回

    在程序末尾添加返回的程序段:

    mov ax,4c00H

    int 21H

    与结束相关的概念

    目的 相关指令 指令性质 指令执行者
    通知编译器一个段结束 段名 ends 伪指令 编译时,由编译器执行
    通知编译器程序结束 end 伪指令 编译时,由编译器执行
    程序返回

    mov ax,4c00H

    int 21H

    汇编指令 执行时,由CPU执行

    6、语法错误和逻辑错误

    编译时被编译器发现的错误是语法错误。在运行时发生的是逻辑错误。

    语法错误易被发现,逻辑错误难被发现。

    三、编辑源程序+编译+连接+执行

    该过程一般生成3个不同类的文件:

     ①编译用,eg:随意编写一个程序,保存,注意保存方式为.asm

    ②编译:在DOS中实现

    如果文件在其他目录里,不在当前路径下,则要输入路径。

    ③连接

     

    ④执行

    使用debug ××.exe调试时,首次进入调试界面时,寄存器CX中存放的是可执行文件长度。

     用p或t指令跟踪执行。p命令执行int 21。q命令退出Debug返回到command中。

    以上是我习惯的用法,仅供参考。

  • 相关阅读:
    Android常用命令
    kafka原理和集群配置
    zookeeper原理和集群配置
    python中is和==的区别以及全字段取出key和value
    Android Monkey压力测试介绍
    有一串随机整数列,a1,a2,...an,求数字[0-9]分别出现的次数,比如:[12, 210, 33]输出{'0': 1, '1': 2, '2': 2, '3': 2},时间和空间复杂度
    接口自动化get请求方式的处理
    读excel和openpyxl模块
    linux上安装Docker
    [数据结构]堆的建立和排序
  • 原文地址:https://www.cnblogs.com/Yangruzhang/p/9788727.html
Copyright © 2020-2023  润新知