汇编语言基础

引言

     汇编语言是直接在硬件之上工作的编程语言,首先要了解硬件系统的结构,才能有效的应用汇编语言对其编程。汇编课程的研究重点放在如何利用硬件系统的编程结构和指令集有效灵活的控制系统进行工作。

基础知识

1.1机器语言

机器语言是机器指令的集合。
机器指令展开来讲就是一台机器可以正确执行的命令。
指气:01010000(PUSH AX)
电平脉冲 :

早期的程序员们将 0、1 数字编程的程序代码打在纸带或卡片上,1打孔,0不打孔,再将程序通过纸带机或卡片机输入计算机,进行运算

1.2汇编语言的产生

汇编语言的主体是汇编指令。
汇编指令和机器指令的差别在于指令的表示方法上。汇编指令是机器指令便于记忆的书写格式。
汇编指令是机器指令的助记符

机器指令: 1000100111011000
操作 : 寄存器 BX的内容送到AX中
汇编指令 :MOV AX,BX
这样的写法与人类语言接近,便于阅读和记忆

寄存器 : 简单的讲是CPU中可以存储数据的器件,一个CPU中有多个寄存器。AX是其中一个寄存器的代号,BX是另一个寄存器的代号。

计算机能读懂的只有机器指令,那么如何让计管机执行程序员用汇编指令编写的程序呢?

 1.3汇编语言的组成

汇编语言由以下3类组成 :

1、汇编指令(机器码的助记符)(由编译器执行 )

2、伪指令

3、其它符号 (由编译器识别)

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

1.4存储器

CPU 是计算机的核心部件·它控制整个计算机的运作并进行运算,要想让一个CPU 工作,就必须向它提供指令和数据
指令和数据在存储器中存放,也就是平时所说的内存

在一台PC机中内存的作用仅次于CPU。
离开了内存,性能再好的CPU也无法工作。
磁盘不同于内存,磁盘上的数据或程序如果不读到内存中,就无法被CPU 使用。

(cpu读内存快  内存读硬盘慢)

1.5指令和数据

 指令和数据是应用上的概念。

在内存或磁盘上,指令和数据没有任何区别,都是二进制信息。

1.6存储单元

存储器被划分为若干个存储单元,每个存储单元从0开始顺序编号 ;

对于大容量的存储器一般还用以下单位来计量容量 (以下用B来代表Byte) :
IKB=1024B  IMB=1024KB IGB=1024MB ITB=1024GB

1.7CPU对存储器的读写

CPU要想进行数据的读写,必须和外部器件 (标准的说法是芯片) 进行三类信息的交互 :
存储单元的地址 (地址信息) 

器件的选择,读或写命令 (控制信息)  

读或写的数据 (数据信息 )

 在计算机中专门有连接CPU和其他芯片的导线,通常称为总线。
物理上 : 一根根导线的集合 ;
逻辑上划分为 :
地址总线
数据总线
控制总线

 1.8地址总线

CPU是通过地址总线来指定存储单元的。
地址总线上能传送多少个不同的信息 ,CPU就可以对多少个存储单元进行寻址。

一个CPU有N根地址总线,则可以说这个CPU的地址总线的宽度为N。
这样的CPU最多可以寻找2的N次方个内存单元

1.9数据总线

CPU与内存或其它器件之间的数据传送是通过数据总线来进行的。
数据总线的宽度决定了CPU和外界的数据传送速度。

1.10控制总线

CPU对外部器件的控制是通过控制总线来进行的。在这里控制总线是个总称,控制总线是一些不同控制线的集合。有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制。所以,控制总线的宽度决定了CPU做对外部器件的控制能力。
控制总线上发送的控制信息

前面所讲的内存读或写命令是由几根控制线综合发出的 :其中有一根名为读信号输出控制线负责由CPU 向外传送读信号,CPU 向该控制线上输出低电平表示将要读取数据 ;
有一根名为写信号输出控制线负责由CPU后外传送写信号。

1.11内存地址空间

什么是内存地址空间呢?
一个CPU的地址线宽度为10,那么可以寻址1024个内存单元,这1024个可寻到的内存单元就构成这个CPU的内存地址空间。下面深入讨论
首先需要介绍两部分基本知识,主板和接口卡。

1.12主板

在每一台PC机中,都有一个主板,主板上有核心器件和一些主要器件
这些器件通过总线 (地址总线、数据总线、控制总线) 相连。

1.13接口卡

