汇编 寄存器和栈

原文链接: 汇编 寄存器和栈

上一篇: 汇编 基础概念

下一篇: IDEA Junit 测试

寄存器reg

ax, bx, cx, dx, ah, al, bh, bl, ch, cl, dh, dl, sp, bp, si, di

段寄存器

ds, ss, cs, es

bx,si,di,bp
在[...]中,这4个寄存器可以单个出现,或者以四种组合出现
bx,si
bx,di
bp,si
bp,di
正确
mov ax,[bx]
mov ax,[bx+si]
mov ax,[bx+di]
mov ax,[bp]
mov ax,[bp+si]
mov ax,[bp+di]


错误
mov ax,[cx]
mov ax,[ax]
mov ax,[dx]
mov ax,[ds]

CPU用16位寄存器来存储一个字,高8位存放高位字节,低8位存放低位字节,在内存中存储时,由于内存0单元是字节单元(一个单元存放一个字节),则一个字要用两个地址连续的内存0单元来存放这个字的低位存放在低地址单元中,高位字节存放在高地址单元中

1234H在寄存器和内存中的存放方式

210527_uG76_2856757.png

读取内存的方式

mov bx,1000H
mov ds,bx
mov al,[0]
将10000H=1000H:0中的数据读取到al中
[0]表示偏移地址

只能通过这个方式修改ds的值,不能使用立即数
mov ds,ax

mov 指令形式

mov ax,8
mov ax,bx
mov ax,[0]
mov [0],ax
mov ds,ax
mov ax,ds
mov [0],cs
mov ds,[0]

栈在内存中的表示

    mov ax,d
   	push ax

211825_1E4k_2856757.png

栈的操作是以字为单位的,所以步进为2

SS栈顶的段地址

SP栈顶的偏移地址

任意时刻,SS:SP指向栈顶元素

入栈时栈顶由高地址向低地址增长

如果将10000H--1000FH作为栈空间

则SS:1000H,sp:0010H

push 指令执行步骤

1,sp=sp-2

2,向SS:SP指向的字单元中送入数据

pop指令执行步骤

1,从SS:SP指向的字单元中读取数据

2,SP=SP+2

使用栈在10000H处写入字型数据2266H

mov ax,1000h
mov ss,ax
mov sp,2
mov ax,2266h
push ax

栈最大容量为64K,当栈满时执行压栈操作,栈顶将环绕,覆盖原来栈中的内容

将寄存器置为0

sub ax,ax  机器码2个字节
mov ax,0 机器码3个字节

SI和DI

si和di是8086CPU中和bx功能相近的寄存器,si和di不能够分成两个8位寄存器来使用,下面三种方式等价

mov bx,0
mov ax,[bx]

mov si,0
mov ax,[si]

mov di,0
mov ax,[di]

寻址方式

[idata] 用常量表示地址,用于直接定位一个内存0单元
[bx] 用一个变量表示内存地址,可以间接定位一个内存地址0
[bx+idata] 用一个变量和常量表示地址,可在一个起始地址的基础上用变量间接定位一个内存0单元
[bx+si] 用两个变量表示地址
[bx+si+idata] 用两个变量和一个常量表示地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值