Java开发:汇编语言

news2024/10/6 10:33:57

一、为什么学习汇编语言

中国人和中国人沟通需要学习汉语
中国人和美国人沟通在会汉语的基础上还要学习英语
那么,人和机器沟通的话需要学习哪些语言呢?
答案是:人类的语言+机器语言

但是,机器语言都是由0和1组成,人类非常难读懂,所以出现了一种便于人类理解的语言 - 汇编语言。汇编语言介于人类语言和机器语言之间,人类通过汇编语言编写代码,执行的时候会将汇编语言翻译成机器语言,操作机器执行命令。

二、进制的思想本质

A、常见的进制

2进制:二进一,计算机 0 1
8进制:八进一,由8个符号组成:0 1 2 3 4 5 6 7
10进制:十进一,由10个符号组成:0 1 2 3 4 5 6 7 8 9
16进制:十六进一,由16个符号组成:0 1 2 3 4 5 6 7 8 9 a b c d e f

B、进制的本质

进制的本质就是查数

三、进制的运算

本质就是移位
例如:2+3 :先找到 2,然后向右移3位之后的数就是结果。
2 * 3 :3个2或者2个3,从0开始数3个2之后的数字就是答案。

以8进制为例进行分析

A、8进制数字排列

0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 22 23 24 25 26 27 30 31…

B、8进制计算以下结果

2+3 = 5 //解析:本质是2往后数3位。先找到2,往后数1位是3,再数1位是4,数1位是5,即答案是5
2 * 3 = 6 //解析:3个2或者2个3。从0开始,1个2是2(即0向后数两位),2个2是4,3个2是6
4+5 = 11 //计算方法参照2+3
4 * 5 = 24 //计算方法参照2*3

C、八进制乘法表

在这里插入图片描述

D、八进制加法表

在这里插入图片描述

四、二进制和十六进制的深层理解

五、数据宽度理解

A、字节的理解

字节(Byte)、千字节(KByte)、兆字节(MByte)、GByte
1KB= 1000Byte
1MB = 1000KB
1GB = 1000MB
在这里插入图片描述

B、深入理解

简单理解:1个字符也就是指一个文字,一个文字由两个字节组成;一个字节有8位,即 8bit位。例如:你好世界 一共四个字符,一个字符由两个字节组成,所以 2*4 = 8Byte,所以 你好世界 占用8Byte。

位、字节、字、双字 的关系:
在这里插入图片描述

六、有符号、无符号数规则理解

A、无符号数规则

你看到的数字是什么,那结果就是什么

1 0 0 1  1 0 1 0  十六进制:0X9A        十进制:154

B、有符号数规则

最高位是符号位:1(负数) 0(正数)

1 0 0 1  1 0 1 0 如何转换?

七 、原码反码补码

编码规则

有符号数的编码规则

原码:最高位符号位,对其他的位进行本身绝对值即可。
反码:

  • 正数:反码和原码相同
  • 负数:符号位一定是1,其余位对原码取反。

补码:

  • 正数:补码和原码一样。
  • 负数:符号位一定是1,其余位 反码+1
以8位的数字为例:

例:如果是正数,则原码、反码、补码都一样
1
#原码 0 0 0 0   0 0 0 1 
#反码 0 0 0 0   0 0 0 1 
#补码 0 0 0 0   0 0 0 1 
------------------------------
例:如果是负数
-1
#原码 1 0 0 0   0 0 0 1 
#反码 1 1 1 1   1 1 1 0 
#补码 1 1 1 1   1 1 1 1 
------------------------------
例:负数
-7
#原码 1 0 0 0   0 1 1 1 
#反码 1 1 1 1   1 0 0 0 
#补码 1 1 1 1   1 0 0 1 

注:寄存器中的存储规则 ,如果是正数就直接存,如果是负数则存储其补码。

八、位运算

计算机现在可以存储所有的数字(整数、浮点数、字符)均是以0 1 存储。

