16asm - 汇编介绍 和 debug使用

news2024/12/23 14:03:03

文章目录

  • 前言
    • 硬件运行机制
    • 微机系统硬件组成
    • 计算机系统组成
    • 8086cpu组织架构
    • dosbox安装
      • 配置debug
    • debug使用
      • R命令
      • D命令
      • E命令
      • U命令
      • T命令
      • A命令
      • 标志寄存器
  • 总结

前言

  • 各位师傅大家好,我是qmx_07,今天给大家讲解 十六位汇编 和 debug调试器的使用
    在这里插入图片描述

硬件运行机制

  • 为什么计算机的数据操作单位是二进制呢?
    在这里插入图片描述

  • 通过电子二极管,正向加电则通,反向加电则不通,得到 0 和 1

  • 根据电子二极管的特性,得到以下门电路:
    在这里插入图片描述
    在计算机底层,加减乘除的运算就是由 与 或 非 三种运算构成

在这里插入图片描述

  • 更高级的数学运算也可以通过简单的位运算计算,将常用运算封装成一个器件,称之为单元
    在这里插入图片描述

  • 机器码:类似111111000010101010B,可以用来控制硬件的二进制数据,叫做机器码。

  • 助记符(Mnemonic):二进制值难记,每种功能的二进制控制码取一个容易记住的名字,叫做助记符,也称之为指令 例如,00B - add 01B - sub
    在这里插入图片描述

  • 汇编:将助记符 通过汇编器 转成机器码

微机系统硬件组成

  • 一个系统不可能由一个硬件单独完成,所以划分出多个硬件模块,然后由一个硬件模块居中调度,称作cpu
    在这里插入图片描述
  • 单片机:
    在这里插入图片描述
  • I/0桥:所有的硬件模块连接到I/O桥,由I/O桥负责辅助cpu与哪一个硬件模块连接
    在这里插入图片描述
  • 总线:cpu有8位数据/地址线,ram是个256byte的存储器
    在这里插入图片描述

计算机系统组成

计算机分层:
在这里插入图片描述
计算机编译过程:
在这里插入图片描述

  • 执行
    -在这里插入图片描述

8086cpu组织架构

  • 8086架构图
    在这里插入图片描述
    EU部件:1. 执行部件(excution unit) 2. 译码 3. 执行指令
    BIU部件:1. 总线接口部件(bus interface unit) 2. 取指令 3. 读取数据 4. 写入数据
    寄存器:
    在这里插入图片描述
    流水线处理:
  • 8086cpu将指令的执行分成多个模块,有什么好处?
    可以多个部件同时工作,提高硬件的利用率,从而提高效率
    在这里插入图片描述
    在8086 CPU架构下,串行处理和流水线处理是两种不同的指令处理方式:
  1. 串行处理: 串行处理是指在执行指令时,逐条顺序地执行指令。当一条指令执行完成后,才能开始执行下一条指令。这种处理方式的特点是简单直观,易于理解和调试,但效率相对较低。因为在串行处理中,指令之间存在时钟周期的间隔,导致CPU的运行效率受限。8086 CPU在早期的时候主要采用串行处理方式
  2. 流水线处理: 流水线处理是指将指令处理过程划分为多个阶段,并在不同阶段同时执行不同的指令。每个阶段负责完成指定的任务,然后将结果传递给下一个阶段。这样可以实现多个指令的并行处理,提高CPU的执行效率。流水线处理利用了指令的部分并行性,有效地利用了CPU资源。8086 CPU在后期引入了流水线处理的技术,提高了指令的执行速度

在8086 CPU中,流水线处理主要包括以下几个阶段:

  • 取指令阶段(Instruction Fetch):从内存中读取指令,并将其存储在指令缓存中。
  • 译码阶段(Instruction Decode):对取得的指令进行解码,确定指令的操作类型和操作数。
  • 执行阶段(Execution):根据指令的类型执行相应的操作,比如算术运算、逻辑运算等。
  • 存储阶段(Memory Access):若指令需要访问内存或外设,则在此阶段进行数据的读取或写入。
  • 写回阶段(Write Back):将执行结果写回寄存器或内存。
    效率:流水线处理 > 串行处理
    弊端:当跳转到总线使用的时候,此时已经取得一部分指令,并且已经译码了.那么此时这部分将清空,从头操作,类似于goto语句

