当前位置: 首页 > news >正文

汇编语言程序设计(一)

前言

在学习汇编语言之前,我们应该要知道汇编语言他是一门怎么样的语言。汇编语言是直接工作在硬件上的一门编程语言,学习汇编语言之前最好先了解一下计算机硬件系统的结构和工作原理。学习汇编语言的重点是学习如何利用硬件系统的编程结构和指令集进而有效地灵活地控制系统执行工作。汇编语言,是除了机器语言外的最底层的编程语言了。学习这门语言,可以帮助我们更加深入地理解CPU、内存等硬件的工作原理。用机器的思维去操作计算机。汇编语言和机器语言是一一对应的,汇编语言被编译成机器语言,这样的程序执行效率更高。

对于从事嵌入式行业相关的人员来讲,学习汇编语言可以帮你写出效率更高的程序,也可以帮助编程人员更好地理解高级语言,比如c语言。那么对于java、python这类语言编程人员是否就一定不用了解汇编语言呢?诚然,对于使用这类语言的编程人员来说学习汇编可能收效甚微,但是了解汇编对高级语言的内部实现也会有更好的理解。注意这里所说的学习汇编,并不是要求用汇编进行大型程序开发,而且能够看懂一些常用汇编代码即可。

在学习后续内容之前,希望读者对于一些基本的计算机知识有一定的认知,比如:具备计算机使用经验,熟悉不同进制,有一定的编程基础(c、c++…)。

1.基础知识

1.1 计算机语言发展

计算机语言总的来说分为机器语言,汇编语言,高级语言三大类。而这三种语言也恰恰是计算机语言发展历史的三个阶段。

1946年2月14日,世界上第一台计算机ENAC诞生,使用的是最原始的穿孔卡片。这种卡片上使用的语言是只有专家才能理解的语言,与人类语言差别极大,这种语言就称为机器语言。机器语言是第一代计算机语言。这种语言本质上是计算机能识别的唯一语言,人类很难理解。后来发展的语言能让人类直接理解但最终送入计算机的还是这种机器语言。

计算机语言发展到第二代,出现了汇编语言。汇编语言用助记符代替了操作码,用或标号地址符号代替地址码。这样就用符号代替了机器语言的二进制码。汇编语言也称为符号语言。比起机器语言,汇编大大进步了。尽管还是复杂,用起来容易出错,但在计算机语言发展史上是机器语言向更高级的语言进化的桥梁。

当计算机语言发展到第三代时,就进入了“面向人类”的高级语言。高级语言是一种接近于人们使用习惯的程序设计语言。它允许用英文写计算程序,程序中的符号和算式也与日常用的数学式子差不多。高级语言发展于20世纪50年代中叶到70年代,流行的高级语言已经开始固化在计算机内存里了,比如 basic语言。现在,计算机语言仍然在不断的发展,种类也相当多,比如 FORTRAN语言, COBOL语言,C语言,C++,C#, PASCAO,JAVA等等。

1.2 编程语言的分类