A、与运算(and &)

计算规则:都是1则为1,否则为零。
在这里插入图片描述

1011 0001
1101 1000
-------------------与运算
1001 0000

B、或运算(or |)

对应位 只要有1结果就为1,同时是0则为0
在这里插入图片描述

1011 0001
1101 1000
----------------或运算
1111 1001

C、非运算(单目运算符 not ~)

0就是1,1就是0 ,取反!

1101 1000
---------------取反运算
0010 0111

D、异或运算(xor ^)

相同位 不一样的为1
在这里插入图片描述

1011 0001
1101 1000
-----------------异或运算
0110 1001

E、左移(shl <<)

所有二进制位全部左移若干位,高位就丢弃了,低位补0。

0000 0001
-----------------左移操作
0000 0010

F、右移(shr >>)

所有二进制位全部右移若干位,低位就丢弃了,高位需要补0、1(由符号位决定)。

0000 0001
---------------右移
0000 0000

G、十进制进行位移运算

例子:
int a  = 10;
printf("%d\n",a>>2);//10右移2位,即10/4 = 2 (这里是整除)

H、位运算的加减乘除

计算机只认识0和1
加减乘除都是建立在”加“的基础上。
例子一:4+5 =? 计算机的计算规则

人类的计算方法:
按十进制方法算:
 4+5 = 9
按二进制方法算:
0000 0100
0000 0101
-----------------加法运算
0000 1001

即:4+5 = 0000 0100+0000 0101 = 0000 1001 = 9
======================================================
计算机的计算原理:
#第一步:异或。如果不考虑进位,异或就可以直接出结果。
0000 0100
0000 0101
-----------------异或运算
0000 0001

#第二步:与运算。(判断进位,如果与运算结果为0则没有进位)
0000 0100
0000 0101
------------------与运算
0000 0100

#第三步:将与运算的结果左移一位。
0000 0100
---------------左移一位
0000 1000

#第四步:异或(将第一步和第三步结果异或)。
0000 0001
0000 1000
----------------异或操作
0000 1001

#第五步:与运算。(判断进位,如果与运算结果为0,没有进位)
0000 0001
0000 1000
-----------------与运算
0000 0000

#第六步:最终的计算结果就是第四步中异或的结果。
4+5 = 9
0000 0100 +0000 0101 = 0000 1001 = 9


例子二:4-5 =?
本质也是转成加法计算,即4+(-5)
注意点:
1、负数存储的是补码。
2、1111 1111 =FF 即可以认为是16 也可以认为是 -1 和符号位有关系。

例子三:x*y
本质是y个x相加,还是按加法进行运算。

例子四:x/y
本质是减法,就是x能减去多少个y

计算机只会做加法!

九、汇编学习环境及必要说明

A、环境配置

  • Vc6
  • OD
  • 抓包工具 (fiddler)
  • 加密解密工具

B、通用寄存器

  • 32位的通用寄存器只有8个(EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI)
  • 存值的范围 0 ~ FFFF FFFF

C、计算机如何向寄存器存值

1、mov指令

可以将数字写入寄存器,也可以将寄存器中的值写到寄存器。

  • mov 存的地址 存的值
  • mov 存的地址1 存的地址1

2、不同的寄存器

32位     16位     8位     
EAX      AX        AL     
ECX      CX       CL    
EDX      DX       DL    
EBX      BX        BL    
ESP      SP        AH   
EBP      BP        CH    
ESI       SI          DH    
EDI       DI         BH    

8位:L低8位、H高8位

end

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

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

相关文章

opencv图像直方图

灰度直方图&#xff1a;从数学上来说&#xff0c;图像直方图是描述图像的各个灰度级的统计特性&#xff0c;它是图像灰度值的函数&#xff0c;统计图像中各个灰度级出现的次数或频率。从图像上来说&#xff0c;灰度直方图是一个二维图像&#xff0c;横坐标为图像中各个像素点的…

