汇编二

(八)内存分段管理

1.物理地址=基础地址(段地址*0x10)+偏移地址

所以采用分段的内存管理:

2.在编程时可以根据需要,将若干连续地址的内存单元看做一个段,用段地址×16定为段的起始地址(基础地址),用偏移地址定位段中的内存单元。

->段地址×16必然是16的倍数,所以一个段的起始地址(基础地址)也一定是16的倍数

->偏移地址为16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB

结论:偏移地址:0-0xFFFF  64KB个内存单元,加入给的段地址为0x10000  CPU寻址范围为0x10000-0x1FFFF


(九)段寄存器

以8086CPU为例:

8086有4个段寄存器:CS、DS、SS、ES,当CPU需要访问内存时由这4个段寄存器提供内存单元的段地址

->CS (Code Segment):代码段寄存器

1.CS为代码段寄存器,IP为指令指针寄存器,它们指示了CPU当前要读取指令的地址:例如

->CS:IP : 2000H:0000H

->执行mov ax,0123H -> AX:0123H -> CS:IP : 2000H:0003H

->执行mov bx,0003H -> BX:0003H -> CS:IP : 2000H:0006H

->执行mov ax,bx  -> AX:0003H -> CS:IP 2000H:0008H

->执行add ax,bx -> AX:0006H ->CS:IP 2000H:000AH

.........

在内存或者磁盘上,指令和数据没有任何区别,都是二进制信息,CPU将CS:IP指向的内存单元的内容看做指令

2.jmp指令

mov指令不能用于设置CS、IP的值,8086提供了另外的指令来修改CS、IP的值,这些指令统称为转移指令,最简单的是jmp指令:



练习:

-> CS:IP  2000H:0000H -> 执行20000H处指令 -> mov ax,6622H -> AX:6622H -> CS:IP 2000H:0003H

-> 执行20003H处指令 -> jmp 1000:3 -> CS:IP 1000H:0003H

-> 执行10003H处指令 -> mov ax,0000 -> AX:0000H ->CS:IP 1000H:0006H

-> 执行10006H处指令 -> mov bx, ax ->BX:0000H ->CS:IP 1000H:0008H

-> 执行10008H处指令 -> jmp bx -> CS:IP 1000H:0000H

-> 执行10000H处指令 -> mov ax 0123H ->AX:0123H -> CS:IP 1000H:0003H

-> 开始陷入死循环

由此可以看出,每次读取命令CPU会改变一次IP,执行到jmp时会多改变一次IP。


->DS (Data Segment):数据段寄存器

1.DS  [address]

CPU要读写一个内存单元时,必须要先给出这个内存单元的地址,在8086中,内存地址由段地址和偏移地址组成8086中有一个DS段寄存器,通常用来存放要访问数据的段地址

-> mov bx,1000H

-> mov ds,bx

-> mov al,[0]

*上面3条指令的作用将10000H(1000:0)中的内存数据赋值到al寄存器中

*mov al,[address]的意思将DS:address中的内存数据赋值到al寄存器中

*由于al是8位寄存器,所以是将一个字节的数据赋值给al寄存器

练习1:写出下面指令执行后寄存器ax,bx,cx中的值


1.AX: 1000H

2.DS: 1000H

3.AX: 1123H

4.BX: 6622H

5.CX: 2211H

6.BX: 8833H

7.CX:8833H

----> AX:1123H   BX:8833H  CX:8833H

练习2:写出下面指令执行后寄存器ax,bx中的值

1.AX 1000H

2.DS 1000H

3.AX 11316 = 2C34H 

4.10000H:34  10001H:2C  10002H:22  10003H:11

5.BX 2C34

6.10000H:34  10001H:2C  10002H:22  10003H:11

7.BX 1B12

8.10000H:34  10001H:2C  10002H:12  10003H:1B


指令的概念:

练习:

各寄存器的初始值:CS=2000H,IP=0,DS=1000H,AX=0,BX=0;

1.写出CPU执行的指令序列(用汇编指令写出)

2.写出CPU执行完指令后,CS,IP和相关寄存器中的数值

3.再次体会:数据和程序有区别吗?如何确定内存中的信息哪些是数据,哪些又是程序?


以上。

->SS (Stack Segment):堆栈段寄存器

->ES (Extra Segment):附加段寄存器

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 8086汇编 本笔记是笔者观看小甲鱼老师(鱼C论坛)《零基础入门学习汇编语言》系列视频的笔记,在此感谢他和像他一样...
    Gibbs基阅读 38,074评论 8 114
  • 王爽汇编全书知识点大纲 第一章 基础知识 机器语言 汇编语言的产生 汇编语言的组成 存储器 cpu对存储器的读写 ...
    2c3ba901516f阅读 2,788评论 0 1
  • 计算机通过执行指令序列来使机器得以工作,所以对于每一系列的计算机都有指定的一组指令集供计算机使用,这组指令...
    未来科技工作室阅读 8,375评论 1 10
  • 汇编总结 汇编的发展史 机械语言 由0和1组成的机器指令(如:0101 0001 1101 0110) 汇编语言(...
    iChuck阅读 1,403评论 1 8
  • 分享一个故事 一对情侣在一个小餐馆吃饭,旁桌是七八个小混混模样的男人。女生长得还算好看,旁边的几个混混对女的不断吹...
    乐无彩阅读 614评论 0 0

友情链接更多精彩内容