首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 汇编语言 >

怎么让一个汇编程序可以再开机时不依赖于操纵系统,实现自动加载执行

2012-04-23 
如何让一个汇编程序可以再开机时不依赖于操纵系统,实现自动加载执行?实际上就是如何让汇编程序(内不涉及DO

如何让一个汇编程序可以再开机时不依赖于操纵系统,实现自动加载执行?
实际上就是如何让汇编程序(内不涉及DOS调用,但可能有BIOS调用)能够在一台裸机上开机自动运行?
有没有不是写“软盘”引导区的方法,因为现在电脑“软驱”都没有了。

[解决办法]
有的。为兄的正在写一本汇编的书,里面就是这样做的。首先从MBR进入加载器,加载器从其它扇区读入用户程序,分析它,并重定位各个段,然后将控制权交给它。本书有两个地方涉及到这个问题,一个是讲实模式的时候;另一个是讲保护模式的时候。换句话说,两种模式的实现方法。
唯一的问题是,程序的格式和流行的EXE/COM不同。如果你是想加载EXE程序,就算了。

以下是前半部分的目录:

目录
前 言3
目 录4
第1部分 预备知识5
第一章 十六进制计数法6
1.1 二进制计数法回顾6
1.1.1 关于二进制计数法6
1.1.2 二进制到十进制的转换6
1.1.3 十进制到二进制的转换7
1.2 十六进制计数法7
1.2.1 十六进制计数法的原理7
1.2.2 十六进制到十进制的转换8
1.2.3 十进制到十六进制的转换8
1.3 为什么需要十六进制9
本章习题10
第二章 处理器、内存和指令11
2.1 最早的处理器11
2.2 寄存器和算术逻辑部件11
2.3 内存储器12
2.4 指令和指令集13
2.5 古老的INTEL 8086处理器14
2.5.1 8086的通用寄存器15
2.5.2 程序的重定位难题15
2.5.3 内存分段机制17
2.5.4 8086的内存分段机制17
本章习题19
第三章 汇编语言和汇编软件20
3.1 汇编语言简介20
3.2 NASM编译器21
3.2.1 从网上下载NASM安装程序21
3.2.2 安装NASM编译器22
3.2.3 下载配书源码和工具23
3.2.4 用nasmide体验代码的书写和编译过程24
3.2.5 用HexView观察编译后的机器代码25
本章习题26
第四章 虚拟机的安装和使用27
4.1 计算机的启动过程27
4.1.1 如何将编译好的程序提交给处理器27
4.1.2 计算机的加电和复位27
4.1.3 基本输入输出系统BIOS28
4.1.4 硬盘及其工作原理29
4.1.5 一切从主引导扇区开始30
4.2 创建和使用虚拟机30
4.2.1 别害怕,虚拟机是软件30
4.2.2 下载Oracle VM VirtualBox31
4.2.3 安装Oracle VM VirtualBox31
4.2.4 创建一台虚拟PC(个人计算机)32
4.2.5 虚拟硬盘(VHD)简介34
4.2.6 练习使用FixVhdWr工具向虚拟硬盘写数据35
第2部分 16位处理器下的实模式38
第五章 编写主引导扇区代码39
5.1 欢迎来到主引导扇区39
5.1.1 本章意图39
5.1.2 本章代码清单39
5.2 注释42
5.3 在屏幕上显示文字42
5.3.1 显卡和显存42
5.3.2 初始化段寄存器44
5.3.3 显存的访问和ASCII代码44
5.3.4 在屏幕上显示字符46
5.4 显示标号的汇编地址47
5.4.1 标号47
5.4.2 如何显示十进制数字50
5.4.3 在程序中声明并初始化数据(伪指令db/dw/dd/dq)51
5.4.4 分解数的各个数位(div/and/xor)51
5.4.5 显示分解出来的各个数位(add)55
5.5 使程序进入无限循环状态56
5.6 完成并编译主引导扇区代码56
5.6.1 主引导扇区有效标志(伪指令times)56
5.6.2 代码的保存和编译57
5.7 加载和运行主引导扇区代码57
5.7.1 把编译后的指令写入主引导扇区57
5.7.2 启动虚拟机观察运行结果58
本章习题59
第六章 相同的功能,不同的代码60
6.1 本章代码清单60
6.2 跳过非指令的数据区62
6.3 在数据声明中使用字面值62
6.4 段地址的初始化62
6.5 段之间的批量数据传送(cld/std/movsb/movsw)63
6.6 使用循环分解数位(inc /loop)64
6.7 计算机中的负数65
6.7.1 无符号数和有符号数(neg/cbw/cwd)65
6.7.2 处理器视角中的数据类型(sub/ idiv)67
6.8 数位的显示(dec/jns)69
6.9 其它标志位和条件转移指令70
6.9.1 奇偶标志位PF(Parity Flag)70
6.9.2 进位标志CF(Carry Flag)。70
6.9.3 溢出标志OF(overflow flag)71
6.9.4 现有指令对标志位的影响71
6.9.5 条件转移指令(cmp/jcc)72
6.10 NASM编译器的$和$$标记74
6.11 观察运行结果74
本章习题74
第七章 比高斯更快的计算76
7.1 从1加到100的故事76
7.2 本章代码清单76
7.3 显示字符串79
7.4 计算1到100的累加和79
7.5 累加和各个数位的分解和显示79
7.5.1 堆栈和堆栈段的初始化79
7.5.2 分解各个数位并压栈(or/push)80
7.5.3 出栈并显示各个数位(pop)82
7.5.4 进一步认识堆栈82
7.6 程序的编译和运行83
7.7 8086处理器的寻址方式83
7.7.1 寄存器寻址84
7.7.2 立即寻址84
7.7.3 内存寻址84
本章习题88
第八章 直接硬盘读和带光标跟随的字符显示89
8.1 本章代码清单89
8.1.1 本章意图89
8.1.2 主引导扇区(加载器)代码清单89
8.1.3 用户程序代码清单94
8.2 用户程序的结构99
8.2.1 分段、段的汇编地址和段内汇编地址99
8.2.2 用户程序头部101
8.3 加载程序(器)的工作流程102
8.3.1 初始化和决定加载位置(伪指令equ)102
8.3.2 准备加载用户程序103
8.3.3 外围设备及其接口104
8.3.4 I/O端口和端口访问(in/out)105
8.3.5 通过硬盘控制器端口读扇区数据107
8.3.6 过程调用(call/call far/ret/retf)109
8.3.7 加载用户程序113
8.3.8 用户程序重定位(adc/shr/shl/ror/rol)114
8.3.9 将控制权交给用户程序(jmp far)116
8.3.10 8086处理器的无条件转移指令116
8.4 用户程序的工作流程118
8.4.1 初始化段寄存器和堆栈切换118
8.4.2 调用字符串显示例程119
8.4.3 过程的嵌套119
8.4.4 屏幕光标控制120
8.4.5 取当前光标位置120
8.4.6 处理回车和换行字符(mul)121
8.4.7 显示可打印字符122
8.4.8 滚动屏幕内容122
8.4.9 重置光标122
8.4.10 切换到另一个代码中执行123
8.4.11 访问另一个数据段123
8.5 编译和运行程序并观察结果123
本章习题124
第九章 中断和动态时钟显示125


9.1 外部硬件中断125
9.1.1 非屏蔽中断125
9.1.2 可屏蔽中断(cli/sti)126
9.1.3 实模式下的中断向量表(iret)127
9.1.4 实时时钟、CMOS RAM和BCD编码128
9.1.5 本章代码清单①132
9.1.6 初始化8259、RTC和中断向量表139
9.1.6 使处理器进入低功耗状态(hlt/not)140
9.1.7 实时时钟中断的处理过程(test)141
9.1.8 代码清单①的编译和运行143
9.2 内部中断143
9.3 软中断(int3/int/into)143
9.3.1 常用的BIOS中断144
9.3.2 代码清单②146
9.3.3 从键盘读字符并显示148
9.3.4 代码清单②的编译和运行148
本章习题148
第十章 聆听数字的声音149
10.1 本章意图149
10.1.1 过气的直接存储器访问149
10.1.2 绝迹的Sound Blaster 16声卡150
10.1.3 代码清单10-1151
10.2 声卡和声卡的初始化158
10.2.1 Sound Blaster 16声卡简介158
10.2.2 初始化声卡的DSP芯片158
10.3 声卡中断159
10.3.1 中断和声音播放的关系159
10.3.2 在声音播放中使用中断160
10.4 DMA控制器的结构、功能和初始化161
10.4.1 个人计算机中的DMA控制器161
10.4.2 初始化DMA控制器(伪指令incbin)161
10.5 启动音频播放(xchg)165
10.6 音频回放中断处理166
10.7 程序的编译和运行166
本章习题167
第3部分 32位保护模式168
第十一章 32位INTEL微处理器编程架构169
12.8.2 对push和pop指令的再探讨169
第十二章 进入保护模式171
12.1 代码清单12-1171
12.2 全局描述符表GDT174
12.3 存储器的段描述符174
12.4 安装存储器的段描述符并加载GDTR(lgdt)177
12.5 关于第21条地址线A20的问题179
12.6 保护模式下的内存访问180
12.7 清空流水线并串行化处理器182
12.8 保护模式下的堆栈183
12.8.1 关于堆栈段描述符中的界限值183
12.8.2 检验32位下的堆栈操作184
12.9 程序的编译和运行185
本章习题185
第十三章 存储器的保护186
13.1 代码清单13-1186
13.2 进入32位保护模式186


[解决办法]
你可以看<<一个操作系统的实现>>
[解决办法]
<自己动手写操作系统>这本书里面有你需要的答案。。。
[解决办法]
不过这本书过时了,然后其间使用了一些根本不需要的工具,步骤罗嗦了,另外还有位闲人写了一篇<Write own operation system with free software>不过书中使用的是AT&T汇编风格,脑残人发明的汇编风格,我现在就是在搞这个,如果真的有兴趣,而不是随便问问的话,我们可以相互交流一下,我的Q是804215656

热点排行