计算机语言发展至今已经出现了很多种语言(c/c++,python,java,c#…),下面我们通过分类看一下它们有哪些区别:

低级语言:机器语言、汇编语言

高级语言:c/c++、python、java、C#…

低级语言优点在于接近底层,程序运行速度快,缺点也同样明显,程序复杂,开发效率低,而高级语言虽然在运行速度上比不上低级语言,但是在开发效率上优点明显。但是高级语言在不能直接被机器识别,需要进行一定的转换才可以被执行。

对于转换形式的不同还可以划分为:

编译型语言:c/c++…

将代码源文件(xxx.c)经过编译器翻译之后生成可被机器执行的目标文件(机器语言),修改了源文件则需重新编译生成新的目标文件。

解释型语言:python、php…

类似于生活中的“同声翻译”,将源程序一边经过对应语言的解释器翻译成机器语言,一边执行,执行效率较低,不能生成可独立执行的目标文件,且其执行依赖于解释器。

混合型语言:java

java语言比较特殊,属于混合型语言(半编译半解释)

1.3 机器语言

计算机诞生的初期,计算机上运行的语言就是机器语言。机器语言就是机器指令的集合,机器指令是一台计算机可以正确执行的命令,一条机器指令对应一个机器码。(下图为第一台计算机ENIAC)

在这里插入图片描述
早期的程序设计都使用机器语言,程序员将用0、1编写成的程序代码打在纸带/卡片上,再通过纸带/卡片机将程序输入计算机,进行运算。

如果要计算s=768+12288-1280,机器码(8086机器)如下:

101110000000000000000011

000001010000000000110000

001011010000000000000101

也就是说程序执行到上述运算的时候,纸片上的数据应该按照上述的机器码进行打孔,可想而知如果出错,找出错误也是需要考验眼力的。(下图为输出 welcome to masm 的机器码)

在这里插入图片描述

1.4 汇编语言

由于机器语言难以辨别和记忆,很快人们就发明了另外一种方法来进行程序编写,这种方法也就是汇编语言。汇编语言的主体是汇编指令。相对于机器语言来说,汇编指令在记忆上有了极大的改善,不同于机器码,汇编采用的是机器指令便于记忆的格式。

例如:机器指令 1000100111011000 表示把寄存器BX的内容送到AX中。

而汇编指令则为:mov ax,bx

这样的方式大大方便了编程人员对于指令的记忆,此后程序人员都是采用汇编指令进行程序编写。但是我们需要理解的是计算机只能识别机器指令,将汇编指令直接输入到计算机中是不能直接识别的,故而我们在程序输入之前需要将汇编指令转换成机器指令,实现这种转换方式的程序我们称之为编译器。也就是说汇编程序的执行过程是程序员利用汇编编写程序文件,经过编译器翻译之后生成对应的机器码,再由计算机最终执行。

如下图所示:

在这里插入图片描述

汇编语言发展至今,有以下三类指令:

1)汇编指令:机器码的助记符,有对应的机器码

2)伪指令:没有对应的机器码,由编译器执行,计算机并不执行

3)其他符号:如 + - * / 等,由编译器识别,计算机并不执行

汇编语言的核心是汇编指令,它决定了汇编语言的特性。

相关文章:

汇编语言程序设计(一)

前言 在学习汇编语言之前,我们应该要知道汇编语言他是一门怎么样的语言。汇编语言是直接工作在硬件上的一门编程语言,学习汇编语言之前最好先了解一下计算机硬件系统的结构和工作原理。学习汇编语言的重点是学习如何利用硬件系统的编程结构和指令集进而…...

【uni-app教程】四、UniAPP 路由配置及页面跳转

四、UniAPP 路由配置及页面跳转 (1) 路由配置 uni-app页面路由为框架统一管理,开发者需要在pages.json里配置每个路由页面的路径及页面样式。类似小程序在 app.json 中配置页面路由一样。所以 uni-app 的路由用法与 Vue Router 不同,如仍希望采用 Vue …...

ROS从入门到精通系列(二十八)-- ROS控制器图形化界面开发

ROS (Robot Operating System, 机器人操作系统) 作为机器人软件中的通信及控制中间件,提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、函数库、可视化工具、消息传递和软件包管理等诸多功能。ROS遵循BSD开源许可协议。 随着机器人智…...

Submodule命令:android如何将自己项目中的某个Module作为gitlab中第三方公共库

一、创建远程公共库 1、Android Studio创建本地仓库 创建一个新的module 在新建module中添加代码(此处示例代码) 右击新建的module,打开新建module的命令行界面, 因为我们只上传这个module的代码,而不是整个项目的代码 命令行中输入以下命令…...

MySQL索引事务

1.索引1.1概念索引是一种特殊的文件,包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引,并指定索引的类型,各类索引有各自的数据结果实现。(这里只用通俗的语言和图片进行介绍)1.2作用数据库中的表…...

ISO27001信息安全管理体系认证