dosbox安装

  • 介绍:模拟DOS环境,执行旧的dos程序

链接:https://pan.baidu.com/s/141agLfQWdAnmK24WTdtOfw?pwd=sds3
提取码:sds3
在这里插入图片描述
在这里插入图片描述

  • 选择合适的下载路径,安装dosbox环境

配置debug

在这里插入图片描述
1.mount c f:\dosbox\

  • 将f:\dosbox\ 这个路径,挂载为虚拟c盘

2.c:

  • 切换为c盘使用
    在这里插入图片描述
  • 将debug程序 放进f:\dosbox\路径下
    在这里插入图片描述
  • 通过 options.bat程序,就可以自动挂载磁盘

dos基础命令:

#cd\ ——首先要用cd\ 退回到根目录C>下
#dir ——显示文件列表
#md hb ——建立hb子目录
#cd hb ——进入hb子目录
#copy d:\dos\masm.exe c:\hb ——将D盘dos目录下的masm.exe拷贝到C盘hb目录下
#copy d:\dos\link.exe c:\hb ——将D盘dos目录下的link.exe拷贝到C盘hb目录下
#cd .. ——退回到上一级目录
#del \hb\masm.exe ——删除hb子目录中的某文件
#rd hb ——删除hb子目录(子目录中的所有文件必须先删除)
#e:——进入e盘
#cls ——清屏
#type——显示文本文件内容(如type c:\hb\abc.asm)

debug使用

  • 介绍:debug是微软公司出品的调试工具,可以调试0环和3环
  • 作用:深入机器内部观察,修改观察寄存器等值的内容
  • 基本功能介绍:

R命令:查看、改变CPU寄存器的内容
D命令:查看内存中的内容
E命令:改写内存中的内容
U命令:将内存中的机器指令翻译成汇编指令
T命令:执行一条机器指令
A命令:以汇编指令的格式在内存中写入一条机器指令
Q命令:退出

R命令

在这里插入图片描述

  • 查看CPU寄存器的内容[R]
  • 修改寄存器中的值[R 寄存器]

D命令

  • 查看内存中的内容【D 段地址:偏移地址】
  • 指定范围查看内存中的内容【D 段地址:起始偏移地址 结尾偏移地址】
    在这里插入图片描述
    左侧为每行的内存单元起始地址
    中间为128个内存单元的内容,用十六进制的格式输出
    右侧为每个内存单元中的数据对应的可显示的ASCII码字符

E命令

在这里插入图片描述

  • 修改内存中的内容【E 段地址:偏移地址】
    在这里插入图片描述
  • 一次性修改多个内存中的内容【E 段地址:偏移地址 值1 值2 …】

U命令

在这里插入图片描述

  • 将内存中的机器指令翻译成汇编指令【U 段地址:偏移地址】
    U命令的显示输出分为三部分:

左侧为机器指令的地址
中间为机器指令
右侧为机器指令所对应的汇编指令

T命令

在这里插入图片描述

  • 执行一条或多条指令【T】,类似于VS调试中的F11
  • 执行的命令为CS:IP指向的指令

A命令

在这里插入图片描述

  • 以汇编指令的形式在内存写入机器指令【A 段地址:偏移地址】
  • Debug会将这些汇编指令翻译成对应的机器指令,将它们的机器码写入内存,在给出的起始地址后面直接按Enter键表示操作结束

标志寄存器

在这里插入图片描述

条件标志

  • CF 进位标志用于反映运算是否产生进位或借位。如果运算结果的最高位产生一个进位或借位,则CF置1,否则置0。运算结果的最高位包括字操作的第15位和字节操作的第7位。移位指令也会将操作数的最高位或最低位移入CF。
  • PF 奇偶标志用于反映运算结果低8位中“1”的个数。“1”的个数为偶数,则PF置1,否则置0。
  • AF 辅助进位标志:算数操作结果的第三位(从0开始计数)如果产生了进位或者借位则将其置为1,否则置为0,常在BCD(binary-codedecimal)算术运算中被使用。
  • ZF 零标志用于判断结果是否为0。运算结果0,ZF置1,否则置0。
  • SF 符号标志用于反映运算结果的符号,运算结果为负,SF置1,否则置0。因为有符号数采用补码的形式表示,所以SF与运算结果的最高位相同。
  • OF 溢出标志反映有符号数加减运算是否溢出。如果运算结果超过了8位或者16位有符号数的表示范围,则OF置1,否则置0。

