汇编语言-王爽著学习心得 第三天

第三章 寄存器(内存访问)

3.1 内存中字的存储

CPU中,用16位寄存器来存储一个字。高8位存放高位字节,低8位存放低位字节。
例如:20000(4E20H)在内存中的存储
这里写图片描述

3.2 DS和[address]

DS 是数据段寄存器,用来存放数据段地址。比如我们想要读取10000H单元的内容,可以用如下程序段进行:
mov bx, 1000H
mov ds, bx
mov al, [0]
以上程序段有2点疑问
1、第一、二两句可不可以合并成一句 mov ds, 1000H
答:不可以,因为8086CPU不支持将数据直接送入段寄存器,语法错误。必须要通过通用寄存器中转
2、第三句没有段地址为什么也能访问到内存单元
答:因为DS段寄存器是可以省略的。在所有段寄存器中,只有DS可以省略。这句也可以写成 mov al, ds:[0]

3.3 字的传送

比较下面2条语句的区别
mov ax, 1000:[0]
mov ah, 1000:[0]
第一句的意思是将 1000:[0] 起始的2个字节单元的数据传给ax。即把10001号单元的数据传给ah,把10000号单元的数据传给al。
第二句的意思是将10000 号单元的数据传给ah

3.4 mov、add、sub 指令

mov 寄存器, 数据
mov 寄存器, 寄存器
mov 寄存器, 内存单元
mov 内存单元, 寄存器
mov 段寄存器, 寄存器
mov 寄存器, 段寄存器

add 寄存器, 数据
add 寄存器, 寄存器
add 寄存器, 内存单元
add 内存单元, 寄存器

sub 寄存器, 数据
sub 寄存器, 寄存器
sub 寄存器, 内存单元
sub 内存单元, 寄存器

3.5 数据段

3.6 栈

栈是一种具有特殊的访问方式的存储空间
1、先进后出的存储方式(FILO)
2、在此之前,想要将一个数据存入内存单元只有一个方法,就是 mov [0], ax。栈提供了另外一种方法
mov ax, ds
mov ss, ax
mov sp, 2
push ax

3.7 CPU提供的栈机制

  • ss段寄存器 指向 栈段的段地址
  • sp栈指针寄存器 永远指向栈顶。当栈空时,由于sp是16位寄存器,所有一个栈的最大空间为0xFFFF
    这里写图片描述

分析图1:
ss = 1000H
sp = 0010H
栈大小 = 16字节

分析图2:
push ax 等价于
sub sp, 2
mov ss:[sp], ax

这里写图片描述

分析图5:
pop ax 等价于
mov ax, ss:[sp]
add sp, 2

3.8 栈顶超界的问题

1、栈满后,继续push会超过上限
2、栈空后,继续 pop 会超过下限

3.9 push、pop指令

push 寄存器 ;将寄存器中的数据入栈
push 段寄存器
push 内存单元 ;将内存单元出的一个字入栈

pop 寄存器 ;出栈,用一个寄存器接收出栈的数据
pop 段寄存器
pop 内存单元 ;出栈,用一个内存单元接收出栈的数据

3.10 栈段

这里写图片描述

猜你喜欢

转载自blog.csdn.net/wanyongtai/article/details/79982174
今日推荐