​ISO信息安全管理体系认证 一、什么是ISO信息安全管理体系认证? ISO是信息安全管理体系认证,是由国际标准化组织(ISO)采纳英国标准协会BS-2标准后实施的管理体系,成为了“信息安全管理”的国际通用语言,企…...

Linux应用GUI开发C++ 之gtkmm4(1)

目录概述GTKgtkmm安装gtkmm4hello,worldcodelite配置代码解释概述 GTK GTK是一个小部件工具包。GTK创建的每个用户界面都由小部件组成。这是在C语言中使用GObject实现的,GObject是一个面向对象的C语言框架。窗口小部件是主容器。然后通过向窗口中添加按钮、下拉菜…...

选课系统的设计与实现

技术:Java等摘要:目前国内各高校的规模越来越大,进而造成教师教学管理等工作量日趋加大。然而,现代教育的信息化、网络化已经成为教育发展的一个重要方向,同时也为解决高校教学管理效率低下的现状,使管理突…...

关于安卓的一些残缺笔记

安卓笔记Android应用项目的开发过程Android的调试Android项目文档结构Intent的显式/隐式调用Activity的生命周期1个Activity界面涉及到生命周期的情况2个Activity界面涉及到生命周期的情况Android布局的理论讲解Activity界面布局ContentProvider是如何实现数据共享Android整体架…...

MySQL 中的锁有哪些类型,MySQL 中加锁的原则

锁的类型MySQL 找那个根据加锁的范围,大致可以分成全局锁,表级锁和行级锁。全局锁全局锁,就是对整个数据库加锁。加锁flush tables with read lock解锁unlock tables全局锁会让整个库处于只读状态,之后所有的更新操作都会被阻塞&a…...

Winform中操作Sqlite数据增删改查、程序启动时执行创建表初始化操作

场景 Sqlite数据库 SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。 它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。 就像其他数据库,SQLite 引擎不…...

2023最新版本RabbitMQ下载安装教程

一、RabbitMQ简介 RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。主要用于在进程、应用程序和服务器之间交换数据,可以通过插件支持进行扩展,支持许多协议,并提供高性能、可靠性、集群和高可用队列。 AMQP :Advanced Me…...

如何使用码匠连接 Elasticsearch

