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

16asm -指令

文章目录

  • 前言
    • 指令种类
    • 数据传送指令
      • 通用传送指令
      • 堆栈操作指令
      • 标志寄存器进出堆栈指令
      • 地址传送指令
    • 算术运算指令
      • 比较指令
      • 加法
      • 减法
      • 乘法
      • 除法
    • 逻辑恒等式
    • 符号拓展指令
    • 位运算指令
    • 移位指令
  • 总结

前言

  • 各位师傅大家好,我是qmx_07,今天给大家讲解指令的相关知识
    在这里插入图片描述

指令种类

  1. 数据传送指令
  2. 算术运算指令
  3. 位操作类指令
  4. 控制转移类指令
  5. 处理器控制类指令

数据传送指令

通用传送指令

  • mov 指令:把一个字节或字的操作数从源地址传送至目的地址,不支持存储器到存储器(内存 到 内存)
    在这里插入图片描述
例子:
mov ax,es	 //ax<-es
mov ds,ax	//ds<-ax<-es
mov word ptr[si+2],0bh

演示:
在这里插入图片描述


  • xchg 指令:把两个地方的数据进行互换,不存在存储器到存储器(内存 到 内存)
例子:
xchg al,bl

演示:
在这里插入图片描述
应用场景:
1.寄存器与寄存器之间对换数据
2.寄存器与存储器之间对换数据
效率: xchg > mov XCHG使用了内部暂存器


  • xlat指令:将BX指定的缓冲区中、AL指定的位偏移的一个字节数据取出赋给AL
    例子:
mov ax,9 //偏移9位
xlat
//AL <- DS:[BX+AL]

在这里插入图片描述

找到bx的缓冲区 //红线
通过al偏移 //橙线
提取内容赋值给al //绿线

应用场景:数组遍历
宽度:8位


堆栈操作指令

  • push指令:将标志寄存器的内容压入堆栈,同时栈顶指针SP减2
//模拟
mov [sp],reg
sub sp,2

演示:
在这里插入图片描述
在这里插入图片描述

  • pop指令:将栈顶单元内容送到标志寄存器,同时栈顶指针SP 加 2
//模拟
add sp,2
movreg, [sp]

演示:
在这里插入图片描述
在这里插入图片描述

标志寄存器进出堆栈指令

  • 介绍: 用来传送标志寄存器FLAGS的内容,方便进行对各个标志位的直接操作

地址传送指令

介绍:将存储器单元的逻辑地址送至指定的寄存器

lea 指令:将存储器操作数的有效地址传送至指定的16位寄存器中

例子: lea bx,[bx + si] // 相当于 bx = bx + si

演示:
在这里插入图片描述
作用:

  • 取全局变量的地址
  • 代替加法指令表,如:多个寄存器做加法运算

算术运算指令

比较指令

  • cmp指令: 目的操作数-源操作数,根据结果设置标志位,结果不存入目的地址
cmp OPD,OPS

演示
在这里插入图片描述

作用:一般用于程序分支结构

在这里插入图片描述
进位标志反映无符号整数运算结果是否超出范围有进位,加上进位或借位后运算结果仍然正确

溢出标志反映有符号整数运算结果是否超出范围有溢出,运算结果已经不正确

  • 介绍: 实现二进制 和十进制 数据的四则运算
    在这里插入图片描述

加法

在这里插入图片描述

//reg寄存器
//imm立即数
//mem内存
例子:
add ax,12
add [si],ax

演示:
在这里插入图片描述


在这里插入图片描述

  • 演示:
    在这里插入图片描述
  • CY 表示有进位,溢出

inc指令: +1,不改变CF位
在这里插入图片描述

减法

在这里插入图片描述

  • 演示:
    在这里插入图片描述
    在这里插入图片描述
    例子:
    在这里插入图片描述
    dec指令:-1,不改变CF位
    例子:
    在这里插入图片描述
    neg 指令: 如果ax = 0,则CF标志位 = 0;若ax != 0, 则CF = 1
    并且让通用寄存器 取反
    例子:
    在这里插入图片描述

乘法

  • 乘法指令分为无符号乘法指令有符号乘法指令
  • 功能:显式操作数和隐含操作数相乘,并把乘积存入相应的寄存器中

无符号乘法:

