8086的指令系统

news2024/9/24 23:43:29

今天上午综测答辩结束,感觉就很一般,但是我昨晚也操心到觉都没睡好,今天中午舍友玩P5吵得我也没睡着,感觉脑袋昏昏沉沉,汇编上课没认真听讲,晚上来补一补。还是采用GPT来讲解(水文字),我写一些个人看法的方式,

首先,8086指令系统有以下六种:

我不知道为什么?新版QQ截图的时候老是屏幕变黑或者变灰。

一、数据传送类指令

通用数据传送类指令

1、传送指令MOV:

mov  dest,src;    dest<-src

这个就是把src传给dest.

其中有很多形式:

mov   reg/mem, imm;                立即数送寄存器或主存

mov   reg/mem/seg , reg;         寄存器送寄存器(包括段寄存器)或主存

mov   reg/seg, mem;                主存送寄存器(包括段寄存器)

看这上面的注意点:两个段寄存器之间不能直接传数据,并且立即数不能直接送入段寄存器里面。

标红的是错误的汇编语法,其实上面的mov dl,ax和mov [1000H],[2000H]也是错误的。为什么?

mov dl,ax错是因为ax是16位dl放不下,mov [1000H],[2000H]错是因为8086不支持内存空间转移到内存空间。假如你要做内存空间转移的操作,用寄存器做中介。

mov ax,buffer1

mov buffer2,ax   这是书上给出的例子。

关于为什么立即数不能直接送入段寄存器里面,据说是因为由于立即数直接写入段寄存器这样的指令,被翻译成机器码之后将占用更多的字节,在事先规定的指令长度范围内无法存贮下这么多的内容,因此改由先写入通用寄存器,再由通用寄存器写入段寄存器的办法代替。立即数实际上是相当占地方的。也就是说立即数写入通用寄存器的机器码比较短吧。要记住这就是8086的设计?

这里插播一个知识点:以字母打头的立即数前面要加一个前导0.原因不想打字了。

另外mov中还有byte和word这2个关键字,其实8086是16位微处理器,所以word就是16位,byte是8位。观察这个指令:

mov  al, 050ahl;   这肯定是非法指令啊!050ah是字,al是字节,你怎么塞的下?

2、交换指令XCHG:

这是老师的PPT,但是我觉得有点小问题:

问题出在  XCHG  mem,mem  的形式是非法的。

OK?XCHG指令可以在通用寄存器与通用寄存器或存储器之间对换数据,但是不能在存储器与存储器之间交换数据。

这是给出的注意点,上面也提到不能同时位mem.

XCHG怎么记住呢?我们知道对换是exchange,这里取xchg,我猜的,就这样记吧。

3、换码指令XLAT

这个是老师课上讲的最抽象的。当时我确实没听,开摆了。

xlat的作用是将BX指定的缓冲区中,AL指定的位移处的数据取出来赋给AL。

现在我感觉就是一种查表。

这里等价于把AH设置为0(AL不受影响),所以BX加上AX就是相当于BX位移了AL的距离,然后把现在的BX内存中的值给AL。有没有感觉像是数组:

A【n】,你的BX就是数组头指针A,然后AL就是n呀。所以这是一种查表时候用的命令。

        PPT的例二没看懂,不想说了。

堆栈操作类指令

堆栈感觉不用多说,毕竟这个数据结构挺常见,有没有做过判断有效括号的题、有没有做过单调栈问题,这玩意有时也很有难度。

1、进栈指令PUSH

比如push   【2000h】是什么意思?

千万别说是将主存2000h地址内存的数据压栈。

应该是DS:【2000h】.这才是正确的。

另外要记住一点,进栈的话SP是减2。

2、出栈指令POP

标志寄存器传送指令

这个东西我不知道重不重要,我只记得老师讲这里的时候我根本就没听,当时感觉啥都听不进去了。

我觉得要理解这里首先要复习一下标志寄存器:

标志寄存器里面有一堆标志(雾)

LAHF就是把标志寄存器低8位填到AH里面。

这里还有7个标志处理指令,单独拿出来也是一条汇编语句。

这个sti是开中断,cli是关中断。这个在操作系统实验课的代码中操作过。其他的也类似,反正都是一些对标志状态寄存器的操作,也不知道会怎么考。毕竟我现在只关注这个,开始混日子了。

