社区
汇编语言
帖子详情
裸机下怎么进行编程?需要什么技术?
panwill2000
2006-07-19 10:47:46
这个问题捆饶了很久了,以前较早的是穿孔机,然后到今天的存储结构,但很想知道下,第一个操作系统是在什么环境下编译的?(比如裸机环境) ,是先用电子设备烧进去吗?象bios,然后在......,请高人指点
...全文
1251
25
打赏
收藏
裸机下怎么进行编程?需要什么技术?
这个问题捆饶了很久了,以前较早的是穿孔机,然后到今天的存储结构,但很想知道下,第一个操作系统是在什么环境下编译的?(比如裸机环境) ,是先用电子设备烧进去吗?象bios,然后在......,请高人指点
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zyl910
2006-08-16
打赏
举报
回复
真正意义上的裸机是没有BIOS的,所以只能靠人工去拨开关。
最底层的硬件控制是用in/out指令去访问硬件的IO端口,发送控制字。
BIOS中断服务程序只是为了建立一个介面,屏蔽设备细节。
DOS中断服务程序就相当重要,比如进程管理和文件系统。
而对于像Windows/Linux这样的保护模式操作系统,是无法利用16位的BIOS的,所以靠驱动程序直接访问IO端口来控制硬件。至于操作系统接口,是使用中断调用方式还是API函数方式并没有本质上的区别,Windows API本质上是通过中断调用向内核请求服务的,这不过作为函数方式更易理解。
zyl910
2006-08-16
打赏
举报
回复
对于8086,处理器复位后会将CS设为FFFFh、IP设为0h,即从FFFF0h这个地址开始运行。
主板通过硬件布线使该物理地址指向主板BIOS的ROM区。在该地址,BIOS存放的是一条跳转执行,以跳到启动自检代码中去。
到了80286,由于地址总线扩展到了24位,有了不可见寄存器。所以表面上还是 FFFF:0 这个地址。但实际上CS寄存器的不可见部分描述的基地址是 FFFFF0h,再加上偏移0,所以物理地址是FFFFF0h,内存空间的最高16字节。
到了80386,真正的32位处理器,它也沿用“内存空间的最高16字节”这种设计:将CS寄存器的不可见部分描述的基地址设为 FFFFFFF0h。
这时,有两个疑点:
一、对于286、386,它们复位后CS寄存器于实模式下寄存器工作方式不同,那么会不会造成段错误。答案是不会,这是因为BIOS位于该地址的那个jmp指令是远跳转,会重新设置CS寄存器。
二、每种处理器的启动地址不同,而BIOS地址是硬件布线连接的,那怎么兼用呢?其实,我们本来就是为不同的处理器设计不同的主板,本来就不会出现混用的情况。
主板BIOS的工作:
1.jmp跳转到启动自检代码
2.检查处理器
3.检查基本硬件(内存、定时器、DMA……)
4.在 C0000h~DFFFFh 查找各个设备的BIOS,并跳转,以执行该设备的自检代码。这就是我们在开机时最先看见显卡自检画面的原因
5.识别常规硬件:键盘、鼠标、硬盘、PCI总线及PCI总线上的设备……
6.根据CMOS设置,尝试从第一启动设备启动。一般我们设为从硬盘启动,所以BIOS会将硬盘的第一个扇区(0柱面0磁头1扇区,或LBA地址0。1扇区是512字节)加载到物理地址700h,然后跳转到该地址启动。
对于软盘,第一个扇区就是引导扇区。而硬盘就复杂了,第一个扇区叫MBR(主引导记录),中间存放了分区表,MBR中的代码就是从分区表中找到活动的分区,然后将该活动分区的第一扇区加载到内存并跳转执行。
注意文件系统(FAT、NTFS、EXT3……)是由操作系统定义的,所以在引导过程中没有文件概念。只有等到执行引导扇区时,才开始解析文件系统,装入系统内核。但此时由于条件限制,不会建立完整的文件系统(比如早期的DOS规定IO.SYS、MSDOS.SYS必须是最前面的那几个簇)。只有等内核装入后才会建立完整的文件系统。有了文件系统,剩下的事就开始有条理了:装载驱动程序,使硬件正常工作;读取配置文件(或注册表),根据用户设置来显示桌面(或停在登陆界面)
现在理解中国为什么没有自己的家用操作系统了吧。传统的计算机科学教育(90年代前)主要是算法教育,根本忽略平台。现在都是Java、Net跨平台应用,根本不让你接触平台细节。不了解平台,怎可能写出操作系统!
现在越来越觉得自己以前在DOS时代学习编程是最幸福的,直接掌控电脑中的一切……
神杀中龙
2006-08-16
打赏
举报
回复
裸机上 有 BIOS指令,我理解的 写 汇编时,不调用 DOS中断,而只调用 BIOS中断,
应该就可以 执行了。
BIOS中断-> DOS中断/LinuxShell中断 -> Windows API(Linux API)
Cody2k3
2006-08-16
打赏
举报
回复
Windows API本质上是通过中断调用向内核请求服务的,这不过作为函数方式更易理解。
--------------------------
以前是INT 2E,现在已经不是了,现在是sysenter/sysexit
Galatin
2006-08-15
打赏
举报
回复
牛人,拜读,学习
ycangmsw
2006-08-15
打赏
举报
回复
90%的人不认真看教材。这个问题在多数教材上说的很清楚了。
shewenjie
2006-08-14
打赏
举报
回复
呵呵学习到不少……
panwill2000
2006-08-12
打赏
举报
回复
谢谢naniandeyu(捍卫真理) 的回答,非常满意,在这之前曾向大学问教授时,被教授耻笑问的太幼稚,那个教授的意思是这些是你操心的吗?你是在用电脑,不是在做电脑,就好象你看电视,却没必要知道内部的各个器件.......就这样把这个问题避开了,但后来心理怎么也不塌实,最后通过naniandeyu(捍卫真理)的回答,搞清楚了计算机的一些知道.
fly4free
2006-08-12
打赏
举报
回复
哪里的教授啊……他的存在简直侮辱教授这个名字。
你可以反驳,“我是在用电脑,可是我是在学编程,要知道原理才能编的更好。用你的比喻,我就是修理电器的,在看电视的同时也修理电视,你不会就直说嘛!”
lmcctvjava
2006-07-29
打赏
举报
回复
收藏了
xulxqqqq
2006-07-29
打赏
举报
回复
说的好啊 佩服
hillt
2006-07-27
打赏
举报
回复
受教了,学海无涯啊
yeahbaby
2006-07-27
打赏
举报
回复
拜9楼强人 naniandeyu(捍卫真理) ,茅塞顿开,茅塞顿开!
ff5dq4
2006-07-26
打赏
举报
回复
以前也知道 不过想在全忘记了
只隐约记得 开机 开始读bios 的时候 第一条 jmp 指令 跳的 某个地方去 自检
还要对1MB 内存进行 装载
BAYNPU
2006-07-25
打赏
举报
回复
不错!受到启蒙!
qlmi
2006-07-24
打赏
举报
回复
受教了!
Channie
2006-07-24
打赏
举报
回复
哈,不错不错,和微机原理书上的差不多,看来是行内人啊
fishboy007
2006-07-24
打赏
举报
回复
嗯 说得真不错啊 学到不少东西
我是新手,以后多来学习了
naniandeyu
2006-07-23
打赏
举报
回复
这个问题很好,说明搂主是个寻根究底的人,任何求知欲强的人都会通过探索层层深入,最后到最根本
的问题。
最痛恨一知半解的人乱回答别人的问题,或者找风马牛不相及的答案糊弄人!这样的人就别搞技术了,
去搞政治更合适!
你的困惑感应该和蛋鸡问题类似,到底是先有操作系统还是先有汇编器?其实只要对计算机史了解的话
就不会迷惑了。原始的电子计算机是没有操作系统也没有汇编器的,那时编程是靠写一条条机器指令(
就是高低电位组成的信号)进行的,没多久,出现了汇编语言,就是用符号来表示原本的指令,由程序
员写出这些符号指令,再由其他人对表翻译成真正的机器指令。这就是所谓的手工汇编。后来又出现了
用程序来代替人的查表,就是现在的机器汇编,从此汇编语言诞生。运行汇编程序并不一定要有操作系
统,只要把程序加载到内存,然后cpu逐条执行就可以了,而操作系统也未必非要汇编语言来写,也可以
用机器指令写的。也就是说他们在逻辑上并非一定的因果关系。所以历史上也没有明确的先后关系,是
同时交错进行的。那时没有操作系统的概念,只是一个个工具程序而已。你的困惑还在于最初程序是如
何输入进计算机的,现在要把一个程序加载到内存,需要借助别的程序,那这个“别的程序”又是怎么
到内存里的呢?还是蛋鸡问题。其实,最早把程序加入计算机里的方法是搬开关,一位一个开关来代表
高低电位。后来打卡片,再用光电转换输入。再后来出现了磁介质,存储和加载靠程序对磁介质读写来
完成,这就不需要借助体力和外部设备了,存储和加载都在计算机内部完成。那么这个“最初的加载程
序”当然不是靠程序加载的,是靠人力加载的(可以搬开关,也可以打孔。)
再后来呢,由于输入汇编指令太累,所以有人就开发了一中程序,叫“自动编程器”,就是输入一条高
级指令,由那个程序解释成多条机器指令,这就是后来的高级语言。
ps:其实计算机的本质就是一条条电信号(机器指令)来推动运行的,和一台内部有很多齿轮的精密大
钟没什么两样,都是机器!什么操作系统啦,什么程序啦,都是我们抽象后给他们起的名字,他们本质
还是一个个机器指令,注意,我很反对某些人说机器指令就是1、0数字组成的,这很不确切容易使人误
解(可能他自己就误解了),应该说是由高低电位组成的,只不过我们把高电位看作1,低电位看作0。
我还很鄙视某些缺乏探索精神的所谓的“技术人员”,在他们看来好像在键盘上按一个键,然后显示器
上显示出字符,这么一个简单的过程是理所应当的,不值得探索,殊不知就是这个简单的过程也是很多
很多内部指令的结果,这些都不思考更不要指望他们去思考“最初的操作系统”类的问题了。一句话,
没有探索的欲望和好奇心,就不要搞研究!
本人很欢迎这方面的交流: qq:18654232
zsl6658
2006-07-22
打赏
举报
回复
交叉编译环境将你程序编译成目标机器的程序,下载到目标裸机上.搞定!
加载更多回复(5)
嵌入式系统/ARM
技术
中的基于
裸机
编程
的实时系统
摘要:在系统控制过程中,实时性是系统性能的一个重要测试指标。应用实时操作系统是保证实时性的一种普遍方法,但是一些资源相对缺乏的单片机是不适合用操作系统的。本文介绍在中低档控制系统中,在不采用实时操作系统的情况下,如何对多个任务
进行
控制,以达到实时性要求的方法。关键词:嵌入式系统 单片机 实时操作系统 引 言 在嵌入式控制系统的设计中,如何对被控制的多个任务
进行
有效协调,使其动作顺序合理、响应速度快捷,往往是设计者所考虑的一个很重要的方面,也是衡量检验一个系统的综合性能的重要指标。为了在多个任务的协调控制中满足实时性的要求,设计者往往会考虑在系统中嵌入目前流行的某种实时操作系统。现在也有一些
S03_基于ZYNQ的
裸机
应用开发.pdf
Zynq-7000为何不是FPGA? Zynq-7000可扩展处理平台是采用赛灵思新一代FPGA(Artix-7与Kintex-7FPGA)所采用的同一28nm可
编程
技术
的最新产品系列。可
编程
逻辑可由用户配置,并通过“互连”模块连接在一起,这样可以提供用户自定义的任意逻辑功能,从而扩展处理系统的性能及功能。不过,与采用嵌入式处理器的FPGA不同,Zynq-7000产品系列的处理系统不仅能在开机时启动,而且还可根据
需要
配置可
编程
逻辑。采用这种方法,软件
编程
模式与全功能的标准ARM处理SoC毫无二致。
ARM
裸机
程序开发入门
本课程主要讲解ARM汇编语言在硬件上的
编程
应用,相关硬件的原理图分析,LED、蜂鸣器、按键、光感设备的
裸机
开发。
嵌入式系统/ARM
技术
中的ARM和嵌入式的
裸机
编程
建议
许多新手在接触ARM和嵌入式linux都面临着一个尴尬的境地,那就是不知从哪个部分开始学习。查找资料和整理资料的过程复杂且耗时,很多新手并没有耐心
进行
所以就放弃了。针对这种情况,小编特意为大家整理了有关ARM与嵌入式linux的入门中有关
裸机
编程
的建议,大家快来看一看吧。 文中提出的经验是针对Linux系统的,并不面向WinCE。现在做嵌入式的开发者中,做linux研究的人远比做WinCE的人多,很多厂家提供的资料也是以linux为主。WinCE的开发和Windows下的开发基本一样,学起来简单得多,但是学linux或者使用linux做嵌入式的人就是远比WinCE多。 其实通过和一
操作系统课后习题答案
第一章 1、设计现代OS的主要目标是什么?P1 答:其主要目标是有效性、方便性、可扩充性、开放性。 2、OS的作用可表现在哪几个方面?P2-P3 答:1、OS作为用户与计算机硬件系统之间的接口;2、OS作为计算机资源的管理者;3、OS实现了对计算机资源的抽象; 3、为什么说OS实现了计算机资源的抽象?P4 答:完全无软件的计算机系统(即
裸机
),它向用户提供的是实际硬件接口(物理接口),用户必须对物理接口的实现细节有充分的了解,并利用机器指令
进行
编程
,因此该物理机器必定是难以使用的。为了方便用户使用I/O设备,人们在
裸机
上覆盖上一层I/O设备管理软件。通常把覆盖了上述软件的机器称为扩充机器或虚机器。它向用户(进程)提供了一个对硬件操作的抽象模型,用户更容易地使用计算机便件资源。由该层软件实现了对计算机硬件操作的第一个层次的抽象。为了方便用户使用文件系统,人们又在第一层软件上再覆盖上一层用于文件的管理软件,同样由它来实现对文件操作的细节,并向上提供一组对文件
进行
存取操作的命令,用户可利用这组命令
进行
文件的存取。此时用户所看到的是一台功能更强、使用更方便的虚机器。该层软件实现了对硬件资源操作的第二个层次的抽象。OS是铺设在计算机硬件上的多层系统软件,它们不仅增强了系统的功能,而且还隐藏了对硬件操作的细节,由它们实现了对计算机硬件操作的多个层次的抽象。值得说明的,对一个硬件在底层
进行
抽象后,在高层还可再次对该资源
进行
抽象,成为更高层的抽象模型。随着抽象层次的提高,抽象接口所提供的功能就越来越强,用户使用起来也更加方便。 4、试说明推动多道批处理系统形成和发展的主要动力是什么?P4-P5 答:为了进一步提高资源的利用率和系统吞吐量,在该系统中,用户所提交的作业都先存放在外存上并排成一个队列,称为“后备队列”;然后,由作业高度程序按一定的算法从后备队列中选择若干个作业调入内存,使它们共享CPU和系统中各种资源。在OS中引入多道程序设计
技术
可带来以下好处:提高CPU和利用率、可提高内存和I/O设备利用率、增加系统吞吐量。主要动力:1、不断提高计算机资源的利用率;2、方便用户;3、器件的不断更新换代;4、计算机体系结构的不断发展; 5、何谓脱机I/O和联机I/O?P6 答:由于程序和数据的输入和输出都是在外围机的控制下完成的,或者说,它们是在脱离主机的情况下
进行
的,该
技术
是脱机输入/输出方式;反之,在主机的直接控制下
进行
输入/输出的方式称为联机输入/输出)ON-LINE I/O)方式。1、减少了CPU的空闲时间;2、提高了I/O速度。
汇编语言
21,459
社区成员
41,601
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章