控制标志

TF 跟踪标志:当TF被设置为1时,CPU进入单步模式,所谓单步模式就是CPU在每执行一步指令后都产生一个单步中断。主要用于程序的调试。8086/8088中没有专门用来置位和清零TF的命令,需要用其他办法。
IF 中断标志:决定CPU是否响应外部可屏蔽中断请求。IF为1时,CPU允许响应外部的可屏蔽中断请求。
DF 方向标志:决定串操作指令执行时有关指针寄存器调整方向。当DF为1时,串操作指令按递减方式改变有关存储器指针值,每次操作后使SI、DI递减。
在这里插入图片描述
进位针对的是无符号数运算,溢出针对的是有符号数运算。
当看成无符号数,则关注CF标志,看成有符号数,则关注OF标志。

总结

  • 介绍了计算机中硬件的运行原理,计算机系统组成,8086cpu的组织架构,debug的基础使用,以及标志寄存器的讲解

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

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

相关文章

UE4_材质节点_有关距离的_流体模拟

一、材质节点介绍: 特别注意:距离场需要独立显卡支持。 1、什么是距离场? 想象一下空间中只有两个实体, 一个球,一个圆柱. 空间由无数个点组成, 取其中任何一个点, 比如,它跟球面的最近距离是3, 跟圆柱面的最近距离是2, 那么这个点的值就…

win10系统安装docker-desktop

1、开启Hyper-v ———————————————— Hyper-V 是微软提供的一种虚拟化技术,它允许你在同一台物理计算机上运行多个独立的操作系统实例。这种技术主要用于开发、测试、以及服务器虚拟化等领域。 —————————————————————— &#…

【小白学机器学习39】如何用numpy生成总体,生成样本samples

目录 1 目的:研究 样本和总体之间的关系 2 先生成1个理论总体 2.0 下面是关于这一步的完整代码 2.1 一般情况下,我们先生成一个符合正态分布的总体 2.1.1 设置总体 ,或者说生成一个总体 2.2 为什么一定要是一个符合正态分布的总体&…

“指标管理系统”是什么?企业如何搭建指标管理系统?

在当今数字化时代,数据已成为企业决策的重要依据。然而,海量数据中如何筛选出关键指标,并对其进行有效管理,成为了众多企业面临的难题。为此,指标管理系统应运而生,它旨在帮助企业规范化定义、统一管理和高…

网际协议(IP)与其三大配套协议(ARP、ICMP、IGMP)

网际协议(Internet Protocol,IP),又称互联网协议。是OSI中的网络层通信协议,用于跨网络边界分组交换。它的路由功能实现了互联互通,并从本质上建立了互联网。网际协议IP是 TCP/IP 体系中两个最主要的协议之…

运维工作常用Shell脚本(Commonly Used Shell Scripts for Operation and Maintenance Work)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 本人主要分享计算机核心技…

机器学习8-决策树CART原理与GBDT原理

Gini 系数 和Gini 系数增益 CART决策树算法流程举例 该篇文章对于CART的算法举例讲解,一看就懂。 决策树(Decision Tree)—CART算法 同时也可以观看视频 分类树 GBDT原理举例 可以看如下示例可以理解GBDT的计算原理 用通俗易懂的方式讲解: GBDT算法及…

oracle中删除指定前缀的表

近期接手做的项目,发觉数据库中有许多多余的表。究其原因,应该是同事贪图方便,将过去做过的项目复制粘贴,然后修修改改。包括数据库也是克隆过来的,然后又没有删除本项目多余的表,结果经过几个轮回&#xf…

JAVA篇10 —— 常用类WrapperStringMathArraysSystemBigIntegerBigDecimal日期

