第三章整理
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)
以上是关于第三章整理的主要内容,如果未能解决你的问题,请参考以下文章