微机原理笔记(4)

一、数据传送指令

1、数据传送指令MOV

  • 语句格式:MOV  OPD,OPS
  • 功能:将源操作数传入目的地址,源地址内容不变。即(OPS)-->OPD

注意: 

  • MOV指令不改变源操作数内容不影响标志位
  • 源操作数和目的操作数应该有相同的类型,即必须同为字节型或字型。
  • 代码段寄存器CS不能用作目的操作数,即不允许给CS赋值
  • 立即数不能用作目的操作数,立即数也不能直接传送数据给段寄存器
  • 源操作数和目的操作数不能同时为存储单元操作数
  • 不允许在段寄存器之间直接传送数据

2、进栈指令PUSH

  • 语句格式:PUSH    SRC
  • 功能:将寄存器、段寄存器或存储器中的一个字数据压入堆栈,堆栈指针减2
       即:(SP)-2 --> SP 

3、出栈指令POP

  • 语句格式:POP  OPD
  • 功能:将栈顶元素弹出送至某一寄存器、段寄存器(CS除外)或存储器,堆栈指针加2。

4、数据交换指令XCHG

  • 语句格式:XCHG   OPR1,OPR2
  • 功能:将源地址与目的地址中的内容互换。 

5、累加器专用传送指令:输入指令IN/输出指令OUT 

  • 输入指令用来从指定的外设寄存器取信息送入累加器。
  • 此指令实现I/O端口CPU之间的数据传送。
    • 输入指令  IN    acc,PORT/DX
    • 输出指令  OUT   PORT/DX,acc
  • 指令采用两种寻址方式:
    • 直接寻址:在指令中直接给出端口的8位地址,因此可寻址256个端口
    • 间接寻址:在指令中用寄存器DX给出端口的16位地址,因此可寻址65536个端口
  • 用输入指令完成从输入端口到CPU的数据传送
  • 用输出指令完成从CPU到输出端口的数据传送 

注意:

  • 输入/输出指令只能使用累加器AL或AX接收或发送数据。
  • 使用短格式指令,必须将端口地址放入寄存器DX中。
  • 输入/输出指令不影响标志位 

6、地址传送指令

1、有效地址传送指令LEA

  • 格式:LEA   OPD,OPS
  • 功能:主存按源地址的寻址方式计算偏移地址,将偏移地址送入指定寄存器。
  • 补充:以下两条语句等效
    • MOV  BX,OFFSET   NUM;将NUM的偏移地址送入BX中
    • LEA   BX,NUM    ;将NUM的偏移地址送入BX中

2、指针送寄存器和DS指令LDS

  • 格式:LDS    OPD , OPS
  • 功能:将主存中指定字单元数据送入指定存储器下一字单元数据送DS寄存器
  • 即(OPS)--> OPD,(OPS+2)-->DS

3、指针送寄存器和附加数据段ES指令LES 

  • 格式:LES   OPD,OPS
  • 功能:将主存某字节单元内容送指定寄存器,下一字单元数据送ES寄存。
    • 即(OPS)-->OPD,(OPS+2)--> ES。

二、算术运算指令

