当前位置: 首页 > news >正文

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位,这个有点搞笑了,有没有懂得小伙伴能在评论区给我说一下。

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 力扣 24.两两交换链表中的节点
  • 华为杯”第十二届中国研究生数学建模竞赛-B题: 数据的多流形结构分析(续)
  • 云岚到家 第一天实战总结
  • 云栖实录 | 阿里云 OpenLake 解决方案重磅发布:多模态数据统一纳管、引擎平权联合计算、数据共享统一读写
  • 高等数学的后续课程
  • vue3开发中易遗漏的常见知识点
  • 公安局软件管理平台建设方案和必要性,论文-3-———未来之窗行业应用跨平台架构
  • HttpServletRequest简介
  • Flat File端口更新:如何实现嵌套结构
  • ubuntu 24.04 输入设备显示没有,系统没有找到电脑麦克风
  • mysql学习教程,从入门到精通,SQL 删除表(DROP TABLE 语句)(20)
  • Gnu Radio抓取WiFi信号,流程图中模块功能
  • Qt QFileDialog使用方法
  • 多重身份验证:保护数字生活的防线
  • 函数计算 FC:首发 GPU 极速模式,更弹性、更降本
  • [译] 怎样写一个基础的编译器
  • chrome扩展demo1-小时钟
  • golang 发送GET和POST示例
  • Java 多线程编程之:notify 和 wait 用法
  • JavaScript实现分页效果
  • Java基本数据类型之Number
  • JSDuck 与 AngularJS 融合技巧
  • Mysql5.6主从复制
  • pdf文件如何在线转换为jpg图片
  • Python_OOP
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 构建二叉树进行数值数组的去重及优化
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 前端临床手札——文件上传
  • 问题之ssh中Host key verification failed的解决
  • 小程序开发中的那些坑
  • 一个JAVA程序员成长之路分享
  • 最简单的无缝轮播
  • FaaS 的简单实践
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 专访Pony.ai 楼天城:自动驾驶已经走过了“从0到1”,“规模”是行业的分水岭| 自动驾驶这十年 ...
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • #nginx配置案例
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • (07)Hive——窗口函数详解
  • (2)nginx 安装、启停
  • (3) cmake编译多个cpp文件
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (四)c52学习之旅-流水LED灯
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (原創) 未来三学期想要修的课 (日記)
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .net core 控制台应用程序读取配置文件app.config
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET8使用VS2022打包Docker镜像