git stash命令用法详解(临时存储代码)

1、需求背景 有时候在开发过程中&#xff0c;在一个分支上&#xff08;dev1&#xff09;已经写了一部分代码&#xff0c;但是需要紧急切换到别的分支(dev2)上修改某个代码&#xff0c;这时候不能直接从dev1分支上切换到dev2分支上&#xff0c;提示你需要保存代码。此时dev1分支…

Linux内存模型

sparse内存模型前言1.SPARSEMEM原理:2.vmemmap在虚拟地址空间位置3.virt&#xff0c;phys&#xff0c;page&#xff0c;pfn之间的转换关系3.1内核态虚拟地址和物理内存地址转换关系3.2页帧pfn、物理内存的page指针的关系3.3其他快捷的转换总结前言 Linux中的物理内存被按页框划…

408 考研《操作系统》第二章第五节:信号量机制和用信号量机制实现进程互斥、同步、前驱关系

文章目录教程1. 信号量机制1.1 概念1.2 信号量机制——整型信号量1.3 信号量机制——记录型信号量&#xff08;important&#xff09;1.4 总结2. 用信号量机制实现进程互斥、同步、前驱关系2.1 信号量机制实现进程互斥&#xff08;important&#xff09;2.2 信号量机制实现进程…

java基于SpringBoot的在线答疑系统的研究与实现-计算机毕业设计

项目介绍 社会的发展和科学技术的进步&#xff0c;互联网技术越来越受欢迎。网络计算机的生活方式逐渐受到广大师生的喜爱&#xff0c;也逐渐进入了每个学生的使用。互联网具有便利性&#xff0c;速度快&#xff0c;效率高&#xff0c;成本低等优点。 因此&#xff0c;构建符合…

【matplotlib】2-使用统计函数绘制简单图形

文章目录使用统计函数绘制简单图形1.函数bar()--用于绘制柱状图2.函数barh()--用于绘制条形图3.函数hist()--用于绘制条形图4.函数pie()--用于绘制饼图5.函数polar()--用于绘制极线图6.函数scatter()--用于绘制气泡图7.函数stem()--用于绘制棉棒图8.函数boxplot()--用于绘制箱线…

openGauss洗冤录 之 copy from

openGauss洗冤录 之 copy from 引子 之前一篇《测评报告&#xff1a;文件导入哪家强&#xff1f;》关于openGauss性能与预期不符的问题留下了个坑&#xff0c;今天回来填坑。 前文提到使用openGauss的copy from导入csv文件耗时是mysql的2倍&#xff0c;是PostgreSQL的6倍&#…

下载nacos-server-1.1.4安装包,使用mvn打包

git官方地址下载nacos-server-1.1.4.zip速度太慢&#xff0c;码云上下载地址没有安装包。采用从码云上下载源码&#xff0c;自行打包。(https://gitee.com/mirrors/Nacos/tree/1.1.4)下载完成之后&#xff0c;进入项目目录如图 下载源码后 &#xff0c;解压 本地在本文件夹 在d…

这十套练习,教你如何用Pandas做数据分析(03)

练习3-数据分组 探索酒类消费数据 步骤1 导入必要的库 运行以下代码 import pandas as pd 步骤2 从以下地址导入数据 运行以下代码 path3 ‘…/input/pandas_exercise/pandas_exercise/exercise_data/drinks.csv’ #‘drinks.csv’ 步骤3 将数据框命名为drinks 运行以下代…

SpringBoot+Vue实现前后端分离的航空售票管理系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

JavaScript(一):编写位置、输入输出语句

JavaScript入门一、 JavaScript编写位置二、输入输出语句一、 JavaScript编写位置 &#xff08;1&#xff09;编写到script标签中 控制浏览器弹出一个警告框 alert("警告内容")让计算机在页面中输出一个内容 document.write() /*可以向body中输出一个内容*/向控制…