目录 在码匠中集成 Elasticsearch 在码匠中使用 Elasticsearch 关于码匠 Elasticsearch 是一个开源的分布式搜索和分析引擎,常用于处理大规模数据集的搜索、实时数据分析和数据挖掘任务。它支持多种数据源,包括关系型数据库(如 MySQL、Pos…...

jmeter学习笔记二(jmeter函数与后置处理器)

Jmeter重要的函数 ${__counter(,)} 计数器 ​ ${__counter(TRUE,)} 默认加1; TRUE,每个用户有自己的计数器;FALSE,使用全局计数器 ​ 计数器元件,可以设置起始值,间隔值,最大值。运行结果超过最大值时&a…...

【独家】华为OD机试提供C语言题解 - 子序列长度

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧文章目录 最近更新的博客使用说明子序…...

Java之注解

注解1.1 注解的概念1.2 内置注解1.3 元注解1.4 自定义注解1.1 注解的概念 Annotation 是从JDK5.0 开始引入的新技术 Annotation的作用: 不是程序本身,可以对程序做出解释(这一点和注释comment没什么区别)可以被其他程序&#xff…...

【C++】string

【C修炼秘籍】string 目录 【C修炼秘籍】string 文章目录 前言 一、标准库里的string 二、string常用接口功能简介(具体使用和底层转到模拟实现) 1、string类的常见构造函数 2、string类对象的容量操作 3、string类对象的访问及遍历操作 4、 string类对象…...

JVM详解——执行引擎

如果有兴趣了解更多相关内容,欢迎来我的个人网站看看:耶瞳空间 一:执行引擎介绍 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和…...

python学习——【第二弹】

前言 上一篇文章 python学习——【第一弹】给大家介绍了python中的基本数据类型等,这篇文章接着学习python中的运算符的相关内容。 运算符 python中的运算符主要有:算术运算符,赋值运算符,比较运算符,布尔运算符以及…...

242. 有效的字母异位词 349. 两个数组的交集

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意: 若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。 示例 1: 输入: s “anagram”, t “nagaram” 输出: true 示例 2: 输入: s “rat…...

PT-Plugin-Plus:PT站点下载助手安装与使用指南

PT-Plugin-Plus:PT站点下载助手安装与使用指南 【免费下载链接】PT-Plugin-Plus PT 助手 Plus,为 Microsoft Edge、Google Chrome、Firefox 浏览器插件(Web Extensions),主要用于辅助下载 PT 站的种子。 项目地址: h…...

ScanTailor Advanced:3步让你的扫描文档焕然一新

ScanTailor Advanced:3步让你的扫描文档焕然一新 【免费下载链接】scantailor-advanced ScanTailor Advanced is the version that merges the features of the ScanTailor Featured and ScanTailor Enhanced versions, brings new ones and fixes. 项目地址: htt…...

毕业论文党必看!用MathType实现Word公式自动编号的3种隐藏技巧

毕业论文公式排版终极指南:MathType高效编号技巧全解析 在撰写理工科毕业论文或学术论文时,公式排版往往是让研究者头疼的环节。传统手动编号不仅效率低下,更会在修改文档时引发连锁灾难——一个公式的增删可能导致全篇编号错乱。MathType作为…...

PHP 8.5 升级生存指南:避免凌晨两点回滚的检查清单

定目标版本,定义内部支持策略在动 CI 或 Composer 之前,先回答一个问题:在你的组织里,这次升级"完成"意味着什么?确定目标和截止日期PHP 分支有两年的活跃支持,然后是两年的安全修复。官方支持表…...

终极风扇控制指南:如何用FanControl 264版彻底告别电脑噪音烦恼

终极风扇控制指南:如何用FanControl 264版彻底告别电脑噪音烦恼 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tr…...

STM32博物馆环境监控系统设计与实现

基于STM32的博物馆展柜环境监控系统设计1. 项目概述1.1 系统背景文物保护工作中,展柜微环境稳定性直接影响文物保存状态。传统人工巡检方式存在响应滞后、数据不连续等问题。本项目设计了一套基于STM32的智能化环境监控系统,可实时监测温湿度、光照、烟雾…...

XU9232A可穿戴设备 电池供电设备 便携式医疗设备

这是一款高度集成的升压转换器,为输出高电压和高效率的应用方案而设计。输入电源可以从一个锂电池或二节串联的碱性电池,而升压到最高18V;工作频率为 1.2MHz(典型值)。内置典型4A开关晶体管,其组成 DC/DC 升…...

如何通过FCEUX实现NES游戏高精度模拟?解锁经典游戏的数字化体验

如何通过FCEUX实现NES游戏高精度模拟?解锁经典游戏的数字化体验 【免费下载链接】fceux FCEUX, a NES Emulator 项目地址: https://gitcode.com/gh_mirrors/fc/fceux 你是否曾因找不到可靠的NES模拟器而无法重温童年经典游戏?是否遇到过模拟器兼容…...

苹果内购订阅的“时间陷阱”:如何正确处理UTC与东八区的时间转换(附Java代码)

苹果订阅时间戳的时区陷阱:UTC与东八区转换的实战指南 1. 为什么时间戳处理如此重要? 在苹果应用内购(IAP)订阅系统中,时间戳处理看似简单,实则暗藏玄机。许多开发者都曾踩过这样的坑:用户明明购…...

OpenClaw技能开发指南:为ollama-QwQ-32B编写自定义模块

OpenClaw技能开发指南:为ollama-QwQ-32B编写自定义模块 1. 为什么需要自定义技能开发 上周我需要每天手动查询三个城市的天气数据来生成日报,这种重复劳动让我开始思考:能否让OpenClaw帮我自动完成?当我发现现有的天气技能包都不…...