博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  汇编

摘要:这里我们简单介绍一下Stage2.asm这个程序。 整个程序代码如下: 1: ; Note: Here, we are executed like a normal COM program, but we are still in 2: ; Ring 0. We will use this loader to set up 32 bit mode and basic excepti... 阅读全文

posted @ 2011-12-03 10:38 天地玄黄 阅读(2792) 评论(0) 推荐(0)

摘要:这一节我们详细介绍Boot4.asm这个汇编程序。 1、程序设定 1: ;********************************************* 2: ; Boot1.asm 3: ; - A Simple Bootloader 4: ;********************************************* 5:... 阅读全文

posted @ 2011-11-26 23:01 天地玄黄 阅读(6919) 评论(1) 推荐(0)

摘要:我也是自己一步一步学着别人的方法来编写一个操作系统。把一些重点记下来。教程在这里:http://www.brokenthorn.com/Resources/OSDevIndex.html 1、准备工作 一台32位Intel的电脑就可以了,使用Windows操作系统。然后下载一些软件安装上: VFD 阅读全文

posted @ 2011-11-26 18:57 天地玄黄 阅读(36481) 评论(6) 推荐(2)

摘要:nasm -f bin Boot4.sam -o Boot4.bin 其中-f bin 表示把文件汇编成为二进制文件。 -o 表示汇编之后的目标文件partcopy <source> <source_offset> <length> <destination>partcopy Boot4.bin 0 200 -f0 这个命令把Boot4.bin 复制到软盘上(-f0表示软盘),从0号位置开始,复制大小为200h(全是十六进制) 阅读全文

posted @ 2011-11-26 16:01 天地玄黄 阅读(1152) 评论(0) 推荐(0)

摘要:1、按下开机键,连接开机键的一个导线就会输送一个信号给主板,请求开机。2、主板接收到这个信号,把信号转发给电源,要求电源开始供电,此时电源开始工作。3、电源给主板的各部分提供稳定的电压之后,发送“power_good”信号给BIOS。4、BIOS接受到信号之后,开始启动POST(Power On Self Test),检测电源供电是否稳定,检测硬件设备(比如内存)是否已经连接。5、POST检测完毕之后,会把BIOS程序加载到内存中的尾部地址(比如0xfffff0,或其他地址),然后在内存的0x0地址处存放一条跳转指令,跳转到BIOS在内存中的地址。6、CPU执行内存0x0处的指令。由于这是一条 阅读全文

posted @ 2011-11-09 14:24 天地玄黄 阅读(2075) 评论(1) 推荐(2)

摘要:到现在为止,我看过的书籍基本上是一脉相承的,逐渐深入计算机内部: · C语言深度解剖 ----- 这个是电子书,遇到问题还经常看一看 · C专家编程(Exptert C Programming) ----- 这个看过去就忘了,在图书馆借的书 · C traps and pitfalls ---- 这个也是在图书馆借的,翻译的书,基本上也不怎么记得了 · Linux C一站式编程 ----- 这本... 阅读全文

posted @ 2011-05-30 16:21 天地玄黄 阅读(891) 评论(1) 推荐(0)

摘要:副标题: 在汇编中使用Standard C Library。 main函数的执行过程。 main函数与Standard C Library的交互。 C程序是怎么开始和结束的: 在这里,一个C程序就是一个process Note: The only way a program is executed by the kernel is when one of the exec functions is... 阅读全文

posted @ 2011-05-06 10:32 天地玄黄 阅读(765) 评论(0) 推荐(0)

摘要:在Linux汇编中(NASM),INT指令其实是INTerrupt(中断)的意思(这种中断又叫做software interrupt)。它也就是起了这么一个名字,却并没有什么真正被中断了。 在x86体系结构中,内存中的 0~1024byte 中存放了256个entries,每一个 entry 都有4byte的大小。这是Linux的 interrupt vector table。虽然Linux的版... 阅读全文

posted @ 2011-04-09 14:32 天地玄黄 阅读(4776) 评论(0) 推荐(0)

摘要:When finished the bood “Assembly Language Step by Step”, what to do next? · Study Linux. · Study assembly language. · Write code. · Write more code. What books should I learn? · Ubuntu 8.10 Linux Bible by William von Hagen (Wiley, 2009) · Beginning Linux Programming, Fo 阅读全文

posted @ 2011-04-09 09:43 天地玄黄 阅读(389) 评论(0) 推荐(0)

摘要:1、AT&T的助记法和寄存器名称都必须是小写字母的。Intel set(and hence NASM)提倡使用大写,但是也可以接受小写,但是AT&T必须小写。 2、寄存器名称之前要加 % 。Intel 写作 EAX 或者 AX 的,在AT&T中就要写作 %eax 和 %ax 。 3、AT&T 中的指令如果含有操作数,那么它需要有一个后缀:b, w, 或者 l,分别表示 byte(8 bits),... 阅读全文

