汇编学习-寄存器(内存访问)&栈机制
来源:互联网 发布:ubuntu terminal 命令 编辑:程序博客网 时间:2024/06/07 01:56
8086CPU中除了常见的AX,BX,CX,DX等4个通用寄存器外,还存在着其他不同类型的寄存器,如存储代码段地址的CS,以及代码段偏移地址的IP等。
这里先解释DS(存放数据段地址的寄存器)。8086CPU默认的将DS寄存器中存放的数据为内存单元的段地址。
8086CPU不允许直接对段地址进行赋值操作,因此如果想制定访问的内存地址,在设置段地址DS时,可以先将地址数据mov到AX中,然后再mov DS,AX。
而要设置内存中的地址偏移量时,可以直接使用mov [...]的方法,这里默认使用DS中的数据为段地址。例如mov [0],0010,对应的内存地址为DS * 16 + 0010
8086CPU提供栈的访问机制,利用SS寄存器存放栈的段地址,SP寄存器存放栈的偏移地址(或者将SP叫做栈内指针)
8086CPU提供push入栈操作和pop出栈操作,每次操作都是以字为单位进行的,也就是SP的移动量为+或者-2 。
栈是一种从高地址区向低地址区扩展的结构类型,其中SS * 16 + SP称为栈顶地址,栈顶地址中没有存放数据(可以这么理解)
假如目前SS = 1000,SP = 0010,栈顶地址为10010,push AX(AX = 1020),则地址10010中存放的是AX的高8位内容10,地址1000F中存放的是AX的低8位内容20。
即push操作后,SP = SP -2,pop操作后,SP = SP +2。
不过比较坑的是8086CPU并没有提供栈的越界提示,也就是说编程时要自己操心栈顶越界的问题(或者说栈的空间大小要我们自己去管理)。
如果将10000H到1FFFFH这段空间作为栈段的话,初始状态下栈是空的,那么显然SS = 1000,SP = ?
由于栈底字单元地址为FFFE,当最底的元素弹出栈后,SP = SP + 2,则SP = 0000。这里不考虑进位或者正负条件。
- 汇编学习-寄存器(内存访问)&栈机制
- 汇编学习笔记:寄存器(内存访问)
- 汇编学习笔记--寄存器(内存访问 1)
- 汇编入门学习笔记 (二)—— 寄存器(内存访问)、栈
- 汇编第三节-寄存器(内存访问)
- 寄存器(内存访问)
- 寄存器(内存访问)
- 内存访问(寄存器)
- 3 寄存器(内存访问)
- 汇编语言学习——第三章 寄存器(内存访问)
- 汇编语言学习笔记(三)寄存器(内存访问)
- 汇编语言学习笔记(3)——寄存器,内存访问
- 《汇编语言》学习笔记 第三章 寄存器(内存访问)
- [汇编语言学习笔记][第三章寄存器(内存访问)]
- 汇编(通用寄存器_内存读写)
- 汇编语言学习第三章-寄存器(内存访问)
- 嵌入式汇编学习笔记(二)----寄存器
- 【汇编学习(二)】寄存器相关
- 多线程介绍:NSThread 、NSRunLoop 和 Dispatch Queue
- Codeforces 336D. Vasily the Bear and Beautiful Strings 解题报告
- Handler的基本使用方法
- 全零网络IP地址0.0.0.0表示意义详谈
- 基于 mini2440 电阻式触摸屏(三):Linux输入子系统(InputSubsystem)
- 汇编学习-寄存器(内存访问)&栈机制
- linux下批量替换文件内容
- 博客文章汇总信息
- 4629. A+B Again
- Win32 Series - The Listbox Class
- CCTextFieldTTF ios按return 隐藏键盘
- 【e周美文】优秀博客上榜推荐
- 基于 mini2440 电阻式触摸屏(二):S3C2440 电阻式触摸屏接口、内部ADC结构
- 图片优化须知的8个小技巧