Orange’s学习笔记(一)
来源:互联网 发布:python macd指标 宽距 编辑:程序博客网 时间:2024/05/22 00:36
伪汇编指令ORG
学习操作系统两个多月以来,一直对org这个伪汇编指令似懂非懂,拿Orange’s的一个最简单的引导扇区代码来说
org 07c00h ;告诉编译器程序加载到7c00处 mov ax,cs mov ds,ax mov es,ax call DispStr ;调用字显示字符串例程 jmp $ ;无限循环DispStr: mov ax,BootMessage mov bp,ax ;ES:BP = 串地址 mov cx,16 ;CX = 串长度 mov ax,01301h ;AH = 13h,AL = 01h mov bx,000ch ;页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮) mov dl,0 int 10h ;10h号中断 retBootMessage: db "Hello, OS world!"times 510-($-$$) db 0 ;填充剩下的空间,使生成的二进制代码恰好为512字节dw 0xAA55
这段代码的org 07c00h指的是,这段程序将来要加载到偏移地址为07c00h的地方,所以在编译器编译时会将标号代表的相对地址(编译后的程序代码地址从0开始)+07c00h(org指明的地址值)作为编译后标号所在位置的实际数值,ep:看第16行标号BootMessage,不考虑org,编译后的二进制代码在文件中地址的偏移为0x1E,加上org指定的地址值,则第8行指令编译出来的BootMessage所占空间存储的数值应该是0x7C1E,用二进制文件查看器查看,如下图:
其中的B8 1E 7C机器码对应的就是第8行的mov ax,BootMessage指令。
如果我们去掉org这条指令编译之后,得到的机器码,如下图:
可以看出其中表示的地址偏移值为0x001E。
org伪指令其实仅仅是个开始,在学习Orange’s过程中问题很多,前前后后我看过很多遍的书,每次重看都有新的收获,但是还有很多搞不明白的,所以想写出来,既与大家分享了学习经验也想获得一些指点
0 0
- Orange'S学习笔记(一)
- Orange'S学习笔记(一)
- Orange’s学习笔记(一)
- 《Orange'S:一个操作系统的实现》学习笔记(一)
- Orange’s学习笔记(二)
- 学习Orange‘S笔记1
- 《Orange's 一个操作系统的实现》学习笔记--保护模式理论初步(一)
- 《Orange's 一个操作系统的实现》学习笔记(一) 实验环境搭建
- 学习笔记 |《ORANGE’S:一个操作系统的实现》| (一) Ubuntu
- 《Orange'S:一个操作系统的实现》学习笔记(二)
- 《Orange'S:一个操作系统的实现》学习笔记(四)
- 《Orange'S:一个操作系统的实现》学习笔记(四)
- 《Orange'S:一个操作系统的实现》学习笔记(1)
- 《Orange's 一个操作系统的实现》学习笔记--特权级代码段之间的转移(一)
- Orange's笔记
- 《Orange'S:一个操作系统的实现》学习笔记(三)--bochs
- 《Orange's 一个操作系统的实现》学习笔记--保护模式理论初步(二)
- 《Orange's 一个操作系统的实现》学习笔记(二) 实模式和保护模式
- Android的IPC机制(二)——AIDL实现原理简析
- 嵌入式操作系统内核原理和开发(总结篇)
- 【BZOJ4145】[AMPPZ2014]The Prices【状压DP】【背包】
- Qt之表单布局(QFormLayout)
- 《c++primer 》string *pstr = new string; *pstr = str;的疑问
- Orange’s学习笔记(一)
- 春哥来了
- 在Eclipse中安装Subclipse
- tomcat多工程SSL双向认证的实现(每个端口对应一个工程,每个工程有各自双向的证书)
- Ubuntu配置NFS服务器与客户端
- 【Android Studio快捷键】之导入相应包声明(import packages)
- 强悍的 Linux —— 网络
- win10sdk10586总是安装失败,解决办法
- POJ 3181 Dollar Dayz