汇编语言第3章 寄存器(内存访问)

时间:2021-01-29 01:25:48

*****本章学习*****

3.1 字数据在内存中的存储

(1)字单元,即存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成

(2)高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节

ps:这个知识点让我想起了寄存器当中的高8位字节和低8位字节

(3)字数据的存——取原则:高——高,低——低,实际上就是小端法

ps:这个知识点在之前已经提过两次了,我一直搞不太清这个点,直到做了实验二才彻底明白

 

3.2 数据在内存和CPU之间的传送

(1)“[···]”表示一个内存单元,“[···]”中的0表示偏移地址

ps:之前一直不清楚“[ ]”是什么,只知道怎么用,到这儿才知道

(2)要在CPU和内存单元之间传送数据,就必须知道内存单元的地址

(3)执行指令时,默认情况下,DS中的值为内存单元的段地址

ps:这个知识点也和后面的实验有关,做实验的时候还没有整理知识点,忽略了这一点

(4)DS:数据段寄存器,用于存放数据段的段地址

 

3.3 汇编指令mov,add,sub

(1)add指令的操作数不能同时是内存单元

(2)add指令的操作数不能是段寄存器

(3)两个内存单元不能直接使用sub指令相减

(4)sub指令的操作数不能是段寄存器

ps:个人感觉,与其记那么多的可以不如记那些不能来的直接,所以我写的都是不能

(5)常数作第二个操作数时,如果最高位是十六位进制的a~f或A~F,前面要加0

 

3.4 栈

ps:栈其实我接触的还蛮多的,基础的那些也都知道,所以主要是整理寄存器方面的知识

(1)栈顶的段地址存放在SS中,偏移地址存放在SP中,任意时刻,SS:SP指向栈顶元素

(2)当栈满的时候再使用push指令入栈,或栈空的时候再使用pop指令出栈,都将发生栈顶超界问题

(3)入栈和出栈均以字为单元,操作对象不能是常数

(4)pop段寄存器中,段寄存器不能是CS和SS

(5)push,pop等栈操作指令,修改的只是SP,所以栈顶的变化范围最大为:0~FFFFH

(6)(SS)× 16 +(SP)-> 栈顶的物理地址

(7)不同的栈,栈顶越界产生的效果是不同的,但是程序编译时不会报错,需要自己检查

(8)利用栈可以保持原有的数据不被改变

 

*****延伸学习*****

ps:我其实对黑客还挺感兴趣的,所以我去看了一下中国黑客的简史

中国黑客的发展可以分为三个阶段:启蒙时代、黄金时代、黑暗时代

在黄金时代,黑客圈子里出现贩卖漏洞、恶意软件等问题,同时因为黑客群体的良莠不齐,也开始出现以赢利为目的的攻击行为,黑色产业链逐渐成型

我曾经以为黑客只的是利用计算机技术做不好的事情的人,直到我看到这本书,我发现我错了

到了现在,黑色产业链基本成熟,,而这个地下产业每年都会给互联网造成数十亿的损失

也许是生活在这个时代,看到的黑客都是不好的,却不曾想,曾经的黑客崇尚分享、*、免费的互联网精神