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

汇编笔记 01

小蒟蒻的汇编自学笔记,如有错误,望不吝赐教

文章目录

    • 笔记
      • 编辑器,启动!
      • debug功能
      • CS & IP
      • mov
      • add
      • sub
      • 汇编语言寄存器的英文全称中英对照表
      • mul
      • div
      • and
      • or

笔记

编辑器,启动!

进入 debug 模式
在这里插入图片描述

debug功能

  1. 用Debug 的R命令查看、改变CPU寄存器的内容;
  2. 用Debug 的D命今查看内存中的内容;
  3. 用Debug 的E命令改写内存中的内容;
  4. 用Debug 的U命令将内存中的机器指令翻译成汇编指令;
  5. 用Debug 的T命令执行一条机器指令;
  6. 用Debug 的A命令以汇编指令的格式在内存中写入一条机器指令。

参考 手把手教你汇编 Debug

CS & IP

CS(Code Segment)是代码段寄存器,一般也被称为段基址,可以认为是程序访问的入口,CPU 需要从 CS 中找到从哪个位置开始取指执行
但是我们还不知道要取哪一段,这时候 IP 的作用就体现出来了
IP(Instruction Pointer)就是指令指针寄存器,也叫做偏移地址,它会告诉我们从段基址开始,取哪一段的地址。
可以使用 段基址:偏移地址 来确定内存中的指定地址。

mov

  1. mov dst, src mov 寄存器,寄存器
  2. mov dst, imm mov 寄存器,立即数
  3. mov dst(L/H), imm mov 寄存器(高八位/低八位),立即数
    把 src 移到 dst
    在这里插入图片描述

add

  1. add dst, imm
  2. add dst, src
  3. add dst(L/H), imm add 寄存器(高八位/低八位),立即数
    在这里插入图片描述
    在这里插入图片描述
    如果相加后溢出了,删溢出的高位(如果低八位加法溢出,也会删“溢出”高位,即使本可以放高八位去)
    不是所有寄存器都能用,亲测,第一行的都能用,第二行开头两个就不能用(后面的没试)

sub

和 add 类似
不够减,就在最高位前放1,再减

汇编语言寄存器的英文全称中英对照表

在这里插入图片描述

mul

  1. 两个相乘的数:两个相乘的数,要么都是8位,要么都是16位。
    1. 如果是8位,一个默认放在AL中,另一个放在8位reg或内存字节单元中;
    2. 如果是16位,一个默认在AX中,另一个放在16位reg或内存字单元中。
  2. 结果:
    1. 如果是8位乘法,结果默认放在AX中;
    2. 如果是16位乘法,结果高位默认在DX中存放,低位在AX中放。
      示例:10D * 100D
      10 和 100 都小于 256 满足(1)
      在这里插入图片描述
      示例:100D * 10000D
      10000 > 256
      10000D = 2710H
      在这里插入图片描述
      不会溢出
      在这里插入图片描述

div

  1. 除数: 有8位和16位两种,在一个reg或内存单元中。
  2. 被除数:
    1. 如果除数为8位,被除数则为16位,默认在AX中存放;
    2. 如果除数为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。
  3. 结果:
    1. 如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数;
    2. 如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。

小结:
(1): AX / BL = AL…AH
(2): DXAX / BX = AX…DX

and

逻辑与指令,按位进行与运算。
示例:

mov al,01100011B
and al,00111011B
执行后: 
al=00100011B

attention 在 debug 模式下,不能赋二进制数,先转成十六进制再赋
通过该指令可将操作对象的相应位设为0,其他位不变。例如:
将al的第6位设为0的指令是:
and al,10111111B

or

or指令:逻辑或指令,按位进行或运算。
示例:

mov al,01100011B
or al,00111011B
执行后: 
al=01111011B

相关文章:

  • 【RabbitMQ(一)】:基本介绍 | 配置安装与快速入门
  • python将word文件转换成pdf文件
  • PHPExcel导出excel
  • Python调用pyspark报错整理
  • 在java中一般什么时候用==
  • 打卡今天学习 Linux
  • 美国服务器如何
  • 1 月 Web3 游戏行业概览:市场实现空前增长
  • [项目管理] 如何使用git客户端管理gitee的私有仓库
  • 【CV论文精读】EarlyBird: Early-Fusion for Multi-View Tracking in the Bird’s Eye View
  • LRU缓存
  • 图灵日记之java奇妙历险记--抽象类和接口
  • Redis核心技术与实战【学习笔记】 - 31.番外篇:Redis客户端如何与服务器端交换命令和数据
  • k8s 部署java应用 基于ingress+jar包
  • 【iOS ARKit】3D 人体姿态估计
  • 【Linux系统编程】快速查找errno错误码信息
  • CentOS7简单部署NFS
  • Codepen 每日精选(2018-3-25)
  • CSS居中完全指南——构建CSS居中决策树
  • ES10 特性的完整指南
  • express如何解决request entity too large问题
  • JS实现简单的MVC模式开发小游戏
  • vue:响应原理
  • 复杂数据处理
  • 好的网址,关于.net 4.0 ,vs 2010
  • 使用 Xcode 的 Target 区分开发和生产环境
  • Java总结 - String - 这篇请使劲喷我
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 进程与线程(三)——进程/线程间通信
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (arch)linux 转换文件编码格式
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (八十八)VFL语言初步 - 实现布局
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)计算机毕业设计高校学生选课系统
  • (简单) HDU 2612 Find a way,BFS。
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (七)理解angular中的module和injector,即依赖注入
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)Oracle存储过程编写经验和优化措施
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET 8.0 发布到 IIS
  • .NET Core 将实体类转换为 SQL(ORM 映射)
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [ 渗透工具篇 ] 一篇文章让你掌握神奇的shuize -- 信息收集自动化工具
  • [20170728]oracle保留字.txt
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [acwing周赛复盘] 第 94 场周赛20230311
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作