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

今天要做什么:

汇编语言练习准备

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/

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

相关推荐
不太可爱的叶某人1 小时前
【学习笔记】MySQL技术内幕InnoDB存储引擎——第5章 索引与算法
笔记·学习·mysql
岁岁岁平安1 小时前
Redis基础学习(五大值数据类型的常用操作命令)
数据库·redis·学习·redis list·redis hash·redis set·redis string
知识分享小能手3 小时前
Vue3 学习教程,从入门到精通,使用 VSCode 开发 Vue3 的详细指南(3)
前端·javascript·vue.js·学习·前端框架·vue·vue3
pay4fun4 小时前
2048-控制台版本
c++·学习
知识分享小能手5 小时前
Bootstrap 5学习教程,从入门到精通,Bootstrap 5 表单验证语法知识点及案例代码(34)
前端·javascript·学习·typescript·bootstrap·html·css3
weixin_418813876 小时前
Python-可视化学习笔记
笔记·python·学习
Haoea!6 小时前
Flink-05学习 接上节,将FlinkJedisPoolConfig 从Kafka写入Redis
学习·flink·kafka
丁满与彭彭7 小时前
嵌入式学习笔记-MCU阶段-DAY01
笔记·单片机·学习
呼啦啦--隔壁老王8 小时前
dexopt学习待整理
学习
无限远的弧光灯8 小时前
c语言学习_函数递归
c语言·开发语言·学习