地址传送指令

地址传送指令将存储器的逻辑地址送至指定的寄存器。

这个LEA就是传有效地址,

平时我们看到

mov  bx,[bx+si+0f62h]这个意思是把这个地址内存单元里面的数移到bx里面

但是

lea  bx,[bx+si+0f62h]是把这个有效地址给BX。

我觉得他等价于 mov bx,bx+si+0f62h;

所以为什么不直接用mov bx,bx+si+0f62h;非要lea  bx,[bx+si+0f62h]。这样还多出一个LEA指令码,让我觉得很匪夷所思,到底是谁脑子有问题?是我吗?

还有个LDS指令和LES指令我有点看不懂。

8086具有20条地址总线,这使得8086能够直接寻址的最大内存空间为2^20(即1MB)字节,地址范围从00000H到FFFFFH。

为啥Mem32能窜出32位,这个有点搞笑了,有没有懂得小伙伴能在评论区给我说一下。

今天就更到数据传送类搞完。明天写算术运算指令,这个很难。

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

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

相关文章

Unity开发绘画板——02.创建项目

1.创建Unity工程 我们创建一个名为 DrawingBoard 的工程&#xff0c;然后先把必要的工程目录都创建一下&#xff1a; 主要包含了一下几个文件夹&#xff1a; Scripts &#xff1a;存放我们的代码文件 Scenes &#xff1a;工程默认会创建的&#xff0c;存放场景文件 Shaders &…

9.22日常记录

1.memccpy函数 memccpy是一个用于内存复制的函数&#xff0c;它的原型通常在<cstring>&#xff0c;memccpy函数的作用是从源内存区域复制字节到目标内存区域&#xff0c;直到遇到特定的字符或者复制了指定数量的字节为止。 返回值: 如果在复制过程中找到了指定的字符&am…

科大讯飞智能体Python SDK接入流程

第一步&#xff1a;注册账号​ 进入https://passport.xfyun.cn/login&#xff0c;根据提示注册或登陆账号。 ​ 第二步&#xff1a;创建智能体 进入这个网页创建智能体&#xff0c;填好信息&#xff1a; https://xinghuo.xfyun.cn/botcenter/createbot?createtrue&qu…

lkhgjfjghkbhjk

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

http增删改查四种请求方式操纵数据库

注意&#xff1a;在manage.py项目入口文件中的路由配置里&#xff0c;返回响应的 return语句后面的代码不会执行&#xff0c;所以路由配置中每个模块代码要想都执行&#xff0c;不能出现return 激活虚拟环境&#xff1a;venv(我的虚拟环境名称&#xff09;\Scripts\activate …

ubuntu下检查端口是否占用问题,编写shell脚本检查端口是否占用

1.创建脚本 touch check_port.sh2.粘贴以下内容到check_port.sh中 #!/bin/bash# 检查端口是否被占用的函数 check_port() {local port80local result$(sudo lsof -i:$port)if [[ -z "$result" ]]; thenecho "端口 $port 未被占用。"elseecho "警告:…

水电站/水库大坝安全监测系统完整解决方案

一、背景 在当今社会&#xff0c;随着全球对清洁能源需求的日益增长&#xff0c;水电站作为可再生能源的重要组成部分&#xff0c;其安全稳定运行显得尤为重要。水电站&#xff0c;尤其是大型水库大坝&#xff0c;不仅承载着发电、防洪、灌溉等多重功能&#xff0c;还直接关系…

二分查找法求解一元三次方程组

本题使用二分查找求解 #include <iostream> #include <algorithm> #include <cmath> using namespace std;double a,b,c,d;// 求出方程的值 double f(double x) {return a*pow(x,3)b*pow(x,2)c*xd; }void find(double l,double r) {// 若精度在可控范围内…

每日一练:二叉树的层序遍历

102. 二叉树的层序遍历 - 力扣&#xff08;LeetCode&#xff09; 一、题目要求 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,n…

Python常见Json对比库deepdiff、json_tools、jsonpatch

对比两个json对象差异&#xff0c;常见的第三方对比库deepdiff、json_tools、jsonpatch都能够满足我们的需求。 用法&#xff1a; deepdiff from deepdiff import DeepDiffa {"name": "yanan", "pro": {"sh": "shandong"…

