简介

什么是汇编语言?

汇编语言是一种低级的编程语言,在程序的语句和体系结构的机器代码指令之间有很强的对应关系。

每种汇编语言都特定于特定的计算机体系结构,但需要解释或编译。汇编语言也可以称为符号机器代码。

汇编语言通常每个机器指令都有一个语句,通常也支持汇编指令、程序和内存位置的宏和符号标签。

汇编代码被汇编器转换为可执行的机器代码。转换过程称为汇编。

计算机编程语言的演进

机器语言

与模拟和机电计算机的早期工作不涉及我们所了解编程语言。由于早期的计算机需要直接对每个问题集进行连线,所以设置插头的过程取代了基于文本的算法蒸馏。

随着汞延迟线和磁鼓记忆装置取代机电设备,在无需重新布线的情况下直接写入内存中的地址并提供指令变得更加容易。这通常指的是编写我们称之为 "机器代码 "的内容。现在通常被称为"十六进制",因为现代的32位和64位微处理器系统以8或16十六进制块每时钟周期的速度读取二进制数据。

在计算机级别编写代码是困难的:它要求程序员知道在硬件中寄存器和处理器的指令集的特定位置。阅读机器代码通常比编写它更困难,因此跟踪代码更改几乎是不可能的。

汇编语言

汇编语言的出现意味着第一次升级到计算机代码级别的编程。他提供了一种用字符串操纵符和名称来编写机器代码的方法,而不是原始的二进制版本。它仍然是难以阅读,仍然需要知道哪些指令和寄存器位置,但它可以在纸或屏幕上阅读并汇编成机器代码。

我们还在使用汇编,大多数计算机外设的设备驱动程序都是用C代码编写的,但有些实时故障最好通过手动优化C编译器中途生成的汇编代码来解决。

高级语言——FORTRAN

FORTRAN 代表了公式翻译 (FORmula TRANslation)。这门语言是在上世纪50年代中期的IBM 704系列计算机上发明的。

高级语言——BASIC

