notebooks
  • notebooks
  • _planning
    • 2022 OKR
    • basketball
    • swimming
  • communication
    • Dubbo
    • Kafka
    • Messaging
    • RPC
    • Thrift
  • computation
    • map-reduce
  • cs-basic-knowledge
    • computer-architecture
    • data-structure-and-algorithms
    • networks
    • os
  • devops
    • Docker
    • Linux
    • Prometheus
    • operations
    • security
    • trouble-shooting
  • distributed-knowledge
    • Zookeeper_CMD
    • distributed-system
  • game-engine
    • Unity
  • others
    • appium使用
  • protocols
    • http(s)协议
    • 官方链接
    • sip
  • storage
    • Elasticsearch
    • GuavaCache
    • MySQL
    • MySQL_CMD
    • NoSQL
    • Redis
    • Redis_CMD
  • system-design
    • system-design
  • tools
    • Git
    • IDEA
    • Mac
    • VScode
    • Vim
  • _working
    • doc-template
      • backend-design-review
      • correction-of-error
      • service-review
    • process
      • domain-backup
      • oncall
  • blogs
    • history
      • 8088/8086微处理器
      • 8088/8086指令系统
      • CSS-DOM
      • CSS定位
      • CSS工作原理
      • CSS控制背景
      • CSS浮动布局
      • CSS盒模型
      • Chrome开发者工具使用方法
      • DOM
      • Django Model模型层学习
      • Django-REST-framework Serializers学习
      • Django-REST-framework Views和ViewSets学习
      • Django View视图层学习
      • Gvim下Emmet安装及使用教程
      • HTTP协议简介
      • HashMap原理初探
      • JavaScript简史
      • JavaScript语法
      • Java内存模型和GC机制
      • Java基础——Lambda学习
      • Java基础——方法引用
      • Java基础——枚举类型
      • Java类加载机制
      • KMP算法
      • Kafka学习
      • Linux下用命令行编译Java程序
      • MathJax简介和基本用法
      • Python实现常见数据结构
      • Python装饰器总结
      • TCP协议的三次握手和四次挥手
      • Thrift学习
      • asyncio学习
      • markdown的常用语法
      • 修改hosts文件实现翻墙
      • 充实文档的内容
      • 关系数据库
      • 关系数据库标准语言SQL(一)
      • 关系数据库标准语言SQL(二)
      • 关系数据理论
      • 关系查询处理和查询优化
      • 内联元素和块级元素
      • 剑指offer算法题练习
      • 动态创建标记
      • 图形化用户界面
      • 在Eclipse中使用Maven构建Java Web项目
      • 增加微博秀遇到的一些问题
      • 处理机调度
      • 如何用github和hexo搭建个人博客
      • 存储管理
      • 存储系统的层次结构
      • 学习模仿lionhit网站首页的过程总结
      • 实用的GitHub小技巧
      • 并发控制
      • 循环与分支程序设计
      • 指令系统的设计
      • 指令级并行及其开发——硬件方法
      • 搭建自己的VPN服务器
      • 操作系统用户界面
      • 数据库安全性
      • 数据库完整性
      • 数据库恢复技术
      • 数据库绪论
      • 数据库编程
      • 数据库设计
      • 数据抽象
      • 文件系统
      • 文法和语言
      • 最佳实践
      • 案例研究:JavaScript图片库
      • 案例研究:图片库改进版
      • 汇编语言程序格式
      • 汇编语言程序设计基础知识
      • 流水线技术
      • 深度优先搜索和广度优先搜索
      • 牛客网——网易2017秋招编程题集合
      • 用JavaScript实现动画效果
      • 第一篇博客
      • 经典排序算法总结(Java实现)
      • 经典查找算法总结(Java实现)
      • 综合示例
      • 编译原理引论
      • 背包、队列和栈
      • 虚拟机安装Linux系统及常用软件
      • 计算机操作系统绪论
      • 计算机系统结构的基础知识
      • 设备管理
      • 设计模式之代理模式
      • 设计模式之单例模式
      • 设计模式之工厂模式
      • 设计模式之策略模式
      • 设计模式之观察者模式
      • 词法分析
      • 进程管理
      • 闭包
      • 阻止Google自动跳转到香港服务器的方法
      • 项目部署过程
  • programming-language
    • C#
      • C#
    • C&C++
      • C
    • C&C++
      • C++
    • Java
      • GoogleGuice
    • Java
      • JVM
    • Java
      • Java
    • Java
      • Maven
    • Java
      • Mybatis
    • Java
      • Spring知识
    • Java
      • SpringBoot
    • Java
      • Tomcat
    • Python
      • Python
    • Shell
      • Shell
  • wheels
    • dcc
      • 产品调研
      • 方案设计
    • red-envelope
      • 方案设计
    • short-url
      • 短链接服务
    • sso
      • 方案设计