1、加法指令ADD、带进位加指令ADC

  • 格式:ADD   DST,SRC;

  • 指令的功能是把源操作数的值加到目的操作数中。

  • 根据结果设置FLAGS的OF,SF,ZF,AF,PF和CF标志位 

  • 格式:ADC   DST,SRC;
  • 指令的功能是把源操作数和进位标志位CF的值(0/1)一起加到目的操作数中 
  •  加1指令INC
    • 格式:INC   OPR;
    • 功能:把操作数的值加1(不影响CF
  • 交换加指令XADD
    • 格式:XADD   oprd1,oprd2;
    • 功能:交换两个操作数的值,再进行算术“加”法操作。

2、减法指令SUB

  • 格式:SUB   DST,SRC ;
  • 功能:目的操作数(DST)减去源操作数(SRC)
  • 影响六个状态标志,AF为半借位,CF为借位

带借位减SBB 

  • 格式:SBB   DSI,SRC;
  • 把源操作数和标志位CF的值从目的操作数中一起减去。

减1指令DEC

  • 格式:DEC   OPR;
  • 把操作数的值减去1(不影响CF

求补指令NEC

  • 格式:NEC   OPR;
  • 功能:操作数= 0 - 操作数。 

比较指令CMP

  • 格式:CMP   OPD,OPS     
  • 功能:目的操作数减源操作数,与SUB指令一样执行减法操作,但不回送相减结果,结果只影响标志位
  • (OPD)-(OPS)。CMP指令通常用在选择结构程序中,其后紧跟着条件转移指令,用来根据比较结果转向不同的程序分支。

3、乘法指令MUL

无符号乘法指令MUL

  •  格式:MUL    src
  • MUL为操作码助记符;src为源操作数(乘数),也可以是寄存器或存储单元,但不能使用立即数或段寄存器。
  • 功能:两个无符号数相乘。
    • 字节乘法:AX <--(AL)*(src)
    • 字乘法:DX(高字),AX(低字)<--(AX)*(src)
  • 注意:指令中只指定乘数,被乘数默认在寄存器ALAX。该指令只影响状态标志CF和OF,对其它标志位无定义。

有符号乘指令IMUL

  • 格式:IMUL   SRC
  • 功能:
    • 字节乘法:(AL)*(SRC)--> AX
    • 字乘法:(AX)*(SRC)--> DX、AX
  • IMUL指令除计算对象是带符号二进制数外,其他都与MUL一样,但计算结果不同。

4、除法指令DIV

除法指令的被除数是隐含操作数,除数在指令中显式地写出来。
除法指令功能是用显式操作数除隐含操作数,可得到余数。当除数为0,或商超出数据类型所能表示的范围时,系统会自动产生0号中断。

无符号除指令DIV

  • 格式:DIV   OPS;
  • 功能:
    • 字节除法:(AX)/(OPS)--> AL(商)、AH(余数)
    • 字除法:(DX、AX)/(OPS) -->  AX(商)、DX(余数)

有符号除指令IDIV

  • 格式:IDIV   OPS;
  • 功能:
    • 字节除法:(AX)/(OPS)-->  AL(商)、AH(余数)
    • 字除法:(AD、AX)/(OPS)-->  AX(商)、DX(余数)
  • 8086/8088规定IDIV指令运算结果余数的符号与被除数相同
  • 除法指令DIV和IDIV虽然对标志位的影响未定义,但可产生溢出

字节转换成字指令CBM

  • 格式:CBM
  • 功能:将AL中的符号位数据扩展至AH(补0)。

字转换为双子指令CWD

  • 格式:CWD
  • 功能:将AX中数的符号扩展到DX中。若AX中的数为正数,则(DX)=0000,否则(DX)=0FFFFH

5、十进制调整指令BCD码

  • BCD码是一种用二进制编码的十进制数,又称二一十进制数。
  • ...略* 

三、逻辑运算和移位指令 

1、逻辑指令

逻辑指令对字节或字数据进行按位的运算操作。

  • 逻辑与AND   DST,SRT;-->(DST)
    设置CF=OF=0,影响SF、ZF、PF、对AF无定义
  • 逻辑或OR    DST,SRC;-->(DST);标志同上
  • 逻辑非NOT  OPR;-->(OPR);不影响标志位
  • 异或XOR   DST,SRC;-->(DST);标志同AND
  • 测试TEST   OPR1,OPR2;运算与AND相同,但不保存结果,只根其特征置条件标志。 

2、移位指令 

移位指令从移位方向上分为左移或右移;从移位功能上可以分为算术逻辑移位或循环移位,前者是开环的;后者是闭环的;从位移次数上可以分为一次移位或多次移位。

逻辑左移指令SHL

  • 格式:SHL   OPD,1  或  SHL   OPD, CL
  • 功能:将OPD的内容向左移动指定的位数最高位移入CF中,低位补0

算术左移指令SAL

  • 格式:SAL   OPD,1 或 SAL   OPD,CL
  • 功能:其操作与逻辑左移指令SHL完全相同

逻辑右移指令SHR

  • 格式:SHR   OPU,1 或 SHR   OPD , CL
  • 功能:将OPD的内容向右移动指定的位数最低位移入CF中,高位补0

算术右移指令SAR

  • 格式:SAR  OPD,1 或 SAR  OPD,CL
  • 功能:将OPD的内容向右移动指定的位数最低位移入CF中,最高位保持不变

循环左移指令ROL

  • 格式:ROL   OPD,1ROL   OPD,CL
  • 功能:将OPD的内容向左移动指定的位数最高位同时移入最低位CF

  • 循环位移可以改变操作数中原有位的位置

循环右移指令ROR

  • 格式:ROR   OPD,1 或 ROR   OPD,CL
  • 功能:将OPD的内容向右移动指定的位数最低位同时移入最高位CF中。

带进位的循环左移指令RCL

  • 格式:RCL   OPD,1 或 RCL   OPD,CL
  • 功能:将OPD的内容连同CF标志一起向左循环所规定的位数。

四、串操作指令

为8086提供一组处理主存中连续存放数据串的指令

1、与REP相配合工作的MOVS,STOS和LODS指令

 REP重复串操作

  • REP前缀用在串传送指令MOVS存入串指令STOS从源串中取数指令LODS指令
  • 功能:每执行一次串指令(CX)-1,直到(CX)=0,重复执行结束。
  • 例:REP  MOVS

MOVS串传送指令

  • 格式:
    • MOVSB----字节串传送
    • MOVSW----字串传送
  • 功能:将以SI为指针的源串中的一个字节(或字)存储单元中的数据传送至以DI为指针的目的地址中,并自动修改指针使之指向下一个字节(或字)存储单元。 

存入串指令STOS

  • 格式:
    • STOSB----往字节串中存数
    • STOSW----往字串中存数
  • 功能:将AL或AX中的数据送入DI所指的目的串中的字节(或字)存储单元中。
  • 即字节操作:(AL)--> [DI]
        字操作:(AX)-->[DI]
  • 修改指针DI,使之指向串的下一个元素

从源串中取数指令LODS指令

  • 格式:
    • LODSB----从字节串中取数
    • LODSW---从字串中取数
  • 功能:将SI所指的源串中的一个字节(或字)存储单元中的数据取出来送入AL(或AX)中。
  • 即:字节操作:([SI])-->AL,字操作:([SI])--> AX
         修改指针SI,使它指向串中的下一个元素。
  • 当DF=0,(SI)增量。当DF=1时,(SI)减量。

2、与REPE/REPZ和REPNE/REPNZ联合工作的串比较指令CMPS和串扫描指令SCAS 

REPE/REPZ

  • 某次比较的结果两个操作数相等,或两个操作数相减为零重复串操作
  • 一般用在CMPS,SCAS指令前。
  • 功能:每执行一次串指令(CX)-1,并判断ZF标志是否为0,只要(CX)=0或ZF=0,则重复执行结束。

REPNE/REPNZ

  • 某次比较的结果两个操作数不相等,或两个操作数相减不为零时重复串操作。
  • 一般用在CMPS,SCAS指令前。
  • 功能:每执行一次串指令(CX)-1,并判断ZF标志是否为0,只要(CX)=0或ZF=1,则重复执行结束。

CMPS串比较指令

  • 格式:
    • CMPSB----字节串比较
    • CMPSW---字串比较
  • 功能:将SI所指的源串中的一个字节(或字)存储单元中的数据与DI所指的目的串中的一个字节(或字)存储单元的数据相减,并根据相减结果设置标志,单结果不保存
  • 即:([SI])-([DI])
        修改串指针,使之指向串中的下一个元素。

串扫描指令SCAS

  • 格式:
    • SCASB---字节串搜索
    • SCASW---字串搜索
    • 功能:AL(字节)或AX(字)中的内容与DI所指的目的串中的一个字节(或字)存储单元中的数据相减,根据相减结果设置标志位结果不保存
    • 即:字节操作:(AL])-([DI])字操作:(AX])-([DI])
          修改串指针,使之指向串中的下一个元素。
    • 当DF=0,(DI)增量。当DF=1时,(D)减量。

