assembly

《一个操作系统的实现》书中的一处思考_P129页84行_and_di_0fff0h

本文个人原创,2011年于电子科技大学 这学期在上嵌入式课程,老师在讲boot loader的时候让看于渊的那本《一个操作系统的实现》(第一版叫自己动手写操作系统),买了一本,翻看了下果然是宝贝,一口气读了2章,在看第4,5章的时候关于laoder问题的时候,也就是在第四章就出现的那个寻找文件,然后拷贝文件的时候,代码如下: and di, 0FFF0h ; di -> 当前条目的开始 push eax mov eax, [es : di + 01Ch] ;01ch=26---->DIR mov dword [dwKernelSize], eax ; / 保存 KERNEL.BIN 文件大小 pop eax add di, 01Ah ; di -> 首 Sector //1Ah = 26---->DIR_frsclus mov cx, word [es:di] push cx ; 保存此 Sector 在 FAT 中的序号 add cx, ax add cx, DeltaSectorNo ; cl <- KERNEL.

VS2008下反汇编观察switch语句-at-2010

/******************** Author:xichen Data:2011-03-27 本人原创,2011年于电子科技大学 ********************/ 引言:Switch ,if else语句是在程序设计中使用较为频繁的两种语句,它们实现的功能是相似,都是通过对特定值的判断后执行相应的操作。但是switch和if else执行方式肯定是不同的,这点我们直观地在语句的句式上就可以推断得出的,但是究竟在底层它们是以一种怎样的形式执行的呢? 这是值得我们探究的一个话题,因为只有了解其底层过程,我们才能够更好地认识,选择使用switch,else if语句。 接下来我将通过在VS2008中进行反汇编观察,分析switch语句的执行机制。在描述之前,为了节省篇幅,也为了描述的方便,做出一个约定: switch(i) { case 1:....break; case 2:....break; case 3:....break; case 4:....break; case 5:....break; case 6:....break; default: ...break; }