段寄存器:汇编学习二

我们可以将一段内存定义为一个段,用一个段地址指示段,用偏移地址访问段内的单元,可以用分段的方式来管理内存。

用一个段存放数据,将它定义为“数据段”;

用一个段存放代码,将它定义为“代码段”;

用一个段当作栈,将它定义为“栈段”。

注意:

一个段的起始地址一定是16的倍数;
偏移地址为16位,变化范围为0-FFFFH,所以一个段的长度最大为64KB。
CPU可以用不同的段地址和偏移地址形成同一个物理地址。
段寄存器:8086CPU有4个段寄存器:CS、DS、SS、ES,提供内存单元的段地址。

1、CS和IP

CS为代码段寄存器,IP为指令指针寄存器,

CPU将CS、IP中的内容当作指令的段地址和偏移地址,用它们合成指令的物理地址,

CPU将CS:IP指向的内容当作指令执行。(即PC)
在这里插入图片描述

 

8086CPU的工作过程简要描述

从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
IP=IP+所读取指令的长度,从而指向下一条指令;
执行指令。转到步骤1,重复这个过程。
在8086CPU加电启动或复位后(即CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H,即在8086PC机刚启动时,FFFF0H单元中的指令是8086PC机开机后执行的第一条指令。

8086CPU提供转移指令修改CS、IP的内容。

jmp 段地址:偏移地址:用指令中给出的段地址修改CS,偏移地址修改IP。如:jmp 2AE3:3

jmp 某一合法寄存器:仅修改IP的内容。如:jmp ax。在含义上好似:mov IP,ax

8086CPU不支持将数据直接送入段寄存器的操作,这属于8086CPU硬件设计

2、DS 和 [address]

DS寄存器:通常用来存放要访问数据的段地址

[address]表示一个偏移地址为address的内存单元,段地址默认放在ds中

通过数据段段地址和偏移地址即可定位内存单元。

mov bx, 1000H ;8086CPU不支持将数据直接送入段寄存器的操作

mov ds, bx ;ds存放数据段地址

mov [0], al ;将al数据(1字节)存到1000H段的0偏移地址处,即10000H

mov ax, [2] ;将数据段偏移地址2处的一个字(8086为2字节)存放到ax寄存器

add cx, [4] ;将偏移地址4处的一个字数据加上cx寄存器数据放到cx寄存器

sub dx, [6] ;dx寄存器数据减去数据段偏移地址6处的字数据存到dx

例子:

mov ax, 1000H 
mov ss, ax 
mov sp, 0010H    ;初始化栈顶
mov ax, 001AH
mov bx, 001BH 

push ax 
push bx    ;ax、bx入栈

sub ax, ax   ;将ax清零,也可以用mov ax,0,
             ;sub ax,ax的机器码为2个字节,
             ;mov ax,0的机器码为3个字节。
        
sub bx, bx 

pop bx  ;从栈中恢复ax、bx原来的数据
pop ax  ;

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
汇编语言中的寄存器是用来存储和处理数据的。x86 架构的 CPU 有多个寄存器,每个寄存器都有特定的用途。下面是常用的 x86 架构寄存器及其作用: 1. 通用寄存器(General-purpose registers): - EAX:累加器(accumulator),用于算术和逻辑运算。 - EBX:基址寄存器(base register),通常用于存放数据的指针。 - ECX:计数器(counter),用于循环和字符串操作。 - EDX:数据寄存器(data register),用于算术操作和存放 I/O 端口地址。 这些寄存器的 16 位版本分别为 AX、BX、CX、DX。 2. 段寄存器(Segment registers): - CS:代码段寄存器(code segment),存放代码的段地址。 - DS:数据段寄存器(data segment),存放数据的段地址。 - SS:堆栈段寄存器(stack segment),存放堆栈的段地址。 - ES:附加段寄存器(extra segment),通常用于字符串操作。 3. 指针寄存器(Pointer registers): - ESP:堆栈指针寄存器(stack pointer),存放栈顶地址。 - EBP:基址指针寄存器(base pointer),用于存放堆栈帧的基地址。 4. 索引寄存器(Index registers): - ESI:源索引寄存器(source index),通常用于字符串操作。 - EDI:目的索引寄存器(destination index),通常用于字符串操作。 这些寄存器的 16 位版本分别为 SI 和 DI。 除了以上列出的寄存器,还有一些特殊用途的寄存器,如 EFLAGS 寄存器用于存储 CPU 的状态标志位,CR 寄存器用于控制 CPU 的行为等。每个 CPU 架构的寄存器都有其特定的用途和规定操作,需要根据具体的架构和指令集手册来进行学习和使用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃头大魔王—

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值