汇编语言学习笔记(三)
来源:互联网 发布:gone一首网络歌曲 编辑:程序博客网 时间:2024/04/30 13:33
主要内容:从访问内存的角度学习几个寄存器
1.CPU中,用16位寄存器来存储一个字。高8位存放高字节,低8位存放低字节。
2.什么是字单元?
字单元,即存放一个字型数据(16位)的内存单元,由两个地址连续的内存单元组成。高地址内存单元中存放字型数据的高位字节,低地址内存单元中存放字型数据的低位字节。
3.任何两个地址连续的内存单元,N号单元和 N+1号单元,可以将它们看成两个内存单元 ,也可以看成一个地址为N的字单元中的高位字节单元和低位字节单元。
4.CPU要读取一个内存单元的时候,必须先给出这个内存单元的地址。
5.在8086PC中,内存地址由段地址和偏移地址组成。
6.8086CPU中有一个 DS寄存器,通常用来存放要访问的数据的段地址。
7.mov指令的格式:
mov 寄存器名,内存单元地址
寄存器名可以是上述的DS寄存器;“[…]”表示一个内存单元, “[…]”中的0表示内存单元的偏移地址。
执行指令时,8086CPU自动取DS中的数据为内存单元的段地址。
8.mov 寄存器名,内存单元地址,是把某内存地址单元的值送入某寄存器里去;
mov 内存单元地址,寄存器名,是把某寄存器的值送入到某内存地址单元中去;
9.mov命令总结:
mov 寄存器,数据
mov 寄存器,寄存器
mov 寄存器,内存单元
mov 内存单元,寄存器
mov 段寄存器,寄存器
mov 寄存器,段寄存器
mov 内存单元,段寄存器
mov 段寄存器,内存单元
10.add和sub指令同mov一样,都有两个操作对象。
11.什么是数据段?
将一组长度为N(N≤64K)、地址连续、起始地址为16的倍数的内存单元当作专门存储数据的内存空间,叫做数据段。
12.将一段内存当作数据段,是我们在编程时的一种安排,我们可以在具体操作的时候 ,用 ds 存放数据段的段地址,再根据需要,用相关指令访问数据段中的具体单元。
如:mov ax 123BH
mov ds ,ax
add al,[0] ;读的只是一个内存单元的值,所以用AX的低8位来接收
add al,[1]
add al,[2]
add ax,[0] ;读的是一个字单元的值,所以用16位的寄存器AX来接收
add ax,[2]
add ax,[4]
13.栈有两个基本的操作:入栈和出栈。
入栈:将一个新的元素放到栈顶;
出栈:从栈顶取出一个元素。
14.栈顶的元素总是最后入栈,需要出栈时,又最先被从栈中取出。(Last In First Out,后进先出)
15.栈的操作命令:
push ax:将寄存器ax中的数据送入栈中;
pop ax :从栈顶取出数据送入寄存器ax中。
16.8086CPU中,有两个寄存器:
段寄存器SS 存放栈顶的段地址
寄存器SP 存放栈顶的偏移地址
任意时刻,SS:SP指向栈顶元素。
17.栈顶超界的问题?
当栈满的时候再使用push指令入栈,
栈空的时候再使用pop指令出栈,
都将发生栈顶超界问题。
栈顶超界是危险的。
结论:
我们在编程的时候要自己操心栈顶超界的问题 ,要根据可能用到的最大栈空间,来安排栈的大小,防止入栈的数据太多而导致的超界;执行出栈操作的时候也要注意,以防栈空的时候继续出栈而导致的超界。
18.push和pop指令的格式:
push 寄存器:将一个寄存器中的数据入栈
pop寄存器:出栈,用一个寄存器接收出栈的数据
push 段寄存器:将一个段寄存器中的数据入栈
pop段寄存器:出栈,用一个段寄存器接收出栈的数据
push内存单元:将一个内存单元处的字入栈(栈操作都是以字为单位)
pop 内存单元:出栈,用一个内存字单元接收出栈的数据
19.关于栈的结论:
push、pop 实质上就是一种内存传送指令,可以在寄存器和内存之间传送数据,与mov指令不同的是,push和pop指令访问的内存单元的地址不是在指令中给出的,而是由SS:SP指出的。
同时,push和pop指令还要改变 SP 中的内容。
push和pop指令同mov指令不同,CPU执行mov指令只需一步操作,就是传送,而执行push、pop指令却需要两步操作。
20.栈操作步骤:
执行push时:先改变SP,后向SS:SP处传送。
执行pop时:先读取SS:SP处的数据,后改变SP。
21.一段内存,可以既是代码的存储空间,又是数据的存储空间,还可以是栈空间,也可以什么也不是。关键在于CPU中寄存器的设置,即:CS、IP、SS、SP、DS的指向。
- 汇编语言学习笔记(三)
- 汇编语言基础知识学习笔记(三)
- win32汇编语言学习笔记(三)
- 80x86汇编语言学习笔记(三)
- 汇编语言笔记整理(三)
- 汇编语言学习三
- 汇编语言学习(三)
- 汇编语言学习笔记(三)寄存器(内存访问)
- 汇编语言学习笔记(一)
- 汇编语言学习笔记(二)
- 汇编语言学习笔记(四)
- 汇编语言学习笔记(五)
- 汇编语言学习笔记(六)
- 汇编语言学习笔记(七)
- 汇编语言学习笔记(八)
- 汇编语言学习笔记(九)
- 汇编语言第一章学习笔记
- 汇编语言学习笔记
- 20多个在线操作系统(webOS)一览
- udp并发服务程序---makefile文件
- 多用户操作一个数据表时的并发性操作
- 2008上海英雄会,英雄如是说
- 会说话,减少奋斗30年
- 汇编语言学习笔记(三)
- 如何安装MyEclipse开发环境
- 过期文章
- 配置tomcat6.0环境变量
- 取石子游戏
- 如何经营博客
- Windows下JDK1.6.0+Tomcat6.0的安装配置
- 时间序列形态相似性分析(一)——时间序列形态相似性的度量
- 转载的标准文档:C语言实现一个简单的单向链表list