第三章整理

Posted kori

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第三章整理相关的知识,希望对你有一定的参考价值。

>>字数据在内存中的存储

计算机中内存以字节为单位,划分为若干个单元, 计算机内数据存-取单位: ① 字节 (8bit) ② 字 (16bit) ③ 双字 (32bit) ④ 四字 (64bit)

王爽的《汇编语言里》用的是小端法,即字数据的低(高)位字节存放在低(高)地址内存单元 ② 取低地址内存单元地址作为字数据地址.

像就0和1而言,0为低地址内存单元,1为高地址内存单元,如下图4E20H的存储,

技术分享图片

 

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

我们要明确一点,要在CPU和内存单元之间传送数据,就必须知道内存单元的地址。

执行指令时,默认情况下,8086自动取寄存器DS中的值为内存单元的段地址(DS: 数据段段寄存器,用于存放数据段的「段地址」)。

>>汇编指令mov, add, sub

 在mov, add, sub等汇编指令中,访问内存单元时,默认情况下,指的是数据段。如mov ax,[1],就相当于ax ← ( (ds) × 16 + 1)

 

mov指令的一些形式及使用时的注意事项NOTE

技术分享图片

NOTE:

(1) 两个操作数长度要一致。

(2) 关于常数(立即数)

① 不能作为第1个操作数(目的操作数) ② 作第2个操作数(源操作数)时,如果最高位是十六进制的a~f或A~F,前面要加零!具体点的话可看下图实例

技术分享图片

(3) 两个内存单元之间不能直接传送数据。

(5) 关于段寄存器

① 两个段寄存器之间不能直接传送; ② 不能把常数送到段寄存器。

技术分享图片

 

add指令的一些形式及使用时的注意事项NOTE

技术分享图片

 

NOTE:

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

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

 

 sub指令的一些形式及使用时的注意事项NOTE

技术分享图片

 

NOTE:

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

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

 

>>「栈」的基础知识 

栈」是一个逻辑上的概念。可以将一段内存空间当作「栈」来使用。

 

栈的特性: 后进先出 ,8086中栈以为存取单位

技术分享图片

 

>>与「栈」相关的寄存器: SS和SP 

SS: 栈段段寄存器,用于存放栈段的「段地址」 SP: 栈指针寄存器,用于存放栈顶的偏移地址。

任意时刻,SS:SP对应的物理地址是栈顶的物理地址。(SS) × 16 + (SP) → 栈顶的物理地址

>>「栈」的 push和pop的具体操作和注意事项

push入栈操作分析:第1步: 栈顶上移两个单元,即: 栈顶-2 → 栈顶(sp=sp-2)  第2步: 存入数据

pop出栈操作分析:第1步: 取出字数据 第2步: 栈顶下移两个单元,即: 栈顶+2 → 栈顶(sp=sp+2)

特殊情况,栈为空时,栈顶指向栈底+2

技术分享图片

 

「栈」操作指令: push和pop的指令形式

技术分享图片

技术分享图片

 

注意事项:

在push 内存单元和pop 内存单元中,指令中只需给出「偏移地址」。默认,段地址在DS中。

对8086CPU而言,push和pop的操作: 1.入栈和出栈均以字为单元,2,操作对象不能是常数, 3,pop 段寄存器中,段寄存器不能是CS和SS

 

>>关于「段」

1,「段」是一个逻辑上的概念。 编程时,可根据需要指定一段内存区用作数据段、代码段或是栈段。

2,对8086CPU而言,push和pop的操作: 入栈和出栈均以字为单元 操作对象不能是常数 pop 段寄存器中,段寄存器不能是CS和SS

3, 一段内存可以同时用作代码段、数据段、栈段。 由编程时灵活确定。

4,在8086CPU中,每个段的最大长度不能超过64KB。 (因为寄存器是16位的,能表示的地址范围只能是0000H~FFFFH,即0~2^16-1)

以上是关于第三章整理的主要内容,如果未能解决你的问题,请参考以下文章

第三章整理

Java第三章整理

linux内核设计与实现一书阅读整理 之第三章

2017.07.06 IT项目管理笔记整理 第三章

计算机网络学习笔记第三章(数据链路层)超详细整理

【技术整理】国外第三方登录与分享调研