当前位置: 首页 > article >正文

操作系统前置汇编知识学习第九天

今天要做什么:

        汇编语言练习准备

MOV中可以写二进制

add bx, ax

Add cx, ax

一:Intel 8086处理器因硬件设计的特点而在访问内存时所面临的挑战

1:16根地址线1次最多可以传输的数据是两个字节,也就是2的16次方数,20跟地址线是2的20次方1048576b=1024kb=1mb

2:原则上,代码段寄存器CS用于存储代码段起始物理地址(然后根据程序指令长度相加),数据段寄存器DS用于存储数据段物理地址起始地址(每次都和代码段保存的偏移地址相加)

3:如果是20位地址线,内存中保存的也是20位,但是数据段寄存器和程序段寄存器是16位的,如果20位是转换后最后一位是0,可以先去掉,后面在寄存器中取出的时候在左移加上,但是如果不是0

4:在处理器中有IP寄存器,当从CS寄存器中取出16位寄存器左移四位例如30CE得到30CE0,然后和IP中的0000相加,还是30CE0

5:将偏移地址0000处的一个字传送到AX寄存器,从数据段寄存器DS中取出16进制数

例如:33CE,左移四位得到33CE0,然后和偏移地址0000相加,得到33CE0

6:于此同时指令指针寄存器IP修改为下一个指令的偏移地址 0003,将CS数据段寄存器30CE

左移四位得到20位的数字30CE0,和指令指针寄存器中的偏移地址0003相加,从30CE3中取出第二条指令30CE3.

7:将AX中的内容和偏移地址0002处的字相加,从数据段寄存器33CE中取出数据,左移四位得到33CE0,然后和数据偏移地址0002处的长度相加,得到33CE2,

于此同时,指令指针寄存器中的数据进行长度累加3+4=7

二:逻辑地址和分段的灵活性

新的表示方式

1:在8086处理器存在的系统中,访问任何一个内存单元都是由段寄存器乘以16,形成20位的段地址,在和偏移地址相加,想访问一个内存单元,光知道物理地址还不行,必须转换成16位的段地址和16位的偏移地址

2:在8086系统中,偏移地址只能是16位的(最大FFFF也就是64k)不能是20位的

得到程序最后的物理地址,用逻辑地址A037:FFFF就可以求出,用A037 乘以16,也就是左移四位,得到A0370在加上逻辑偏移地址FFFF,

A+1= B

0+F = 16+0

3+F +1= 16+3

7+F = 16+6

0+F = F

也就是这个段起始于A0370,结束于B036F.

练习:

1:

DB000+FFFF = 最大物理地址

DB000+0028 = DB028

2

思考:离这个物理地址最近,且比它小的物理地址段为B0370、B0360、B0350 B0375与这三个物理地址段的距离分别为5、15、和25.所以可以用B037:0005、B036:0015和B035:0025

3

因为段必须起始于以0结尾的物理地址,而两个相邻的这种地址相差16个字节,比如段地址00000和段地址00010 之间相差16个字节。1MB内存右1048576个字节,除以16结果是65536.所以1MB内存可以均匀划分为65536个16字节的段。

1MB内存等于1024KB,如果段的长度是64KB,那么1024KB除以64KB 结果是16,即1MB内存可以均匀划分为16个64KB的段。

4:一个字含有两个字节和16个比特,一个双字含有4个字节2个字和32个比特

5:二进制数1000 0000,位(7)的那个比特是 1,也就是第8位,最高位

6:一个储存器的容量是16个字节,地址范围是00-FF,用该储存器保存字数据时,可存放8个字,这些地址的范围,00、02、04、06、08、0A、0C、0E 双字为04、08、0C

7:

8:Intel 8086处理器右8个16位通用寄存器,分别是(AX、BX、CX、DX、SI、DI、BP、SP)

其中,有些还可以分开来作为两个独立的8位寄存器来用,这几个8位寄存器分别是(AH、AL、BH、BL、CH、CL、DH、DL)

9:Inter 8086处理器取用指令时,使用段寄存器CS和指令指针寄存器IP,方法是,将段寄存器的值左移4位,或者乘以16,加上指令指针寄存器的当前值,形成物理地址访问内存

10:物理地址132FEH对应的逻辑是(),

也就是因寄存器先去掉最后一位,后面再加,将前面逻辑段地址乘以16或者左移4位,然后和偏移地址相加,不要错位。

A:132F0+000E B:13000+02FE    C:10000+132FE   F:0FE00+34FE=132FE

11:数据段寄存器DS的值为258CHShiite,计算inter8086可以访问的物理地址范围?

258C:0000~258C:FFFF,换算成物理地址时 25BC0+FFFF = 35BBF

12:MOV ax,3fh等效 MOV AX,3FH等效 MOV ax,3FH等效 mov AX,3fh

mov 目的操作数,源操作数

MOV ax 3fh #这个3fh中的h,是十六进制指示符,千米i按的3f是16进制,3fh可以写成0x3f

MOV中可以写二进制

add bx,ax

add cx,ax

推荐下载方便好用编辑器和NASM编译器

https://www.nasm.us/

将汇编语言程序编译成机器语言


http://www.kler.cn/a/561926.html

相关文章:

  • 将CUBE或3DL LUT转换为PNG图像
  • 项目访问使用 docker bridge 网络模式(端口映射)配置详解
  • Visual Studio Code 2025 安装与高效配置教程
  • Github 2025-02-25 Python开源项目日报 Top10
  • 【Linux】gdb/cgdb调试工具
  • window平台上qtcreator上使用opencv报错
  • uniApp小程序保存canvas图片
  • JavaScript基础(函数及面向对象)
  • 网络安全入门|从防护到溯源:HTTP慢速攻击的深度对抗
  • 警惕将“数据标注”岗位包装为“大数据工程师”充数
  • 电子商务网站租用香港服务器的好处有哪些?
  • Lab14_ Blind SQL injection with time delays
  • 【三维分割】LangSplat: 3D Language Gaussian Splatting(CVPR 2024 highlight)
  • 从零开始玩转TensorFlow:小明的机器学习故事 6
  • 每日精讲:删除有序数组中的重复项,移除元素,合并两个有序数组
  • 【Viewer.js】vue3封装图片查看器
  • 短剧源码部署搭建小程序搭建IAA+IAP混合解锁模式
  • 上海创智学院(测试)算法笔试(ACM赛制)部分例题
  • k8s集群3主5从高可用架构(kubeadm方式安装k8s)
  • 广州4399游戏25届春招游戏策划管培生内推