在计算机编程中,BASIC (Beginner's All-purpose Symbolic Instruction Code) 是一个高级语言族。它最初于 1963年由Dartmouth College的John George Kemeny和Thomas Eugene Kurtz设计,使得非科学领域的学生接触到了计算机。当时所有的电脑使用需要编写自定义软件,这是只有科学家和数学家倾向于做的事情。二十世纪八十年代,它在家用微型计算机上变得普遍,现在在少数大幅演变的语言中仍然流行。

高级语言——COBOL

COBOL (COmmon Business Oriented Language) 是一个上世纪60年代出现的高级编程语言,并仍然用于业务应用。它广泛应用于金融服务行业使用的基于大型机的应用。它使用类似英语语句的指令,并为程序设定了一个整体框架。COBOL 的设计目标是一种自文档化的语言,可以方便地对其进行修改和维护。

高级语言——PL/1

Programming Language 1 是为科学、工程和业务应用程序设计的高级编程语言。它是最具特色的编程语言之一,也是最具功能丰富的一类中的第一个。它自上世纪60年代代初推出以来,已被各种学术、商业和工业用户使用,至今仍在积极使用。它支持递归和结构化编程。语言语法是类似于英语的,适合描述复杂的数据格式,有一组广泛的可用于验证和操作的函数。

汇编语言的优点

了解汇编语言使人知道——

  • 程序是如何与操作系统 (OS)、处理器和BIOS交互的;
  • 数据是如何在内存和其他外部设备中表示的;
  • 处理器是如何访问和执行指令的;
  • 指令是如何访问和处理数据的;
  • 程序是如何访问外部设备的。

使用汇编语言的其他优点是——

  • 它需要较少的内存和执行时间;
  • 它以更简单的方式允许特定于硬件的复杂工作;
  • 它适用于追求效率的工作;
  • 它最适合编写中断服务例程和其他内存驻留程序。

个人计算机硬件的基本特点

PC 的主要内部硬件由处理器、内存和寄存器组成。寄存器是保存数据和地址的处理器组件。在执行程序时,系统会将其从外部设备复制到内部内存中。处理器执行程序指令。

计算机存储的基本单元是位 (bit);它可以 ON (1),也可以是 OFF (0)。一组九个相关位组成一个字节,其中八位用于数据,最后一个用于奇偶校验。根据奇偶校验规则,每个是ON (1) 字节上的位数应该总是奇数。

因此,奇偶校验位的应用使由比特组成的字节数是奇数。如果奇偶校验是偶数,系统假定出现了奇偶校验错误 (尽管很少见),这可能是由于硬件故障或电气干扰造成的。

处理器支持以下数据大小——

  • 字(Word): 2 字节数据项
  • 双字(Doubleword): 4 字节(32位)数据项
  • 四字(Quadword): 8 字节(64位)数据项
  • 段落(Paragraph): 16 字节(128位)数据项
  • 千字节(Kilobyte): 1024 字节
  • 兆字节(Megabyte): 1,048,576 字节

在内存中寻址数据

处理器控制指令执行的过程被称为回迁—解码—执行 (fetch-decode-execute) 周期或执行周期 (execution cycle)。它包括三连续的步——

  • 从内存中获取指令
  • 解码或识别指令
  • 执行指令

处理器一次可以访问一个或多个字节的内存。让我们考虑一个十六进制数字0725H。此数字将需要两个字节的内存。高阶字节或最有效字节为 07,低阶字节为25。

处理器以反向字节序列存储数据,即低序字节存储在低内存地址和高内存地址中的高阶字节中。因此,如果处理器将值0725H从寄存器带到内存,它将首先将25传输到较低的内存地址,然后将07转换为下一个内存地址。

x: 内存地址

当处理器将内存中获取数字数据送往寄存器时,它再次反转字节。有两种内存地址——

  • 绝对地址 (Absolute address) ——特定位置的直接引用。
  • 段地址 (或偏移量) (Segment address (or offset)) ——具有偏移值的内存段的起始地址。

基本语法

汇编程序可分为三部分——

  • 数据 (data) 部分,
  • bss (Block Started by Symbol) 部分,以及
  • 文本 (text) 部分。

数据 (data) 部分

数据 (data) 用于声明初始化的数据或常量。此数据在运行时不会更改。可以在本节中声明各种常量值、文件名或缓冲区大小等。

声明数据的语法是——

section.data

bss 部分

bss 用于声明变量。声明 bss 的语法是——

section.bss

文本 (text) 部分

文本 (text) 用于保留实际代码。本部分必须以声明 global _start 开始,它告诉内核程序执行的开始位置。

声明文本的语法为——

section.text
global _start
_start:

注释

汇编语言注释以分号 (

汇编语言 Part 1——简介、基本语法、内存分段与内存地址的更多相关文章

  1. C++继承体系中的内存分段

    ---------------综述与目录-------------- 讨论这个问题之前我们先明确类的结构,一个类的大概组成,下面的很多分类名词都是我个人杜撰,为的就是让读者看懂能够区分,下面分别分类: ...

  2. (转)从内存管 理、内存泄漏、内存回收探讨C++内存管理

    http://www.cr173.com/html/18898_all.html 内存管理是C++最令人切齿痛恨的问题,也是C++最有争议的问题,C++高手从中获得了更好的性能,更大的自由,C++菜鸟 ...

  3. JVM基础知识(1)-JVM内存区域与内存溢出

    JVM基础知识(1)-JVM内存区域与内存溢出 0. 目录 什么是JVM 运行时数据区域 HotSpot虚拟机对象探秘 OutOfMemoryError异常 1. 什么是JVM 1.1. 什么是JVM ...

  4. JVM并发机制的探讨——内存模型、内存可见性和指令重排序

    并发本来就是个有意思的问题,尤其是现在又流行这么一句话:“高帅富加机器,穷矮搓搞优化”. 从这句话可以看到,无论是高帅富还是穷矮搓都需要深入理解并发编程,高帅富加多了机器,需要协调多台机器或者多个CP ...

  5. c语言学习之基础知识点介绍(十):内存空间模型、地址解释及指针变量

    一.内存 /* 内存: 存在内存里的. 内存分了N多个小空间,每个小空间1个字节 每个小空间有它自己的地址.每个地址之间差1 int类型占用4个字节,等于占了4个空间(有4个地址),不需要记住4个地址 ...

  6. [内存管理]连续内存分配器(CMA)概述

    作者:Younger Liu, 本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可. 原文地址:http://lwn.net/Articles/396657/ 1 ...

  7. iOS的内存分析和内存管理

    iOS的内存分析和内存管理 [内存管理]一直是iOS开发中的一个重点. 本文就带你从内存分析开始一步步了解内存的占用情况,从真实的情况中领悟真正项目开发过程中的内存的使用情况. 注:本文默认你熟悉 M ...

  8. alloc_page分配内存空间--Linux内存管理(十七)

    1 前景回顾 在内核初始化完成之后, 内存管理的责任就由伙伴系统来承担. 伙伴系统基于一种相对简单然而令人吃惊的强大算法. Linux内核使用二进制伙伴算法来管理和分配物理内存页面, 该算法由Know ...

  9. Win3内存管理之私有内存跟共享内存的申请与释放

    Win3内存管理之私有内存跟共享内存的申请与释放 一丶内存简介私有内存申请 通过上一篇文章.我们理解了虚拟内存与物理内存的区别. 那么我们有API事专门申请虚拟内存与物理内存的. 有私有内存跟共享内存 ...

随机推荐

  1. js中把字符串转换成number格式方法

    方法主要有三种 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后者把值转换成浮点数.只有 ...

  2. redis启动内存不足

    redis-server.exe redis.windows.conf  --maxheap 2gb

  3. memcache和iptables开启11211端口

    linux下安装完memcached后,netstat -ant | grep LISTEN 看到memcache用的11211端口已在监听状态,但建立php文件连接测试发现没有输出结果,iptabl ...

  4. 关于Memcache的连接

    addServer 在说Memcache的长连接(pconnect)和短连接(connect)之前要先说说Memcache的addServer,Memcache的addServer是增加一个服务器到连 ...

  5. win10红警黑屏和无法打开的处理

    原因:win10或者win7无法打红警的原因,除开软件本身坏了等情况,多半是因为显示比率不对不上和系统不兼容导致的处理方法是: 1.将快捷方式发送到桌面(只是为了方便打开,当然你也可以不发送到桌面,关 ...

  6. C#知识点-StopWatch-计时

    目录 简单介绍 基本用法 结尾 简单介绍 Stopwatch 可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.一般用来测量代码执行所用的时间或者计算性能数据,在优化代码性能上可以使 ...

  7. js之深度克隆、简易克隆

    一.js中的对象 谈到对象的克隆,必定要说一下对象的概念. js中的数据类型分为两大类:原始类型和对象类型. (1)原始类型包括:数值.字符串.布尔值.null.undefined(后两个是特殊的原始 ...

  8. 数据库之游标过程-- 基于MySQL

    实例如下: DROP PROCEDURE IF EXISTS pr_change_station_user_acct_his; -- 如果存在存储过程,即删除存储过程 create procedure ...

  9. jmeter的安装和基本使用

    本篇文章主要介绍一下JMeter的安装及基本使用方法. 1.安装 JMeter的官方网址为http://jmeter.apache.org/ 下载地址为http://jmeter.apache.org ...

  10. BZOJ 4423: [AMPPZ2013]Bytehattan 并查集+平面图转对偶图

    4423: [AMPPZ2013]Bytehattan Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 277  Solved: 183 [Submit ...