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

今天要做什么:

汇编语言练习准备

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/

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

相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
我在人间贩卖青春5 天前
汇编之伪指令
汇编·伪指令
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码5 天前
嵌入式学习路线
学习
毛小茛5 天前
计算机系统概论——校验码
学习
babe小鑫5 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms5 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下5 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。5 天前
2026.2.25监控学习
学习
im_AMBER5 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode