汇编语言程序设计(一)

news2024/11/23 9:00:26

前言

在学习汇编语言之前,我们应该要知道汇编语言他是一门怎么样的语言。汇编语言是直接工作在硬件上的一门编程语言,学习汇编语言之前最好先了解一下计算机硬件系统的结构和工作原理。学习汇编语言的重点是学习如何利用硬件系统的编程结构和指令集进而有效地灵活地控制系统执行工作。汇编语言,是除了机器语言外的最底层的编程语言了。学习这门语言,可以帮助我们更加深入地理解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)其他符号:如 + - * / 等,由编译器识别,计算机并不执行

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/385962.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高通平台开发系列讲解(显示篇)Gralloc模块

文章目录 一、什么是Gralloc模块二、Gralloc加载流程三、Gralloc模块的加载四、Gralloc设备的加载五、 fb设备的加载沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍显示过程中Gralloc模块。 一、什么是Gralloc模块 通过加载Gralloc抽象层,可以打开fb设备和…

【游戏逆向】寻路函数隐藏检测点分析

案例: 某游戏出现调用寻路函数失败异常崩溃。 基本情况分析: 在刚登陆游戏的时候直接调用寻路函数崩溃。 手动寻路以后再调用寻路不崩溃。(排除了函数编写错误的可能) 猜测可能检测方法: 有某一个标志位(全局类型)在游戏刚登陆的时候没…

【VS】【Qt】vs+ qt .natvis 失效问题

【VS】【Qt】vs qt .natvis 失效问题 .natvis文件用于调试时候自定义显示自定义类型的可视化提示。 一般这类文件存在 C:\Program Files (x86)\Microsoft Visual Studio\2022\Enterprise\Common7\Packages\Debugger\Visualizers路径下。 .natvis文件的规则在此不介绍&#xf…

剑指 Offer 23 链表中环的入口结点

摘要 链表中环的入口结点_牛客题霸_牛客网 剑指 Offer II 022. 链表中环的入口节点 141. 环形链表 142. 环形链表 II 一、是否有环(快慢指针) 我们可以根据上述思路来解决本题。具体地,我们定义两个指针,一快一慢。慢指针每次…

了解Cesium的笛卡尔类型和位置变量的单位

var position Cesium.Cartesian3.fromDegrees(100, 100, 2); 前文输出了position变量,是一个六位数,还带有多位小数;下面来看一下相关类的定义和position的单位;单位如果不对的话放置的模型可能到屏幕外面; 看一下相…

太赫兹频段耦合器设计相关经验总结

1拿到耦合器的频段后,确定中心频率和波导的宽度和高度 此处贴一张不同频段对应的波导尺寸图 需要注意的是1英寸 2.54厘米,需注意换算 具体网址:矩形波导尺寸 | 扩维 (qualwave.com) 仅列举我比较常用的太赫兹频段部分 2.以220~320GHz频段&a…

《后疫情时代大众行为及情感变化研究报告》|人们的饮食、工作、运动、社交、娱乐、学习、购物有哪些改变?

疫情三年,改变了很多人的生命轨迹。有人长期居家,宅出了一身的厨艺;有人启动线上模式,习惯了居家办公;有人失去了工作,生活一度陷入困境;有人痛定思痛,准备换个城市换个活法。 个体…

项目管理工具dhtmlxGantt甘特图入门教程(十六):数据序列转化为XML和JSON

这篇文章给大家讲解dhtmlxGantt将数据转化为XML何JSON格式。 dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足应用程序的所有需求,是完善的甘特图图表库 DhtmlxGantt正版试用下载(qun:764148812&#…

提取DWI数据的FA和MD

DWI简介 扩散加权磁共振成像(DWI )是使用特定的 MRI 序列以所获得的脑成像数据,该成像手段依靠水分子的扩散在 MR 图像中产生对比度。优于组织中的分子扩散不是自由的,而是反映了与许多障碍物(例如大分子,纤…

福特FORD EDI流程指南

在此前的文章:福特FORD EDI需求分析中,我们为大家介绍了福特FORD的EDI平台——GEC Hub。与福特FORD建立EDI连接需要基于这个平台来进行。 供应商通过GEC Hub与福特建立EDI连接,需要做如下准备: 1.获得GSDB代码以及供应商代码 2.在…

是不是只能学IT互联网技术才有发展前途?

当然不是,三百六十行,行行出状元。 但我们需要认清一个现实是,我们正处于一个信息爆炸的时代,掌握紧跟潮流的技术,才可以让我们更自信地面对每天的生活,才有多余的精力、财力来享受生活。“人生在世&#…

华为机试题:HJ99 自守数(python)

文章目录(1)题目描述(2)Python3实现(3)知识点详解1、input():获取控制台(任意形式)的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

十八、本地方法栈的理解

本地方法栈(Native Method Stack) 1.Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。 2.本地方法栈,也是线程私有的。 3.允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的) 1)如果线程请求分…

深圳大学计软《面向对象的程序设计》实验8 静态与友元

A. 旅馆旅客管理(静态成员) 题目描述 编写程序,实现某旅馆的客人住宿记录功能。 定义一个Customer类,要求输入客人的姓名,创建一个Customer对象。类声明如下: 调用类的Display函数输出客人ID&#xff…

1_机器学习概述—全流程

文章目录1 机器学习定义2 机器学习常见应用框架(重点)3 机器学习分类3.1 监督学习(Supervised learning)3.2 无监督学习(Unsupervised learning)3.3 半监督学习(Semi-Supervised Learning&#…

每年来一次的系统重装和磁盘整理(备忘步骤)

前言 电脑用了一段时间,要么C盘炸裂,要么你无意更新CPU炸裂,你所遇到的各种问题,没有什么事重装解决不了的。 思路 首先,重要的东西都转存C盘之外的盘,重要的是养成习惯。我C盘基本没重要的东西&#xf…

redis数据结构的适用场景分析

1、String 类型的内存空间消耗问题,以及选择节省内存开销的数据类型的解决方案。 为什么 String 类型内存开销大? 图片 ID 和图片存储对象 ID 都是 10 位数,我们可以用两个 8 字节的 Long 类型表示这两个 ID。因为 8 字节的 Long 类型最大可以…

云HIS系统源码 医院his源码 云his源码

大型医院his系统源码 SaaS运维平台多医院入驻强大的电子病历完整文档 ,有演示 一、系统概述: 基层卫生健康云是一款满足基层医疗机构各类业务需要的健康云产品。该产品能帮助基层医疗机构完成日常各类业务,提供病患挂号支持、病患问诊、电子…

【Linux学习】菜鸟入门——gcc与g++简要使用

一、gcc/g gcc/g是编译器,gcc是GCC(GUN Compiler Collection,GUN编译器集合)中的C编译器;g是GCC中的C编译器。使用g编译文件时会自动链接STL标准库,而gcc不会自动链接STL标准库。下面简单介绍一下Linux环境下(Windows差…

阿里云ECS服务器的6大功能组件

阿里的云服务在国内可以说是首屈一指的了,因此他们家的云服务器也是最受欢迎的。那么,你知道阿里云服务器ECS有哪些功能组件吗?不清楚不要紧,下面服务器吧小编带大家来看看。 在了解之前我们来看一张阿里云服务器ECS的产品组件架…