五、控制转移指令

1、无条件转移指令

段内转移指令JMP

  •  格式:
    • 段内直接短转移:JMP   SHORT   OPR;(IP)<--(IP)+8位位移量
    • 段内直接近转移;  JMP    NEAR    PTR    OPR;(IP)<--(IP)+16位位移量
    • 段内间接转移: JMP    WORD   OPR;(IP)<--(EA),WORD、PTR是运算符

段间转移指令

  • 格式:
    • 段间直接(远)转移  JMP    FAR   PTR   OPR;   IP<--P[R的端内偏移地址,CS<-OPR的段地址
    • 段间间接转移   JMP   DWORD   PTR   OPR;IP<--(OPR)段内偏移地址,CS<--(OPR+2)

2、条件转移指令 

条件转移指令将前一条指令执行结果对状态标志位的影响,作为程序转移的条件。满足条件时转移到指令指定的地址,否则将顺序执下条指令。可作为判断条件的状态标志位有CF、DF、ZF、SF和OF。

条件转移指令都是采用相对寻址方式的双子节指令,操作码+位移量。不影响状态标志。

测试寄存器CX的值为0转移指令

  • 格式:
    • JCXZ   OPR:  (CX)=0则转移
  • 此指令在循环结构的程序中,将寄存器CX用作计数器,根据寄存器CX内容的修改情况实现二分支转移

3、循环控制指令

(1):LOOP    OPR(CX)不等于0 循环,否则顺序执行

(2):为零/相等循环:LOOPZ/LOOPE   OPR;当ZF=1且(CX)不等于0则循环。反之

(3):不为零/不相等循环:LOOPNZ/LOOPNE;与上相反

注意:

  • 使用循环控制指令之前,必须在寄存器CX(作为计数器)中预置循环次数的初值
  • 执行循环控制指令时,将完成(IP)<--(IP)+8位位移量(符号位扩展到16位)的操作
  • 循环控制指令不影响状态标志位
  • 循环控制指令主要用于数据比较、查找关键字等操作 

六、处理器控制指令

1、子程序调用及返回指令

调用指令CALL

  • 段内直接调用CALL   DST;(SP)<--(SP)-2
  • 例:
    • CALL   3000H:指令直接给出调用地址3000H
    • CALL  NEAR  PTR   SUBR;指令直接给出调用的“近”过程名SUBR
      • :NEAR   PTR是段内调用运算符。
    • 段内间接调用CALL   DST;

返回指令RET

  • 段内返回RET

2、中断指令

  •  计算机程序运行期间遇到某些特殊情况时,需要CPU停止当前的程序转去执行一组专门的程序,这种情况称为中断,这组程序称为中断服务程序。
  • 8086中断分为外部中断内部中断。外部中断通过外部设备接口向CPU的中断请求引脚发出请求,内部中断则由CPU执行中断指令而产生
  • 中断指令:INT    TYPE
  • 溢出中断指令:INTO;当运算结果溢出时OF=1并产生中断。
  • 中断返回   IRET;

3、其它处理机控制指令

空操作指令NOP

  • 格式:NOP
  • 此指令为单字节指令,不执行任何操作,只起到占用存储器空间时间延迟的作用。
  • 处理器控制指令中,只有状态标志位操作指令影响指定的标志位,其他指令不影响。

停机指令HLT

  • 格式:HLT
  • 此指令可暂停计算机工作,使处理器处于停机状态,用于等待一次外部中断的产生,中断结束后,继续执行下面的程序。

等待指令WAIT

  • 格式:WAIT
  • 此指令使处理器处等待状态,也可以用来等待外部中断发生,但中断结束后仍返回WAIT指令继续等待。本指令不允许使用立即数和寄存器寻址方式

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

敏捷研发管理流程及示例

Leangoo领歌是一款永久免费的专业的敏捷开发管理工具&#xff0c;提供端到端敏捷研发管理解决方案&#xff0c;涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。 Leangoo领歌上手快、实施成本低&#xff0c;可帮助企业快速落地敏捷&#xff0c;提质增效、缩短周期、加速创新…

深度学习在工地安全帽识别技术的应用与展望

当我们谈论“工地安全帽识别”时&#xff0c;实际上我们在探讨的是如何利用深度学习图像识别技术来提高建筑工地的安全性。这一技术的应用可以显著提高工地安全管理的效率和有效性&#xff0c;是现代建筑工程管理中不可或缺的一部分。以测评的北京富维图像的工地安全帽识别为例…

代码随想录day20 开始二叉搜索树

654.最大二叉树 题目 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下&#xff1a; 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大二叉树。 通过给定的数组构…

js逆向第9例:猿人学第2题-js混淆-动态cookie1

题目2:提取全部5页发布日热度的值,计算所有值的加和,并提交答案 (感谢蔡老板为本题提供混淆方案) 既然题目已经给出了cookie问题,那就从cookie入手,控制台找到数据请求地址 可以看到如下加密字符串m类似md5,后面跟着时间戳 m=45cc41dcdb15159ebb50564635f8e362|1704301…

MySQL数据管理(一)

一、列类型 列类型指规定数据库中该列存放的数据类型 列类型分类 数值类型字符串类型日期和时间型数值类型 数值类型 字符串类型 日期和时间类型 MySQL允许“不严格”语法&#xff0c;任何标点符号都可以作为日期部分之间的间隔符&#xff0c;如“24-01-03”、“24.01.03”…

This error originates from a subprocess, and is likely not a problem with pip

我遇这个问题是的原因是包名错误 注意检查包名

最新GPT4.0使用教程,AI绘画,ChatFile文档对话总结+GPT语音对话使用,DALL-E3文生图

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画&#xff0c;文档对话总结DALL-E3文生图&#xff0c;相信对大家应该不感到陌生吧&#xff1f;简单来说&#xff0c;GPT-4技术比之前的GPT-3.5相对来说更加智能&#xff0c;会根据用户的要求生成多种内容甚至也可以和…

杨中科 ASP.NETCore Rest

什么是Rest RPC 1、Web API两种风格: 面向过程(RPC) 、面向REST (REST) 2、RPC:“控制器/操作方法“的形式把服务器端的代码当成方法去调用。把HTTP当成传输数据的通道&#xff0c;不关心HTTP谓词。通过QueryString请求报文体给服务器传递数据。状态码。比如/Persons/GetAll…

开发实践 | MySQL的Explain工具

&#x1f4eb; 作者简介&#xff1a;「子非我鱼」&#xff0c;专注于研究全栈 &#x1f525; 三连支持&#xff1a;欢迎 ❤️关注、&#x1f44d;点赞、&#x1f449;收藏三连&#xff0c;支持一下博主~ 文章目录 引言1&#xff0c;Explain工具介绍2&#xff0c;基本语法3&…

IDAPython详细版(二)

六&#xff1a;操作数 可以使用idc.get_openrand_typed(ea,n)得到操作数的类型。ea是地址&#xff0c;n是索引 这里有8种不同类型的操作数类 0_void 如果一个指令木有任何操作数它将返回0 0_reg 如果一个操作数是一个普通的寄存器将返回此类型。这个值在内部表示为1. o_mem …

空间域图像增强之直方图均衡的python代码实现——冈萨雷斯数字图像处理

原理 直方图&#xff1a; 图像的直方图是一个图像中像素强度值分布的图表。 对于灰度图像&#xff0c;直方图展示了每个灰度级出现的频率。 直方图均衡步骤&#xff1a; 计算累积分布函数&#xff08;CDF&#xff09;&#xff1a;首先&#xff0c;计算图像的直方图&#xff0…

案例分析——如何优化跨境直播网络

跨境直播 风口已至 这些年越来越多商家加入直播带货行列&#xff0c;各种玩法日渐成熟。而TikTok作为当前国外最火爆的直播平台&#xff0c;不少卖家都会定期做TikTok直播引流&#xff0c;但时常会面临着远程访问导致直播画面模糊、卡顿掉线、延迟高&#xff0c;甚至可能限流黑…

如何使用 Python、Node.js 和 Go 创建基于 YOLOv8 的对象检测 Web 服务

1. 介绍 这是有关 YOLOv8 系列文章的第二篇。在上一篇文章中我们介绍了YOLOv8以及如何使用它&#xff0c;然后展示了如何使用 Python 和基于 PyTorch 的官方 YOLOv8 库创建一个 Web 服务来检测图像上的对象。 在本文中&#xff0c;将展示如何在不需要PyTorch和官方API的情况下…

LeetCode(38)外观数列⭐⭐

「外观数列」是一个整数序列&#xff0c;从数字 1 开始&#xff0c;序列中的每一项都是对前一项的描述。 你可以将其视作是由递归公式定义的数字字符串序列&#xff1a; countAndSay(1) "1"countAndSay(n) 是对 countAndSay(n-1) 的描述&#xff0c;然后转换成另一…

【LeetCode】20. 有效的括号(Deque的Stack用法)

今日学习的文章链接和视频链接 leetcode题目地址&#xff1a;20. 有效的括号 代码随想录题解地址&#xff1a;代码随想录 题目简介 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效…

阿里云服务器 使用Certbot申请免费 HTTPS 证书及自动续期

前言 Certbot是一款免费且开源的自动化安全证书管理工具&#xff0c;由电子前沿基金会&#xff08;EFF&#xff09;开发和维护&#xff0c;是在Linux、Apache和Nginx服务器上配置和管理SSL/TLS证书的一种机制。Certbot可以自动完成域名的认证并安装证书。 一、 安装软件 1.1…

C语言编译器(C语言编程软件)完全攻略(第一部分:什么是编译器?)

介绍常用C语言编译器的安装、配置和使用。 一、什么是编译器&#xff1f; 我们平时所说的程序&#xff0c;是指双击后就可以直接运行的程序&#xff0c;这样的程序被称为可执行程序&#xff08;Executable Program&#xff09;。在 Windows 下&#xff0c;可执行程序的后缀有…

时代变革,亿发进销存引领批发业转型:从‘瞎盲’到高效盈利

2024年&#xff0c;许多传统批发老板们忙得不可开交。抱怨生意难做、年关难熬。 有些老板为了降低成本&#xff0c;开除了一两个店员&#xff0c;结果却发现自己要同时盯着店&#xff0c;又得亲自开单&#xff0c;一天中至少有10个小时被拴在店里&#xff0c;就是为了减少支出…

准博士生教你如何阅读论文

AI方向如何阅读论文 绪论会议整理一篇论文的主要结构AbstractIntroductionRelated WorkApproach(framework名称亦可)ExperimentsImplementation detailsResultsAblation StudyDiscussion Conclusion 如何阅读多篇论文怎样读/写related work怎样读approach结语 绪论 作为一位工…

Linux系统安全

作为一种开放源代码的操作系统&#xff0c;linux服务器以其安全、高效和稳定的显著优势而得以广泛应用。 账号安全控制 用户账号是计算机使用者的身份凭证或标识&#xff0c;每个要访问系统资源的人&#xff0c;必须凭借其用户账号 才能进入计算机.在Linux系统中&#xff0c;提…