例子:
mov ax, 5      ;5 存储到累加器寄存器 ax 中
mov bx, 10     ;10 存储到通用寄存器 bx 中
mul bx         ; 用 bx 中的值乘以 ax 中的值,结果存储在寄存器组中

在这里插入图片描述
演示:
在这里插入图片描述
在这里插入图片描述
有符号乘法:
如果乘积的高一半位(AH,DX,EDX)不是低位的符号拓展,则:
两种标志位情况:
CF = OF = 1;

  • 8位:说明结果超过了8位
  • 16位:说明结果超过了16位

CF = OF = 0

  • 8位:都能存下
  • 16位:都能存下

除法

除法也分为无符号除法有符号除法
无符号除法:
在这里插入图片描述
例子:
在这里插入图片描述
在这里插入图片描述
有符号除法:
在这里插入图片描述

逻辑恒等式

在这里插入图片描述

符号拓展指令

  • 符号拓展:用一个操作数的符号位(最高位)形成另一个操作数
  • 结果:后一个操作数个位是0或者1

cbw 指令:将AL中的符号拓展位拓展至AH中,操作数是隐含固定的(字节转换为字)

  • 例子:
    在这里插入图片描述
    cwd 指令:将AX中的符号拓展位拓展至DX中,操作数是隐含固定的(字节转换为双字)

位运算指令

在这里插入图片描述
逻辑与 and:

and Reg/Mem,Reg/Mem/imm

演示:
在这里插入图片描述
在这里插入图片描述
逻辑或 or:

and Reg/Mem,Reg/Mem/imm

例子:
在这里插入图片描述
在这里插入图片描述
逻辑非 not:

not reg/mem

演示:
在这里插入图片描述
异或 xor:

xor reg/mem ,reg/mem/imm

在这里插入图片描述

移位指令

移位:
在这里插入图片描述
shl、sal指令:左移一位,补0

shl(sal) reg/mem, 1立即数 或者 存储在cl里

在这里插入图片描述
例子
在这里插入图片描述
在这里插入图片描述

sar 指令:算术右移,高位补位

sar reg/mem, 1立即数 或者 存储在cl里

在这里插入图片描述
例子
在这里插入图片描述

shr 指令:右移一位,补0
在这里插入图片描述
例子
在这里插入图片描述


循环移位:
在这里插入图片描述
rol 指令:循环左移,高位补位
在这里插入图片描述
演示:
在这里插入图片描述
ror指令: 循环右移,高位补位
在这里插入图片描述

在这里插入图片描述
rcl指令:进位循环左移,CF位补位
在这里插入图片描述
在这里插入图片描述
rcr:进位循环右移,CF位补位

在这里插入图片描述
在这里插入图片描述

总结

  • 介绍了数据传送指令,算术运算指令,符号拓展指令,位运算指令

http://www.kler.cn/a/428564.html

相关文章:

  • web端ActiveMq测试工具
  • ubuntu24 springboot jar设置宕机重启
  • 华为EC6110T-海思Hi3798MV310_安卓9.0_通刷-强刷固件包
  • 编译chromium笔记
  • 基础jjj
  • HTML语言的多线程编程
  • 2024/12/8 Windows安装Oracle19c
  • 锁相关的问题(死锁、互斥锁、自旋锁、读写锁、悲观锁、乐观锁)
  • Mac 录制电脑系统内的声音的具体方法?
  • threadcache实现细节(二)
  • Linux-V4L2摄像头应用编程
  • 安卓调试环境搭建
  • RTCMultiConnection 跨域问题解决
  • js循环导出多个word表格文档
  • OD B卷【恢复数字序列】
  • TCP客户端服务器端通信(线程池版)
  • 【机器学习】基于SVM、逻辑回归和CNN的手写数字识别:性能对比与应用分析
  • (七)腾讯cloudstudio+Stable-Diffusion-webui AI绘画教程-安装Stable-Diffusion-WebUI
  • Vue3组件通信(父传子,子传父,跨组件通信)
  • 21届秋/校招面经
  • xLSTM 阅读笔记
  • 日本IT|企业需要什么样的技术?
  • 处理后端返回的时间格式问题
  • MySQL -- CURD(下)
  • AUTOSAR CP复杂驱动程序(Complex Driver,CDD)的设计与集成指南导读
  • 动态规划子序列问题系列一>最长递增子序列