Powered by GitBook
On this page
  • 概述
  • 语句类型和语句格式
  • 语句类型
  • 语句格式
  • 操作数和表达式
  • 伪指令
  • DOS系统功能调用及BIOS调用
  1. blogs
  2. history

汇编语言程序格式

概述

汇编语言是一种面向机器的程序设计语言,它采用助记符来表示操作码和操作数,用符号地址表示操作数地址,因而易记、易读、易修改,给编程带来很大方便。

用汇编语言编写的程序能够直接利用硬件系统的特性,直接对位、字节、字寄存器、存储单元、I/O端口等进行处理,同时也能直接使用CPU指令系统和指令系统提供的各种寻址方式编制出高质量的程序,这种程序不但占用内存空间少,而且执行速度快 。

用汇编语言编写的源程序在输入计算机后,需要将其翻译 成目标程序,计算机才能执行相应指令,这个翻译过程称为汇编,完成汇编任务的程序称为汇编程序。

汇编程序以汇编语言源程序文件作为输入,完成汇编后产生两种输出文件:目标程序文件和源程序列表文件。

  • 目标程序文件由二进制代码指令组成,经连接定位后可由计算机执行;

  • 源程序列表文件将列出源程序、目标程序的机器语言代码及符号表。

汇编语言源程序必须符合汇编程序的语法要求

  • 源程序分段,若干个段组成一个汇编语言源程序。

  • 源程序以END结束,一个源程序只能有、并且只能有一个END。

  • 一个段由若干个语句行组成。 以 “段名 SEGMENT / 段名 ENDS” 指示段的开始和结束。

  • 代码段的第一个语句一般是 “ASSUME”, ASSUME在段寄存器与段名之间建立了对应关系,例如段名为 “DATA” 的段是数据段。

  • 程序中主要有两类语句:指令语句(助记符指令),指示性语句(伪指令)。

  • 两种程序结构

语句类型和语句格式

语句类型

  • 指令语句:这类指令能够产生目标代码,是CPU可以执行的能够完成特定功能的语句,主要由机器指令组成。在汇编时一条指令语句被翻译成对应的机器码,对应着特定的操作。

  • 伪指令语句:伪指令语句是为汇编程序和连接程序提供一些必要控制的管理性语句,它不产生目标代码,仅仅在汇编过程中告诉汇编程序应如何汇编,并完成相应的伪操作。

  • 宏指令语句:宏指令语句是由编程者按照一定的规则来定义的一种较“宏大”的指令,可包括多条指令或伪指令 。

语句格式

汇编语言语句可以由以下几部分组成:[标识符] 操作符 [操作数] [;注释]

  • 标识符是一个符号,表示本条语句的符号地址。一般来说,标识符可以是标号和变量。标号和变量都具备3种属性:段属性、偏移属性及类型属性。

  • 操作符可以是机器指令、伪指令和宏指令的助记符。

  • 操作数字段是操作符的操作对象。当有两个或两个以上的操作数时,各操作数之间用逗号隔开。

  • 注释字段是以“;”开头的说明部分。注释字段是语句的非执行部分。

操作数和表达式

汇编语言语句中操作数可以是常数、寄存器号、变量、标号与(伪)运算符组合起来的表达式。在表达式中,运算符充当着重要的角色。这些运算符都是面向汇编程序的,都由汇编程序在汇编过程中解释并“执行”,而不是像指令那样由CPU去执行。