【微服务即时通讯系统】——etcd一致性键值存储系统,etcd的介绍,etcd的安装,etcd使用和功能测试

文章目录 etcd1. etcd的介绍1.1 etcd的概念 2. etcd的安装2.1 安装etcd2.2 安装etcd客户端C/C开发库 3. etcd使用3.1 etcd接口介绍 4. etcd使用测试4.1 原生接口使用测试4.2 封装etcd使用测试 etcd 1. etcd的介绍 1.1 etcd的概念 Etcd 是一个基于GO实现的 分布式、高可用、一致…

第十五章 文件上传

目录 一、文件上传注意点 二、JavaWeb上传文件的核心 三、常规的JavaWeb上传实现 四、运行效果 一、文件上传注意点 1. 为保证服务器安全&#xff0c;上传文件应该放在外界无法直接访问的目录下&#xff0c;比如放于WEB-INF目录下。 2. 为防止文件覆盖的现象发生&#xff…

[万字长文]stable diffusion代码阅读笔记

stable diffusion代码阅读笔记 获得更好的阅读体验可以转到我的博客y0k1n0的小破站 本文参考的配置文件信息: AutoencoderKL:stable-diffusion\configs\autoencoder\autoencoder_kl_32x32x4.yaml latent-diffusion:stable-diffusion\configs\latent-diffusion\lsun_churches-ld…

Unity图形用户界面!*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。(万字解析)

Unity 3D GUI 简介 游戏开发过程中&#xff0c;开发人员往往会通过制作大量的图形用户界面&#xff08; Graphical User Interface&#xff0c;GUI &#xff09;来增强游戏与玩家的交互性。 Unity 3D 中的图形系统分为 OnGUI、NGUI、UGUI等&#xff0c;这些类型的图形系统内容…

springboot项目引入了第三方jar包

应该把jar包放在resource目录下&#xff0c;新建一个lib目录放进去&#xff0c;不然打包的时候会报错找不到jar包&#xff0c;放入jar包&#xff0c;右键添加到库&#xff0c;才可以使用。 _g().startMarquee();

解决方案 | 镭速助力动漫游戏行业突破跨网文件交换瓶颈

在数字化浪潮推动下&#xff0c;动漫游戏行业蓬勃发展。随着高清技术的普及和云游戏的兴起&#xff0c;动漫游戏行业对动画的画质要求越来越高&#xff0c;数据量呈现爆炸式增长。然而&#xff0c;行业内的跨网文件交换难题也日益凸显&#xff0c;成为制约行业发展的瓶颈。 行业…

RTE大会报名丨 重塑语音交互:音频技术和 Voice AI,RTE2024 技术专场第一弹!

Voice AI 实现 human-like 的最后一步是什么&#xff1f; AI 视频爆炸增长&#xff0c;新一代编解码技术将面临何种挑战&#xff1f; 当大模型进化到实时多模态&#xff0c;又将诞生什么样的新场景和玩法&#xff1f; 所有 AI Infra 都在探寻规格和性能的最佳平衡&#xff0…

考研数据结构——C语言实现插入排序

插入排序是一种简单直观的比较排序算法&#xff0c;它的工作原理是通过构建有序序列&#xff0c;对于未排序数据&#xff0c;在已排序序列中从后向前扫描&#xff0c;找到相应位置并插入。插入排序在实现上&#xff0c;通常采用in-place&#xff08;原地排序&#xff09;&#…

BUUCTF [SCTF2019]电单车

使用audacity打开&#xff0c;发现是一段PT2242 信号 PT2242信号 有长有短&#xff0c;短的为0&#xff0c;长的为1化出来 这应该是截获电动车钥匙发射出的锁车信号 0 01110100101010100110 0010 0前四位为同步码0 。。。中间这20位为01110100101010100110为地址码0010为功…

neo4j小白入门

1.建立几个学校的节点 1.1创建一个节点的Cypher命令 create (Variable:Lable {Key1:Value,Key2,Value2}) return Variable 1.2创建一个学校的节点 create (n:School{name:清华大学,code: 10003,establishmentDate:date ("1911-04-29")})return n 1.3一次创建几个…