欢迎来到我的主页:【一只认真写代码的程序猿】 本篇文章收录于专栏【小小爪哇】 如果这篇文章对你有帮助,希望点赞收藏加关注啦~ 目录 1 包装类 1.1 包装类和String 1.2 int&char包装类常用方法 2 String类 3 Math 类 4 Arrays类 5 System类…

tauri使用github action打包编译多个平台arm架构和inter架构包踩坑记录

这些error的坑,肯定是很多人不想看到的,我的开源软件PakePlus是使用tauri开发的,PakePlus是一个界面化将任何网站打包为轻量级跨平台软件的程序,利用Tauri轻松构建轻量级多端桌面应用和多端手机应用,为了实现发布的时候…

通义灵码走进北京大学创新课堂丨阿里云云原生 10 月产品月报

云原生月度动态 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》,从趋势热点、产品新功能、服务客户、开源与开发者动态等方面,为企业提供数字化的路径与指南。 趋势热点 🥇 通义灵码走进北京大学创新课堂,与 400…

鸿蒙开发-HMS Kit能力集(地图服务、华为支付服务)

地图服务 Map Kit(地图服务)是鸿蒙生态下的一个地图服务,为开发者提供强大而便捷的地图能力,助力全球开发者实现个性化地图呈现、地图搜索和路线规划等功能,轻松完成地图构建工作。 Map Kit提供了千万级别的 Poi&…

【四轴】基于IIC通信读写MPU6050寄存器

1. 基本原理 在这篇【四轴】软件IIC通信的实现 – Dukis Blog博客中,我介绍了软件IIC的实现方式。而MPU6050,正是一种通过IIC进行通信的传感器外设。 1.1 什么是MPU6050 MPU6050 是 InvenSense 公司推出的一款6 轴惯性传感器模块,广泛应用于姿…

arkTS:使用ArkUI实现用户信息的持久化管理与自动填充(PersistentStorage)

arkUI:使用ArkUI实现用户信息的持久化管理与自动填充(PersistentStorage) 1 主要内容说明2 例子2.1 登录页2.1.1登陆页的相关说明2.1.1.1 持久化存储的初始化2.1.1.2 输入框2.1.1.3 记住密码选项2.1.1.4 登录按钮的逻辑2.1.1.5 注册跳转 2.1.…

基于SpringBoot+Vue的美妆购物网站

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

【SpringBoot+Vue】x-admin管理系统跟做

技术栈 前端技术说明Vue前端框架Vuex全局状态管理框架ElementUI前端UI框架Axios前端HTTP框架vue-element-admin项目脚手架 后端技术说明SpringBoot容器MVC框架MyBatisORM框架MyBatis-plusMyBatis增强工具Redis非关系型数据库 数据库准备 SET NAMES utf8mb4; SET FOREIGN_KE…

【Docker】Docker配置远程访问

配置Docker的远程访问,你需要按照以下步骤进行操作: 1. 在Docker宿主机上配置Docker守护进程监听TCP端口 Docker守护进程默认只监听UNIX套接字,要实现远程访问,需要修改配置以监听TCP端口。 ‌方法一:修改Docker服务…

LeetCode hot100(自用背诵、部分题目、非最优解)

点击题目可以跳转到LeetCode 哈希 两数之和 public int[] twoSum(int[] nums, int target) {int lengthnums.length;int[] ans new int[2];for (int i 0; i <length-1 ; i) {for (int j i1; j < length; j) {if(nums[i]nums[j]target){ans[0]i;ans[1]j;}}}return an…

Android -- 简易音乐播放器

Android – 简易音乐播放器 播放器功能&#xff1a;* 1. 播放模式&#xff1a;单曲、列表循环、列表随机&#xff1b;* 2. 后台播放&#xff08;单例模式&#xff09;&#xff1b;* 3. 多位置同步状态回调&#xff1b;处理模块&#xff1a;* 1. 提取文件信息&#xff1a;音频文…

基础Web安全|SQL注入

基础Web安全 URI Uniform Resource Identifier&#xff0c;统一资源标识符&#xff0c;用来唯一的标识一个资源。 URL Uniform Resource Locator&#xff0c;统一资源定位器&#xff0c;一种具体的URI&#xff0c;可以标识一个资源&#xff0c;并且指明了如何定位这个资源…