标签:特性 段地址 汇编语言 偏移地址 最大 原理 关于 概念 运算
汇编语言程序设计
第3章概念梳理
基础概念部分:{
字数据在内存当中的存储:高-高 低-低
字数据的低位字节存放在低地址内存单元
字数据的高位字节存放在高地址内存单元
取低地址内存单元地址作为字数据地址,例如数据124EH:
12H存储在偏移量为"2"的字节单元,4EH存储在偏移量为"1"的字节单元
则从地址为"1"的地址单元取出的一个字数据为124EH
12为高位,故存储在高位“2”单元,4E为低位存储在低位”1“单元
数据在内存和CPU之间的传送:
执行指令时,默认情况下,8086自动取寄存器DS中的值为内存单元的段地址
DS:数据段段寄存器,用于存放数据段的[段地址]
mov,add,sub等汇编指令中,访问内存单元是,默认情况下指的是数据段。
关于常数(立即数运算):
不能作为第1个操作数(目的操作数)
第2个操作数(源操作数)时,如果最高位是十六位制的a~f或A~F,前面要加零。
例如不能写成 mov 4000H,ax,应当写成mov ax,4000H
不能写成 mov ax,A400H,应当写成mov ax,0A400H
两个内存单元之间不能直接传送数据:
mov [1],[2]
不能使用mov指令修改CS和IP的值
关于段寄存器:
关于add指令:
错误点:
add指令的操作数不能是段寄存器,例如:
add ax,[2]
add ds,[2]
关于sub指令:
错误点:
sub指令的操作数不能是段寄存器
栈的概念:
栈的特性:先进后出
栈顶:最后入栈的字数据所对应的地址单元
栈底:固定的一端,栈区最高地址单元的前一个单元
入栈:把数据存入栈
出栈:从栈取出数据
与栈相关的寄存器SS和SP
SS:栈段段寄存器,用于存放栈段的[段地址]
SP:栈指针寄存器,用于存放栈顶的偏移指针
SS:SP对应的物理地址是栈顶的物理地址
(SS)*16+(SP)=栈顶的物理地址
[栈]的操作指令:push和pop
push ax 将ax的值压入栈顶
pop ax 将栈顶的元素值弹出到ax寄存器
push [0] 将ds:0对应的内存单元字数据压入栈
pop [0] 将栈顶的元素弹出到ds:0对应的内存单元
push和pop指令的注意点:
入栈和出栈均以字为单元
操作对象不能是常数
pop段寄存器当中,段寄存器不能是CS和SS
可以利用栈的定义完成如下两个操作:
1、利用栈"保护现场"
保护现场原理: 先将寄存器bx,cx的值压入栈,然后无论对cx与bx寄存器的值进行如何的操作,都能通过栈先进后出的原则,把两个寄存器的值弹出返回。
2、利用栈实现数据交换
同样利用先进后出的原则,先将两个寄存器的值压入,而后根据它们压入栈的顺序相同的进行弹出,即可实现两个寄存器数据的交换。
关于[段]的小结
一段内存可以同时用作代码段、数据段、栈段
在8086CPU中,每个段的最大长度不能超过64KB,即 0000H~FFFFH
标签:特性 段地址 汇编语言 偏移地址 最大 原理 关于 概念 运算
原文地址:https://www.cnblogs.com/cymwn-com/p/10176720.html