posted @ 2011-03-31 21:39 天地玄黄 阅读(501) 评论(0) 推荐(0)

摘要:当Linux把程序加载到内存中的时候,Stack中是存储有一些预先的信息的。 Stack存在于内存中0xbfffffff附近,但是不会大于这个值。Stack是底朝上的,ESP指向最外面的元素。 · ESP所指向的最外面的元素是这个程序的参数个数,最少为1。比如运行./test这个程序,这唯一一个参数指的就是test。这是32bits的。 · 之上一行是一个地址,指向可执行的文件。也是32bits的... 阅读全文

posted @ 2011-03-30 14:12 天地玄黄 阅读(255) 评论(0) 推荐(0)

摘要:这只是一个学习笔记,难免会有些杂乱,记录的都是一些汇编中有关String的要点。 1、在汇编语言看来,只要是在内存中连续的存储单元(byte)中存储的东西都叫做“String”,而不管这些东西是不是人可以识别的字符。 2、汇编语言的String是你通过在R额Register中设定相应的值来指定的。比如在EAX中指定String的首地址,在ECX中指定String的长度。 3、String分为Sou... 阅读全文

posted @ 2011-03-29 17:04 天地玄黄 阅读(5036) 评论(0) 推荐(1)

摘要:Technorati 标签: 汇编,Macro,Procedure 一、相同之处: Macro和Procedure都是一个程序段。 二、不同之处: Macro是由一对符号表示的:%MACRO Label #(#表示这个Macro需要几个参数,有0,1,2…,在使用的时候用%1, %2…代替相应) %ENDMACRO(注意是在最后一行单独显示) Procedure也是由一对符号表示,CALL和RET... 阅读全文

posted @ 2011-03-28 14:13 天地玄黄 阅读(1527) 评论(0) 推荐(0)

摘要:文件描述符和系统调用号。 File Descriptor文件描述符:0:Standard Input 1: Standard Output 2: Standard Error 系统调用号: 0: 1:sys_exit 2: 3:sys_read 4:sys_write 阅读全文

posted @ 2011-03-27 14:26 天地玄黄 阅读(216) 评论(0) 推荐(0)

摘要:程序就是要对数据进行操作。在汇编中,这些数据有在buffer中的数据,有变量数据,有在寄存器中的数据。 数据一般分为两类:全局数据和局部数据。 全局数据:在.data以及.bss中定义的数据是全局数据,在寄存器中的数据也是全局数据。 局部数据:局部数据存放在stack中,是由调用者压入栈的。 For now, simply understand that global data is define... 阅读全文

posted @ 2011-03-25 21:45 天地玄黄 阅读(1219) 评论(0) 推荐(0)

摘要:在汇编中,一个函数的组成大致如下: MyProc: (CODE) (CODE) RET调用这个函数的时候,使用call MyProc这个语句。其调用过程如下: 它与中断最大的区别就是它知道所调用的函数的具体地址。CALL和RET(return)是一对,INT和IRET是一对。 阅读全文

posted @ 2011-03-25 14:16 天地玄黄 阅读(826) 评论(0) 推荐(0)

摘要:是文件结束符 阅读全文

posted @ 2011-03-24 19:55 天地玄黄 阅读(244) 评论(0) 推荐(0)

摘要:定义的方式为: <label>: db <data1>,<data2>,… db <data3>,<data4>,… ………… 其中的“db”是Define Byte”的意思,也可以是dw(Define word), dd(Define Double) 数据可以加引号(单引号或者双引号),表示一个字符串。不加,则表示立即数。 每一行的db都是独立的,互不影响,所以每一行的最后可以不加逗号。它们在内... 阅读全文

posted @ 2011-03-24 09:51 天地玄黄 阅读(6004) 评论(0) 推荐(0)

摘要:在一系列的跳转指令中,如果描述词中有greater than或者less than,那么它所比较的是两个有符号的整数。如果描述词中有above或者below,那么它所比较的是两个无符号的整数: 从另一个方面来说这个表: TEST:还有一个比较是测试一个数中某一位是否为1,使用TEST命令: test <operand>,<mask> test ax,00001000B 它的操作和AND相似,设定相... 阅读全文

posted @ 2011-03-23 10:31 天地玄黄 阅读(432) 评论(0) 推荐(0)

摘要:Define the Program 把文件中的所有字符都变成用十六进制书写的格式。 Starting with Pseudo-Code 1、最初的伪代码设计如下: Read a char from the input file convert the character to hex string Write the hex string to the output file Repeat un... 阅读全文

posted @ 2011-03-22 18:28 天地玄黄 阅读(433) 评论(0) 推荐(0)