计算机系统中,所有可用程序控制其工作的设备,必须受到CPU的控制。
CPU对外部设备不能直接控制,如显示器、音箱、打印机等。直接控制这些设备进行工作的是插在扩展插槽上的接口卡·

1.14各类存储器芯片

从读写属性上看分为两类 :随机存储器 (RAM) 和只读存储器 (ROM)
从功能和连接上分类 :
随机存储器RAM
口装有BIOS的ROM
接口卡上的RAM
PC机中各类存储器的逻辑连接情况

装有BIOS的ROMBIOS : Basic Input/Output System,基本输入输出系统。
BIOS是由主板和各类接口卡(如: 显卡网卡等) 厂商提供的软件系统,可以通过它利用该硬件设备进行最基本的输入输出。在主板和某些接O卡上插有存储相应BIOS的ROM。
Return

1.15内存地址空间.

上述的那些存储器在物理上是独立的器件。
但是它们在以下两点上相同 :1.都和CPU的总线相连。2、CPU对它们进行读或写的时候都通过控制线发出内存读写命令。

假设,上图中的内存空间地址段分配如下
地址0~7FFFH的32KB空间为主随机存储器的地址空间 ;
地址8000H~9FFFH的8KB空间为显存地址空间 ;

地址A000H~FFFFH的24KB空间为各个ROM的地址空间

内存地址空间
最终运行程序的是CPU 我们用汇编编程的时候,必须要从CPU角度考虑问题。

寄存器(CPU工作原理)

概述

一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。区别:内部总线实现CPU内部各个器件之间的联系。外部总线实现CPU和主板上其它器件的联系。   

2.1通用寄存器

16位数据在寄存器中的存放情况

数据:20000

二进制表示 :0100111000100000

在寄存器AX中的存储 :

2.2字在寄存器中的存储

一个字可以存在一个16位寄存器中,这个字的高位字节和低位字节自然就存在这个寄存器的高8位寄存器和低8位寄存器中。

2.3几条汇编指令

(汇编指令不区分大小写)

汇编指令控制CPU完成的操作用高级语言的描述
mov ax,18将18送入AXAX = 18
mov ah,78将78送入AHAH=78
add ax,8将寄存器AX中的数值加8AH=AX+8
mov ax,bx将寄存器BX中的数据送入寄存器AXAX = BX
add ax,bx将ax,bx中的内容相加,结果存在AX中AX=AX+BX

 例题:

答案:1044CH  但是因为只能存放4位  所以是  044CH

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

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

相关文章

单链表---结构体实现

定义 链表称为线性表的链式存储,顺序表逻辑上相邻的数据,存储位置也相邻。链表逻辑上相邻的数据,存储位置是随机分布在内存的各个位置上的。 故 对于每一个结点,定义的结构体是: typedef struct _LinkNode {int d…

Java-使用sqlSessionTemplate实现批量更新-模拟mybatis 动态sql

环境准备(非核心方法) 创建表 创建表的sql(下表是基于Oracle创建的) CREATE TABLE "SYSTEM"."STUDENT" ("ID" NUMBER(10, 0),"NAME" VARCHAR2(20 BYTE),"ADDRES" CLOB,PRIMARY KEY ( …

milvus和相似度检索

流程 milvus的使用流程是 创建collection -> 创建partition -> 创建索引(如果需要检索) -> 插入数据 -> 检索 这里以Python为例, 使用的milvus版本为2.3.x 首先按照库, python3 -m pip install pymilvus Connect from pymilvus import connections c…

mac电脑版数字图像处理软件:ACDSee Photo Studio 9最新 for Mac

ACDSee Photo Studio 9是一款由ACD Systems开发的功能强大的照片管理和编辑软件,专为Mac用户提供一站式解决方案,方便用户轻松浏览、管理和编辑照片。该软件提供了许多实用的工具和功能,包括高效的导入和排序工具、强大的编辑工具、智能组织和…

微信小程序设置动态变量设值

微信小程序设置动态变量设值 微信小程序如何动态变量设值? 示例代码如下: setValFunc() {const key this.data.currentPickerid; // 业务需求动态键值key,或者是上一界面获取的动态key值const value 变量值;this.setData({[${key}]: valu…

CustomTabBar 自定义选项卡视图

1. 用到的技术点 1) Generics 泛型 2) ViewBuilder 视图构造器 3) PreferenceKey 偏好设置 4) MatchedGeometryEffect 几何效果 2. 创建枚举选项卡项散列,TabBarItem.swift import Foundation import SwiftUI//struct TabBarItem: Hashable{ // let ico…

AKKA.Net 的使用 来自CHATGPT