8086宏汇编有算术运算符、逻辑运算符、关系运算符、分析运算符和综合运算符共5种。

  1. 算术运算符

  • 常见的有+、-、MOD、SHL、SHR、*、/共7个符号,分别表示加、减、取模(求余数)、逻辑左移、逻辑右移、乘、除。这些操作符都可用于数据之间的运算,+、-操作符还可用于地址之间、数据与地址之间的运算。

  1. 逻辑运算符

  • 有NOT、AND、OR、XOR共4个符号,分别表示非、与、或、异或,可用于对两个(或一个)数据进行操作。

  1. 关系运算符

  • 关系运算符对两个数据进行比较,有EQ、NE、LT、GT、LE、GE共6个符号,分别表示等于、不等于、小于、大于、小于或等于、大于或等于,操作的结果为逻辑值。

  • 若条件满足,则结果为“真”,若条件不满足,则结果为“假”。“真”用-1(n位全1)表示,“假”用0(n位全0)表示。

  1. 取属性(分析)运算符

  • 取属性运算符可以取出运算对象的某个属性。常见的有SEG、OFFSET、TYPE、LENGTH、SIZE共5个符号,分别表示取段地址、取偏移地址、取类型、取长度、取大小,操作的结果都是数值常数。

  • 格式: SEG 变量名或标号 返回变量或标号所在段的段基值。 例如,若A为变量名或标号,则 SEG A 返回A所在段的地址。

  • 格式: OFFSET 变量名或标号 返回变量或标号的偏移地址部分。 例如,若A为变量名或标号;则OFFSET A 返回A的偏移地址。

  1. 指定属性(合成)运算符

  • 指定属性运算符可用于指定存储器操作数或标号的属性。

  • 常见的有PTR、:、THIS等3个符号,其功能分别为: 指定存储器操作数或标号的类型、指定存储器操作数的段归属、指定当地的变量或标号的类型。

  • 格式: 类型名 PTR 存储器操作数或标号

表达式中常用的伪操作符按以下顺序依次优先处理: (从左到右)

  • (i) ()、 []、〈〉(ii) LENGTH、WIDTH、SIZE、MASK (iii) ·(结构字段名操作符) (iv) : (段超越前缀的操作符) (v) PTR、OFFSET、SEG、TYPE、THIS (vi) HIGH、LOW

  • (i) + (正号)、- (负号) (ii) *、/ (iii) MOD、SHL、SHR (iv) +、 -

  • EQ、NE、LT、LE、GT、GE

  • (i) NOT (ii) AND (iii) OR、XOR

  • SHORT

伪指令

  1. 数据定义伪指令

  • 一般格式:[变量名] 操作符 参数 [,参数… ][;注释]

  • 常用的数据定义伪指令操作符

    • 定义字节变量伪指令 DB

    • 定义字变量伪指令 DW

    • 定义双字变量伪指令 DD

    • 定义四字变量伪指令 DQ

    • 定义十字节变量伪指令 DT

  • 常见的参数有以下5种形式:

    • 常数或常数表达式

    • ?

    • DUP 子句

    • 地址表达式(DB除外)

    • 字符串

  1. 地址计数器伪操作

  2. 段定义伪操作

  3. 过程定义伪操作

DOS系统功能调用及BIOS调用

  • MS-DOS 为用户提供了两组系统服务程序,用户可以按规定的方式调用这些系统服务程序。

  • DOS系统功能调用不要求用户对硬件有太多的了解,使用DOS系统功能调用的程序可移植性好,编程简单。


《IBM-PC汇编语言程序设计(第2版)》沈美明 温冬婵 著

Previous案例研究:图片库改进版Next汇编语言程序设计基础知识

Last updated 3 years ago

BIOS驻留在ROM中,包括系统自检程序、初始化引导程序及外部设备的处理程序。BIOS调用要求用户对硬件有相当的了解,使用BIOS调用的程序可移植性较差。

DOS系统功能调用 指类型为21H的软件中断,其对应的中断处理程序中包含了一系列最常用的功能子程序,这些子程序分别实现外设管理、文件读/写和管理、目录管理等功能。

汇编语言程序格式1
汇编语言程序格式2