基于java+springboot+mybatis+vue+mysql的自媒体社区平台

项目介绍 近几年来自媒体平台的发展越来越迅猛&#xff0c;并逐渐成为新闻信息传播的主流模式&#xff0c;自媒体平台的内容构成没有主要的核心&#xff0c;新闻信息的探讨和传播环境比较自由&#xff0c;与此同时自媒体平台概念的应用与发展,赋予了普通民众发表自己感想的权利…

OneUI 5.5.0 for HTML/PHP/VueJS

OneUI 是一个高度通用的 Bootstrap 管理仪表板模板和 UI 框架&#xff0c;支持 Laravel&#xff0c;可让您以相同的速度和稳健的布局创建各种网站。它是使用 Sass 和 ECMAScript 6 (ES6) 开发的&#xff0c;并为开发人员提供了各种智能工具&#xff0c;如 webpack5、Babel 7、G…

如何避免SCI写作中的中式思维以及无处不在的Chinglish

现在随着全球经济的下行&#xff0c;很多小伙伴都选择了延时就业&#xff0c;因此更多的人开始考研和考博。新东方大学生学习与发展中心发布的《新东方2023考研报告》预测&#xff1a;2023考研报名将超过520万人。俗话说&#xff08;我道听途说的&#xff09;&#xff1a;一入科…

一文教你数据结构体栈和队列的实现

前言&#xff1a; 关于c语言的学习已经差不多更新完毕&#xff0c;如果发现个别知识点&#xff0c;我还会继续更新&#xff0c;但目前已经准备往c和数据结构的重心挪动&#xff0c;这篇文章就是向大家讲述数据结构中栈和队列的实现。 &#x1f49e; &#x1f49e; 欢迎来到小…

VoIP通话-基于SIP协议的Asterisk(一)-实现流程

文章首发及后续更新&#xff1a;https://mwhls.top/4122.html&#xff0c;无图/无目录/格式错误/更多相关请至首发页查看。 新的更新内容请到mwhls.top查看。 欢迎提出任何疑问及批评&#xff0c;非常感谢&#xff01; VoIP通话-基于SIP协议的Asterisk该篇仅包含实现流程&#…

实验12 动态查找2022

A. DS二叉排序树之创建和插入 给出一个数据序列&#xff0c;建立二叉排序树&#xff0c;并实现插入功能 对二叉排序树进行中序遍历&#xff0c;可以得到有序的数据序列 输入 第一行输入t&#xff0c;表示有t个数据序列 第二行输入n&#xff0c;表示首个序列包含n个数据 第…

Vue 基础详解 | 系统性学习 | 无知的我费曼笔记

无知的我正在复盘Vue 该笔记特点是 重新整理了涉及资料的一些语言描述、排版而使用了自己的描述对一些地方做了补充说明。比如解释专有名词、类比说明、对比说明、注意事项提升了总结归纳性。尽可能在每个知识点上都使用一句话 || 关键词概括更注重在实际上怎么应用提出并回答…

spring——AOP面向切面编程—— 自动代理——根据 Bean 名称创建代理对象根据切面中信息创建代理对象...

自动代理 在前面的案例中&#xff0c;所有目标对象(Target Bean)的代理对象(Proxy Bean)都是在 XML 配置中通过 ProxyFactoryBean 创建的。 但在实际开发中&#xff0c;一个项目中往往包含非常多的 Bean&#xff0c; 如果每个 Bean 都通过 ProxyFactoryBean 创建&#xff0c;那…

MySQL~InnoDB关键特性(插入缓存、俩次写、自适应哈希索引、异步IO

一般情况下&#xff0c;主键是行唯一的标识符。通常应用程序中行记录的插入顺序是按照主键递增的顺序进行插入的。因此&#xff0c;插入聚集索引一般是顺序的&#xff0c;不需要磁盘的随机读取。因为&#xff0c;对于此类情况下的插入&#xff0c;速度还是非常快的。 如果索引…