汇编笔记2

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

内存中字的存储

  • 内存单元==字节单元
  • 字单元:由两个连续的内存单元组成,16位寄存器存储一个字,高8位地址存高字节,低8位地址存低字节
    1

DS和[address]

DS寄存器通常用来存放要访问的数据的段地址
直接上例子

 
1
2
3
mov bx,1000H
mov ds,bx
mov al,[0]

8086CPU中,往DS里面写东西只能以mov ds,寄存器的方式,而不能像ax寄存器那样mov ax,1
CPU在执行上述类似指令的时候,会将[…]里的内容作偏移地址,取默认存在ds里的作为段地址来访问对应内存

字的传送

一个例子:
2

mov、add、sub指令

mov

1
2
3
4
5
6
7
8
mov 寄存器,数据
mov 寄存器,寄存器
mov 寄存器,内存单元
mov 内存单元,寄存器
mov 段寄存器,寄存器
mov 段寄存器,寄存器
mov 内存单元,段寄存器
mov 段寄存器,内存单元

add&sub

1
2
3
4
5
6
7
8
add 寄存器,数据
add 寄存器,寄存器
add 寄存器,内存单元
add 内存单元,寄存器
sub 寄存器,数据
sub 寄存器,寄存器
sub 寄存器,内存单元
sub 内存单元,寄存器

经实验,add和sub不支持寄存器与段寄存器之间的操作
3

体会数据和程序的区别

例:
4
5

程序和数据本身存放形式没有区别,关键是看存的的段地址:ds段的就是数据,cs段的就是程序指令。

CPU提供的栈机制

push ax :表示将寄存器ax中的数据送入栈(字型数据高位字节先入栈

pop ax 表示从栈顶取出数据送入ax(先出的为低位字节

入栈和出栈操作都是以为单位进行的

6

8086CPU中的SS(段寄存器):SP(寄存器)在任意时刻都指向栈顶元素。push和pop指令执行时,CPU从SS和SP中得到栈顶地址

入栈时,栈顶从高地址向低地址方向延伸

栈空时,SS:SP指向栈空间最高地址单元的下一个单元,如:
7

push 和 pop都有可能导致栈顶越界

8086CPU不会保证我们对栈的操作不会超界,要自己操心~

push 和 pop 指令

push(pop) 寄存器/段寄存器/内存单元

Comments