汇编学习-寄存器

寄存器

8086CPU的所有寄存器都是16位的

通用寄存器

AX,BX,CX,DX
这四个寄存器通常用来存放一般性的数据,称为通用寄存器
这四个寄存器均可分成两个独立使用的8位寄存器

  • AX可分为AHAL
  • BX可分为BHBL
  • CX可分为CHCL
  • DX可分为DHDL

物理地址

8086CPU给出物理地址的方式为:
物理地址 = 段地址 ∗ 16 + 偏移地址 物理地址=段地址*16 + 偏移地址 物理地址=段地址16+偏移地址
记作:[段地址:偏移地址]

段寄存器

CS,DS,SS,ES

可用一个段存放数据,定义为“数据段”,将其段地址存放于DS中,用mov,add,sub等访问内存的指令时,这样CPU将定义的数据段中的内容当作数据访问。

可用一个段存放代码,定义为“代码段”,将其段地址存放于CS中,将段中第一条指令的偏移地址存放于IP中,这样CPU将执行定义的代码段中的指令。

可用一个段当作栈,定义为“栈段”,将其段地址存放于SS中,将栈顶元素的偏移地址存在SP中,这样CPU在需要进行栈操作时,将定义的栈段当作栈空间来使用。

CS

CSIP是8086CPU中两个最关键的寄存器,他们指示了CPU当前要读取指令的地址。
CS: 代码段寄存器
IP: 指令指针寄存器

8086机中,任意时刻,CPU将 CS: IP指向的内容当作指令执行

mov指令不能用来设置CSIP的值
修改CS``````IP的值的命令为:jmp
可用jmp <段地址>:<偏移地址>形式的命令同时修改CSIP的值,修改后CS=<段地址>IP=<偏移地址>

也可用jmp <某一合法寄存器>的形式来单独修改IP中的值,修改后IP=
<某一合法寄存器>中的值。

jmp命令详见文章:占位

[address]

可用[···]表示一个内存单元
[···]中的数字表示内存单元的偏移地址,段地址会取用ds中的数据作为内存单元的段地址

DS

DS:用来存放要访问的数据的段地址
下例为将[1000:0]中的数据读到ax

mov bx,1000H
mov ds,bx
mov ax,[0]

8086CPU不支持将数据直接送入段寄存器的操作,需用一个通用寄存器进行中转

SS

SS为段寄存器,存放栈顶的段地址
SP存放偏移地址
在任意时刻,SS:SP指向栈顶元素
8086CPU提供push入栈操作和pop出栈操作,每次操作都是以字为单位进行的,也就是SP的移动量为+或者-2。

pop ax表示从栈顶[SS:SP]取出数据送入ax,后SP+2, 此时[SS:SP]指向新栈顶。

push ax先将SP-2,表示将ax中的数据送入[SS:SP],此时[SS:SP]指向新栈顶。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
汇编语言中,机器指令是由0和1组成的,计算机只能理解这种机器指令。而为了简化操作,开发出了汇编语言。汇编指令是一种人类可读的指令,可以通过编译器将其翻译为机器指令,然后执行在计算机上。 要学习汇编语言,首先需要了解汇编指令是如何执行的,以及CPU如何从内存中读取和写入信息。存储器被划分为多个存储单元,每个单元存储一个字节(Byte)的信息。每个存储单元都有一个唯一的地址,用来访问该单元的内容。 在汇编语言中,使用mov指令可以将数据从一个地方移动到另一个地方。其中,mov段寄存器寄存器用于将一个寄存器的值移动到段寄存器,mov内存单元,寄存器用于将内存单元的值移动到寄存器,mov段寄存器,内存单元用于将段寄存器的值移动到内存单元。 如果我们给出一个汇编程序如下: ```assembly assume cs:code code segment mov ax,0ffffH mov ds,ax mov bx,0 ; 初始化ds:bx指向ffff:0 mov dx,0 ; 初始化累加器 mov cx,12 ; 初始化循环计数器 s: mov al,[bx] mov ah,0 add dx,ax inc bx ; bx指向下一个单元,inc的功能是将寄存器中的内容加1 loop s ; 循环体 mov ax,4c00H ; 返回 int 21H code ends end ``` 我们可以看到,在这个程序中,使用了mov al,[bx]的指令将存储在[bx]地址处的值赋给了al寄存器。所以,如果机器汇编语言出栈寄存器S中的值为-1,那么在该程序中,对应的汇编指令应该是mov al,-1。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

sykongdl

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

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

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

打赏作者

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

抵扣说明:

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

余额充值