前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >8086汇编学习之关于数据段的取值和赋值

8086汇编学习之关于数据段的取值和赋值

作者头像
乱码三千
发布2021-08-24 15:12:09
2.4K0
发布2021-08-24 15:12:09
举报
文章被收录于专栏:乱码三千乱码三千

前言

数据段存在的意义是为了告诉cpu, 该段物理地址存放的是数据而不是指令

那么既然里面存放的是数据, 势必会有取值和赋值

取值

将20001H物理地址中的数据取值然后填入通用寄存器中, 如下:

代码语言:javascript
复制
mov ax ,2000H
mov ds ,ax
mov ax,[1] #[1]等同于 2000H:1H

以上有几个关键的地方需要记忆

  • []内数字表示偏移地址, 默认将DS设为基地址
  • 必须先声明段地址 也就是必须先给ds赋值
  • 通用寄存器相当于临时变量ax,bx,cx,dx….. 任选 ,只要避免冲突即可

赋值

将BH中的数据赋值给数据物理地址20001H中, 如下:

代码语言:javascript
复制
mov bh,30H
mov ax ,2000H
mov ds ,ax
mov [1] ,bh

和取值类似, 反过来即可

注意

  1. 在代码段CS:IP中, cpu读取的内存地址宽度是更具代码所占的字节数据而定, 那么在数据段DS中,如何确定读取多少个字节的数据呢?

以取值代码为例:

代码语言:javascript
复制
mov ax ,2000H
mov ds ,ax
mov ax,[1]

如果物理地址和数据一一对应关系如下:

代码语言:javascript
复制
20001H----->23
20002H----->11
20003H----->53
20004H----->71

那么ax中的值是多少呢?

答案是1123 而不是23, 为什么?

这是根据寄存器容器大小决定的, 容器大装得多, 容器小装的小, 因为ax是16位容器,那么则获取16位也就是两个字节的数据,即1123, 如果是ah或者al接收的话则获取8位也就是一个字节的数据,即23

  1. mov 内存单元:内存单元是不允许的, 比如mov [0],[1]
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-08-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 乱码三千 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 取值
  • 赋值
  • 注意
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档