美文网首页
汇编简单介绍(一)

汇编简单介绍(一)

作者: alexgu | 来源:发表于2021-01-11 18:09 被阅读0次

简单知识背景

cpu组成:
  • 运算器进行运算处理
  • 寄存器用来存储数据
  • 控制器控制各个器件工作
  • 内部总线进行连接

例如一个常规的数值加法操作,首先需要cpu通过地址找到对应的内存地址,然后发送读指令,将对应地址的内存数据读取到寄存器,然后通过cpu的加法运算器进行加法运算,并将结果保存在寄存器中,最后再放回内存中。

其中寄存器很重要,为什么cpu不直接读取内存,计算写到内存,是因为寄存器的读取速度更快,每次运算都经过内存,会对cpu数据的io瓶颈,所以需要先将数据存放在寄存器中,经过大量的加减乘除运算,得到最终结果后再写入内存中。

寄存器全部都是用来存储数据的,根据存储信息的用途不同而进行分类,首先是通用寄存器,用来存放普通数据。

在8086中AX,BX,CX,DX都是通用寄存器,可以存放16位数。另外每个寄存器又可以分成高位和低位2个寄存器使用,例如AX可以分成AH,AL,BX可以分为BH,BL


image.png
8086寻址与段寄存器:

8086出于cpu寻址范围不够以及地址灵活管理的需要采用:段地址16+偏移地址=物理地址的方式进行寻址,例如:2000H16+1F60H = 21F60H(H代表16进制)

这样管理的好处是:可以将连续的内存地址,根据段地址分成不同段,方便按段进行管理,例如可以把数据和代码分别存放在不同段里面,各自进行管理

在内存中的数据全部都是1010这样的数字,是无法判断到底这片内存区域存放的是数据,还是代码。需要引入cs,ip寄存器。cs指向代码段地址,ip指向代码段的偏移地址,cpu永远都是执行cs:ip位置的代码,然后将ip+=指令长度,这样就可以一句一句的执行下去了。
例如:当cs=2000H,ip=1F60H,cpu把21F60H位置的数据当做代码执行

8086调试工具在mac上面的安装及使用:
安装

1,在mac上面安装8086模拟器

brew install dosbox --cask

2,下载调试工具链接,提取码: 428y
3,打开dosbox

image.png
4,mount调试工具,mount c $path,最后的路径填写下载的调试工具的路径
image.png
5,输入c:,然后回车,切换到盘符c下面,然后输入dir回车,可以看见对应的调试工具文件下面的文件
image.png
debug使用

1,输入debug,回车,可以进入调试模式


image.png

2,然后输入r,回车,可以显示8086各个寄存器的数据

image.png

3,上图,可以看出cs=073f,ip=0100的,将此处将要执行的代码通a指令改下面执行逻辑就可退出debug

mov ax,4c00
int 21h
image.png

debug 的使用

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

相关文章

  • 汇编简单介绍(一)

    简单知识背景 cpu组成: 运算器进行运算处理 寄存器用来存储数据 控制器控制各个器件工作 内部总线进行连接 例如...

  • DPDK gcc内联汇编

    在DPDK中,使用gcc的内联汇编实现高效率的函数,比如自旋锁,cas操作等。今天简单介绍一下gcc内联汇编语法和...

  • 从 简单汇编基础 到 Swift 不简单的 a + 1

    从 简单汇编基础 到 Swift 不简单的 a + 1从 简单汇编基础 到 Swift 不简单的 a + 1

  • 深入iOS系统底层之XCODE对汇编的支持介绍

    深入iOS系统底层之XCODE对汇编的支持介绍 深入iOS系统底层之XCODE对汇编的支持介绍

  • 简单汇编

    程序的本质 软件\程序的执行过程 寄存器和内存 编程语言的发展 汇编语言的种类 ios 最主要的汇编语言 AT&T...

  • 汇编学习(1),汇编之helloworld

    本篇介绍 本篇作为汇编系列的开篇,就先研究下汇编如何写helloworld。 内容介绍 首先新建一个asm,写入内...

  • 汇编(四)

    1. if语句的汇编代码 一个简单的if语句 main函数汇编 2. while语句的汇编代码 do while的...

  • 深入计算机系统---程序的机器级表示

    一、汇编语言与机器语言简单介绍 简单讲 二、程序编码以及数据格式 程序编码,数据格式 我们在写 C 程序时,处理器...

  • 汇编学习(5),函数,栈帧

    本篇介绍 本篇介绍下汇编中的函数,栈帧内容。 函数 汇编也支持函数调用,如下是一个例子: 使用call + 标号就...

  • GNU x86-64汇编简单介绍

    GNUx86-64汇编 寄存器 X86-64大约有16个64位整数寄存器,其中栈指针rsp和基址指针rbp较为特殊...

网友评论

      本文标题:汇编简单介绍(一)

      本文链接:https://www.haomeiwen.com/subject/khjraktx.html