汇编语言学习01

汇编语言(8086cpu)

恩,学习一门课程,我觉得应该有一定的条理性,而且自己要勤加思考才能学好,条理性:最好就是先整体的介绍一下全本书,然后再详细的介绍各个章节,而且,书籍的章节安排目录有一定的条理性,是渐进式的,前面的学习,为后面的内容做好了铺垫,打好了基础。不能随便排版(深入理解计算机系统是我读过数里面最好的)

读书教材:王爽的《汇编语言》教材比较好。

下面在阅读了三章以后写一下自己的收获。

汇编语言:基于底层的一门语言。在学习这本书时,学过计算机组成原理会对这本书的学习起到良好的作用。

首先,我们来了解一下计算机的组成。现在的计算机一般都是冯诺依曼型计算机:由五部分组成:输入设备,输出设备,运算器,控制器和存储器。它们之间由总线进行连接。

    其实,计算机就是一堆物理原件,他们之间相互组合,通过总线连接,最后形成计算机(裸机)。

    计算机最重要的一部分是cpu。

    计算机用来处理数据的。但是数据如何存储在计算机里呢?于是应需求产生存储系统:有主存,辅存等。那数据在计算机里如何表示呢?就产生进制的讨论。最好的就是二进制。so,计算机中所有的数据,指令都用二进制表示(二进制用高低电平来转化表示)

  所有的信息,都有相应的对应表(对应规则)。

  计算机来处理信息:数据,指令等等。

  处理指令,那么,如何来执行指令?如何在内存中确定读取的数据是不是指令?如何确定指令的长度,什么时候指令终止?

  在了解这些之前,先明白如何在内存中来确定读取的是不是指令?但是如何来确定要读取的地址呢?

  8086CPU地址确定:物理地址=段地址*16+偏移地址。(就是说先确定一个参考点,然后确定相对于参考点的坐标)。段地址存放于段寄存器里,偏离地址放在某个地方(不同的信息,放在不同的位置)。指令:段地址放在数据段CS里,偏移地址放在指令指针寄存器IP里,在内存中的物理地址由CS:IP确定(CS*16+IP)

  明白了如何确定指令在内存中的位置后,我们来讨论如何来传输,执行指令?

简化来说:

  1.CS:IP在内存中读取指令放到指令缓冲器中,

  2.IP变化,指向下一条指令。

  3.执行指令,转向步骤1.

注: cpu内部有寄存器(为了加快读取信息,加速):4个数据寄存器(ax,bx,cx,dx),2个变址寄存器(di,si),2个指针寄存器(sp,bp),4个段寄存器,1个指令指针寄存器和1个符号寄存器,共14个。

  处理数据:和CPU处理指令类似,数据的地址确定:DS*16+偏移地址[...]

  栈:计算机中,堆栈段,由一段连续的内存地址,起始地址是16的倍数的一段内存组成。堆栈段最大为64k。

那么如何确定堆栈段?如何读取堆栈段中的数据?栈顶元素?空栈如何表示?

与上面的确定方法类似:SS:SP,  栈顶元素的变换是从高地址到低地址的方向增长。  空栈:栈顶指针指向最高地址的下一个存储单元。

注:cpu里面的段寄存器不能参加算术运算(就是说不能直接赋值),必须添加一个中间寄存器(就像两个值交换一样)。

·····················································································································································

以后就是要写自己的第一个汇编程序了,未完待续。。。。。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

【编程基础】C语言从源程序到可执行程序

一.0,1、文本信息和字符编码 所有的信息在计算机中都是以0、1及其组合形式存在。文本信息也不例外。文本信息是以人类容易理解的方式来呈现信息。 ...

3304
来自专栏一个会写诗的程序员的博客

程序的基本概念

程序的基本概念 1.1. 程序和编程语言 程序(Program)告诉计算机应如何完成一个计算任务,这里的计算可以是数学运算,比如解方程,也可以是符号运算,比...

1142
来自专栏一枝花算不算浪漫

Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念

51410
来自专栏西枫里博客

thinkPHP升级到5.0.13导致update更新出错的问题

话题还得从tinkPHP群消息说起,双十二那天,群内通知官方发布了5.0.13版本。刚好那几天在折腾redis缓存。官方文档中说5.0.13是一个集合诸多改进的...

1115
来自专栏FreeBuf

基于时延的盲道研究:受限环境下的内容回传信道

在一次漏洞赏金活动中,挖到个命令注入的洞,我先以时延作为证明向厂商提交该漏洞,厂商以国内网络环境差为由(的确得翻墙)拒收,几次沟通,告知若我能取回指定文件 se...

1375
来自专栏Python

MongoDB

一 简介 MongoDB是一款强大、灵活、且易于扩展的通用型数据库 1、易用性 MongoDB是一个面向文档(document-oriented)的数据库,而不...

3336
来自专栏WeTest质量开放平台团队的专栏

低于0.01%的极致Crash率是怎么做到的?

4184
来自专栏java工会

CodeReview常见代码问题

空值恐怕是最容易出现的地方之一。 常见错误有: a. 值为NULL导致空指针异常; b. 参数字符串含有前导或后缀空格没有Trim导致查询为空。 导致以上结果的...

1470
来自专栏安恒网络空间安全讲武堂

适合破解新手的160个crackme练手之04

适合破解新手的160个crackme练手之04 老规矩,先运行程序看看是干嘛的,可以看到程序有点怪异,没有确定按钮,后面知道了原来点击中间阴影部分就是验证功能啦...

2348
来自专栏软件测试经验与教训

Python学习笔记(一)

2905

扫码关注云+社区

领取腾讯云代金券