8086的指令系统

今天上午综测答辩结束,感觉就很一般,但是我昨晚也操心到觉都没睡好,今天中午舍友玩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.xdnf.cn/news/1544919.html

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

相关文章

显示屏显示缺陷检测系统源码分享

显示屏显示缺陷检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Comput…

k8s前置准备:配置虚拟机网络

目录 前言查看本机ip地址修改虚拟机配置修改linux配置配置其余linux机器的网络参考文献 前言 本文的最终目的是使虚拟机内可以访问互联网&#xff0c;虚拟机之间可以互相访问。 虚拟机使用的是vmware&#xff0c;环境是windows&#xff0c;虚拟镜像是linux系统。 使用桥接模式…

企业微信VS钉钉:高效办公工具推荐!

这两者各有千秋&#xff0c;适合不同的办公场景。企业微信的优势在于与微信的紧密集成&#xff0c;便于与客户沟通&#xff0c;适合需要频繁与外部联系的企业。它提供了基本的办公自动化功能&#xff0c;如团队协作、审批、日程等。 钉钉则在企业管理和团队协作方面功能更全面…

Snubber电路设计

思路总结&#xff1a; 1.根据测试和推算得出FRA(震荡频率)&#xff0c;进而推算出Cp(寄生电容)&#xff0c;再根据LRC关系式推算出LP和CP,后续的Csn(吸收电容)和Rsn(吸收电阻)。得出初步的参数然后再PCBA上进行微调就可以实现通用Snub电路的设计。

解决Mac 默认设置 wps不能双面打印的问题

目录 问题描述&#xff1a; 问题解决&#xff1a; 问题描述&#xff1a; 使用mac电脑的时候&#xff0c;发现wps找不到双面打印的按钮&#xff0c;导致使用wps打开的所有文件都不能自动双面打印 问题解决&#xff1a; mac的wps也是有双面打印的选项&#xff0c;只是默认被关…

clinvar中ReviewStatus

ReviewStatus, character, review status for the aggregate germline classification for this variant. For the key to the terms, and the stars displayed on ClinVar web pages 详细介绍: Number of gold starsReview statusDescriptionfourpractice guidelineThere is …

【JavaScript】LeetCode:51-55

文章目录 51 验证二叉搜索树52 二叉搜索树中第k小的元素53 二叉树的右视图54 二叉树展开为链表55 从前序与中序遍历序列构造二叉树 51 验证二叉搜索树 递归对二叉搜索树进行中序遍历&#xff0c;输出节点的值是单调递增的。方法1&#xff1a;对二叉树进行中序遍历&#xff0c;将…

若依_配置三级菜单或多级菜单

若依直接在router文件里配置的&#xff0c;没有在若依的菜单管理里配 然后也出现了上面链接里的那个中出现头部、左侧菜单和面包屑的情况 完整代码 {path: /zichan,meta: { title: 零星资产处置审批, icon: dashboard, affix: true, noCache: true },component: Layout,// red…

WebRtc实际应用

1、什么是WebRtc 1.1 概述 随着网络技术的快速发展&#xff0c;实时通讯变得越来越重要。WebRtc(web Real-Time Communication)技术应运而生。WebRtc是一个支持在浏览器进行实时语音&#xff0c;视频通信和数据传输的开放项目&#xff0c;它可以在不需要安装任何插件或者第三方…

MySQL:进阶巩固-存储过程

目录 一、存储过程的概述二、存储过程的基本使用2.1 创建存储过程2.2 使用存储过程2.3 查询指定数据库的存储过程以及状态信息2.4 查看某个存储过程的定义2.5 删除存储过程2.6 案例 三、存储过程的变量设置3.1 系统变量3.2 用户自定义变量3.3 局部变量 四、IF判断五、参数六、C…

【BetterBench博士】2024年中国研究生数学建模竞赛 E题:高速公路应急车道紧急启用模型 问题分析、数学模型及Python代码

2024年中国研究生数学建模竞赛 E题&#xff1a;高速公路应急车道紧急启用模型 问题分析 更新进展 【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析 【BetterBench博士】2024年中国研究生数学建模竞赛 E题&#xff1a;高速公路应急车道紧急启用…

物联网实践教程:微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制 远程上报和接收数据——汇总

物联网实践教程&#xff1a;微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制 远程上报和接收数据——汇总 前言 之前在学校获得了一个新玩意&#xff1a;ESP-01sWIFI模块&#xff0c;去搜了一下这个小东西很有玩点&#xff0c;远程控制LED啥的&#xff0c;然后我就想…

多校园信息付费发布顶置自定义表单小程序开源版开发

多校园信息付费发布顶置自定义表单小程序开源版开发 为校园管理和互动提供了强大的支持&#xff0c;包括用户端和运营后台两大部分。用户端允许学生和教职工方便地访问各种功能模块&#xff0c;而运营后台则使管理员能够高效地管理和配置系统。产品支持自定义模块和表单&#…

CUDA编程三、C++和cuda实现矩阵乘法SGEMM

目录 一、矩阵SGEMM 二、SGEMM的各种实现 1、cpu版本的实现 2、GPU并行计算最初始的版本 GPU中数据的移动 3、矩阵分块Shared Memory优化 4、LDS.128 float4* 优化 5、__syncthreads()位置优化 6、blank conflict优化 bank概念 bank conflict bank conflict危害和处…

c++ 继承 和 组合

目录 一. 继承 1.1 继承的概念 1.2 继承定义 1.3 继承类模板 1.4. 继承中的作用域 二. 派生类&#xff08;子类&#xff09;的默认成员函数 2.1 概念&#xff1a; 2.2 实现⼀个不能被继承的类 2.3 继承与友元 2.4继承与静态成员 三.多继承及其菱形继承问题 3.1继承方…

yolov10算法原理

文章目录 1. 模型效果2. 模型特点2.1 无NMS训练的一致性双重分配策略 (Consistent Dual Assignments for NMS-free Training)双重标签分配 (Dual Label Assignments)一致匹配度量&#xff08;Consistent Match. Metric&#xff09;一对一分配在一对多结果中的频率 2.2. 效率-准…

电场(electric-field)

图中&#xff1a; Q 产生电场的正电荷&#xff08;可正可负&#xff0c;这里用正举例&#xff09;q 试验电荷&#xff0c;正电荷&#xff08;习惯上用正电荷&#xff09;p 试验电荷所在的位置&#xff08;即要测的电场强度的位置&#xff09;r 为电荷间的距离 r ^ \widehat{r}…

[js逆向学习] fastmoss电商网站——店铺排名

逆向目标 网站&#xff1a;https://www.fastmoss.com/shop-marketing/tiktok接口&#xff1a;https://www.fastmoss.com/api/shop/shopList/参数&#xff1a;fm-sign 逆向分析 我们今天要分析的是店铺排名&#xff0c;先分析网络请求&#xff0c;找到目标接口 按照上图操作…

怎样批量对比两个数据库的表差异??

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

38.重复的子字符串

方法1&#xff1a; class Solution {public boolean repeatedSubstringPattern(String s) {if (s.equals("")) return false;String s2(ss).substring(1,(ss).length()-1);//去掉首尾字符return s2.contains(s);//判断是否包含s} } class Solution(object):def rep…