请用C# 语言实现一个自动化设备 流水线调度模型,流水线各个环节需要并行执行: 下面是一个使用C#语言实现自动化设备流水线调度模型的简单示例。该示例使用并发编程库System.Threading.Tasks来实现流水线各个环节的并行执行。 csharp using System; usi…

Android 13 骁龙相机点击录像流程分析

一.背景 由于最近客户定制需要将文件挂载类型修改为sdcardfs,由于修改了文件挂载类型,导致了骁龙相机录像后不显示左下角缩略图,也不能点击进入相册中,相册里面也没有录制的视频,故对骁龙相机从点击事件开始进行问题的排查 二.流程介绍 录像的流程大概分为几个阶段:进行…

浏览器backspace无法回退到上一层解决办法

01.问题 浏览器backspace无法回退到上一层解决办法 02.解决 //浏览器回退 document.onkeydown function () {// 可以利用alert(event.keyCode)获取你想要回退的keyCodeif (event.keyCode 8) {history.go(-1);} }03.参考资料 浏览器页面的回退实现

PDF-Word-图片等的互相转换

轻闪PDF客户端 - 功能强大的一站式PDF工具 | PDF编辑、转换、阅读 上面页面支持PDF转换成各类别:鼠标停留在PDF工具,点击转换类型即可在线转换 Word-PDF:word文档打开word文件中,点击文件->另存为->另存为的位置->保存…

Oracle数据不常用的函数

COALESCE函数 COALESCE 和 NVL 都是 Oracle 数据库中用于处理 NULL 值的函数,但它们在一些方面有区别: 1. **语法**: - COALESCE 的语法允许多个参数,它会从参数列表中选择第一个非 NULL 值。语法如下:COALESCE(e…

Java练习题-获取数组元素最大值

✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1🏆 📃个人主页:hacker707的csdn博客 🔥系列专栏:Java练习题 💬个人格言:不断的翻越一座又…

Qt之给控件添加右键菜单

一、设置控件 在对应控件的属性中,将contextMenuPolicy设置为CustomContextMenu。 二、添加槽函数 在对应控件上右键选择槽函数customContextMenuRequested(QPoint)。 三、在槽函数中添加右键菜单 在槽函数中输入如下代码,添加右键菜单。 //右键菜单 …

Flutter 剪裁(Clip)

🔥 ClipOval 🔥 子组件为正方形时剪裁成内贴圆形;为矩形时,剪裁成内贴椭圆 裁剪纯色背景 ClipOval(child: Container(width: 300.w,height: 300.w,decoration: const BoxDecoration(color: Colors.red),),), 裁剪背景图片 裁剪前…

《Deep Residual Learning for Image Recognition》阅读笔记

论文标题 《Deep Residual Learning for Image Recognition》 撑起CV界半边天的论文Residual :主要思想,残差。 作者 何恺明,超级大佬。微软亚研院属实是人才辈出的地方。 初读 摘要 提问题: 更深层次的神经网络更难训练。 …

finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?

垃圾回收器(garbage colector)决定回收某对象时,就会运行该对象的 finalize() 方法 但是在 Java 中很不幸,如果内存总是充足的,那么垃圾回收可能永远不会进行,也就是说 filalize() 可能永远不被执行&#x…

Linux OS源的问题记录

场景 安装了一台Linux虚拟机充当服务器,准备搭建一个elk环境,我使用命令安装docker的时候,报错提示 YumRepo Error: All mirror URLs are not using ftp, http[s] or file.Eg. Invalid release/repo/arch combination/ removing mirrorlist…

(vue3)大事记管理系统 文章管理页

[element-plus进阶] 文章列表渲染(带搜索&到分页) 表单架设:当前el-form标签配置一个inline属性,里面的元素就会在一行显示了 中英国际化处理:App.vue中el-config-provider标签包裹组件,意味着整个组…

【LeetCode高频SQL50题-基础版】打卡第6天:第31~35题

文章目录 【LeetCode高频SQL50题-基础版】打卡第6天:第31~35题⛅前言员工的直属部门🔒题目🔑题解 判断三角形🔒题目🔑题解 连续出现的数字🔒题目🔑题解 指定日期的产品价格🔒题目&am…

集合元素处理(传统方式和Stream方式)

1、集合元素处理(传统方式) 现在有两个ArrayList集合存储队伍当中的多个成员姓名,要求使用传统的for循环(或增强for循环)依次进行一下若干操作步骤: 第一个队伍只要 名字为 3 个字 的成员姓名;存…