基础

(1) 内存以字节为单位,划分为若干个单元。
(2) 计算机内数据存-取单位:
① 字节 (8bit)
② 字 (16bit)
③ 双字 (32bit)
④ 四字 (64bit)

ds寄存器

DS: 数据段段寄存器,用于存放数据段的「段地址」

将一段内存用作数据段,是编程时的一种安排
在mov, add, sub等汇编指令中,访问内存单元时,默认情况下,指的是数据段。

格式:

mov ax, [1]; ax ← ( (ds) × 16 + 1)

附:

注意:

(1) 两个操作数长度要一致。

(2) 关于常数(也叫立即数)

  ① 不能作为第1个操作数(目的操作数)
  ② 作第2个操作数(源操作数)时,如果最高位是十六进制的a~f或A~F,前面要加零!

(2)例:

  mov 4000H, ax × mov ax, 4000H √
  mov ax, A400H × mov ax, 0A400H √

(3) 两个内存单元之间不能直接传送数据。

(4) 不能使用mov指令修改CS和IP的值。

(5)段寄存器

  ① 两个段寄存器之间不能直接传送;
  ② 不能把常数送到段寄存器。

「栈」是一个逻辑上的概念。可以将一段内存空间当作「栈」来使用。

栈顶: 最后入栈的字数据所对应的地址单元
栈底: 固定的一端,栈区最高地址单元的前一个单元

入栈: 把数据存入栈
出栈: 从栈取出数据

SS: 栈段段寄存器,用于存放栈段的「段地址」
SP: 栈指针寄存器,用于存放栈顶的偏移地址。

SS:SP对应的物理地址是栈顶的物理地址。
(SS) × 16 + (SP) → 栈顶的物理地址

「栈」操作指令: push和pop

小结

(1) 「段」是一个逻辑上的概念。
编程时,可根据需要指定一段内存区用作数据段、代码段或是栈段。
(2) 用作数据段时,要把段地址→DS
用作栈段时,要把段地址→SS,栈顶偏移地址 → SP
用作代码段时,段地址→CS,要取的指令偏移地址→IP。但CS和IP的值不能使用mov改变。
(3) 一段内存可以同时用作代码段、数据段、栈段。
由编程时灵活确定。
(4) 在8086CPU中,每个段的最大长度不能超过64KB。
(因为寄存器是16位的,能表示的地址范围只能是0000H~FFFFH,即0~216-1)

最新文章

  1. 用flashfxp做ftp镜像同步
  2. 表单验证之validform.js使用方法
  3. oracle中行转列函数
  4. JDK与JRE
  5. as3+java+mysql(mybatis) 数据自动工具(五)
  6. SQL Server中in与exist效率比较
  7. K-means clustering (K-means聚类)
  8. java测试之文件操作
  9. 小白的Python之路 day5 hashlib模块
  10. 解决RSA加密中,System.Security.Cryptography.CryptographicException: 系统找不到指定的文件
  11. Spring Boot MyBatis配置多种数据库
  12. Node json
  13. Makefile ------ 在Makefile中进行宏定义-D
  14. Java-idea-常用插件-lombok
  15. SQL Server数据库中外键强制约束的好处是什么,什么时候设置外键非强制约束?(转载)
  16. sqlserver 临时表、表变量、CTE的比较
  17. PowerDesigner添加表注释
  18. oracle中for循环
  19. 如何利用SQL语句求日期的时间差值,并汇总网上的一些信息
  20. [基础]sizeof和strlen

热门文章

  1. python peewee
  2. 前后端分离 基于session的验证码功能实现
  3. gitea安装部署
  4. ucocIII野火
  5. CAD安装失败,如何才能删除(卸载)CAD?三步完美卸载CAD软件
  6. gson属性disableHtmlEscaping对等于号的转义\u003d,注解符号Expose,SerializedName,Since和Until
  7. Linux CentOS下搭建golang 1.17 开发环境
  8. [Oracle19C ASM管理] ASM服务的启停
  9. #maxlength vs #size form api reference
  10. One-Shot Transfer Learning of Physics-Informed Neural Networks