自己用nasm写了一个大小写转换的小程序,哈哈是在圣诞节写的,算不算新年的第一次commit呢
总结一下:
int 80h是linux在中断向量表里的中断处理,他会读取eax里的值。
比如1是exit system call
3 is system read
4 is system write
equ在nasm里的用途是计算字符串的长度
代码如下:
; name : uppercaser.asm
; version : 1.0
; create time : 12/24/2014
; Marry Christmas!!!! happy New Year ASM!!!!!
; last modified : 12/24/2014
; anthor : JohnnySun
; nasm -f elf64 -g -F stabs uppercaser.asm
; ld -o uppercaser uppercaser.o
;</p>
section .bss
BUFFLEN equ 4096
Buff: resb BUFFLEN
section .data
section .text
global _start
_start:
nop
read:
mov eax, 3 ; use sys_read system call
mov ebx, 0 ; use stdin
mov ecx, Buff
mov edx, BUFFLEN
int 80H
mov esi, eax ; save sys_read return
;cmp eax, 0 ; if eax = 0 then read EOF
;je Done
mov ecx, esi
mov ebp, Buff
Scan:
dec ecx ;ebp offset -1
cmp byte [ebp+ecx], 61h
jb Next ; if < a
cmp byte [ebp+ecx], 7Ah
ja Next ; if > b
;Now we got
sub byte [ebp+ecx], 20h
Next:
cmp ecx, 0
jnz Scan
Write:
mov eax, 4 ; use sys_write system_call
mov ebx, 1 ; use stdout
mov ecx, Buff
mov edx, esi
int 80H
jmp read
Done:
mov eax, 1 ;exit system call
mov ebx, 0 ; return 0
int 80H
</pre>
这周一直在MKS的mega2560上移植CC3000的wifi驱动,与其说是移植,不如说是改写吧,CC3000需要SPI总线,int, dig 这几个引脚才能正常工作。可是我们的板子上没有多余的int中断线了。没办法,自己动手,丰衣足食。
其实arduino上同时提供了两种中断:“external”, and “pin change”,只有两个external中断,在uno里,他们被映射到了arduino pin2 pin3。但同时还有另一种中断,pin change int。
external int可以在引脚的RISING or FALLING时被触发,或者是更加低层的模式,而PCINT顾名思义,当pin chage时候被触发也可以接受RISING or FALLING,所以打算使用pcint代替int来移植cc3000到我们的板子上
引用一段关于中断的介绍:
●中断源
中断源是指能够向单片机发出中断请求信号的部件和设备。对于单片机来讲,往往存在多个中断源。中断源一般可分为内部中断源和外部中断源。
单片机内部集成的许多功能模块,如定时器、串行通讯口、模/数转换器等,它们在正常工作时往往无需CPU参与,而当处于某种状态或达到某个规定值需要程序 控制时,会通过发出中断请求信号通知CPU。这一类的中断源位于单片机内部,称作内部中断源。内部中断源在中断条件成立时,一般通过片内硬件会自动产生中 断请求信号,无须用户介入,使用方便。内部中断是CPU管理片内资源的一种高效的途径。
系统中的外部设备也可以用作中断源,这时要求它们能够产生一个中断信号(通常是高(低)电平或者电平跳变的上升(下降)沿),送到单片机的外部中断请求引 脚供CPU检测。这些中断源位于单片机外部,称为外部中断源。通常用作外部中断源的有输入输出设备、控制对象、以及故障源等。</pre>
下面说说cc3000的驱动那部分吧:</p>
cc3000需要一个int引脚,但是板子上没有多余的int引脚了,于是我使用了Arduino 的 PinChangeInt Library。
我使用了Adafruit_CC3000的库文件。
代码里判断了中断针脚,我们在加一个pcint的测试
#elif defined(__AVR_ATmega1281__) || defined(__AVR_ATmega2561__) || defined(__AVR_ATmega2560__) || defined(__AVR_ATmega1280__)
2, 0,
3, 1,
21, 2,
20, 3,
19, 4,
18, 5,
11, 11,//PCINT Test</pre></p>
将ccspi里面的所有deachInterrupt和attachInterrupt改为
PCintPort:detachInterrupt(g_IRQnum);
PCintPort:attachInterrupt(g_IRQnum, SPI_IRQ, FALLING);</p>
开起了全部调试后,还是卡在了这个循环。
if (sSpiInformation.ulSpiState == eSPI_STATE_POWERUP)
{
while (sSpiInformation.ulSpiState != eSPI_STATE_INITIALIZED);
}
eSPI_STATE_INITIALIZED 在中断处理函数里被修改了,所以说中断还是没有执行,卡在了等待中断上,这个问题还没有解决。不知道这是否是一个内部中断呢。</pre>
首先是下载源代码,可以从The Linux Kernel Archives</a>下载最新版本的内核</li>
下载将会得到linux-X.XX.X.tar.xz的文件,将其解压缩。</li>
完全解压后将会得到linux-X.XX.X这样的文件夹,使用Terminal cd到此目录下。</li>
下面我们就可以开始编译内核了,首先 #make mrproper (执行此步的作用是确保源代码目录下没有不正确的.0 或者文件依赖,建议每次编译前执行。</li>
接下来的内核配置过程比较烦琐,但是配置的适当与否与日后linux的运行直接相关,
有必要了解一下一些主要的且经常用到的选项的设置。
配置内核可以根据需要与爱好使用下面命令中的一个:#make config(基于文本的最为传统的配置界面,不推荐使用)</p>
#make menuconfig(基于文本选单的配置界面,字符终端下推荐使用)
#make xconfig(基于图形窗口模式的配置界面,Xwindow下推荐
#make oldconfig(如果只想在原来内核配置的基础上修改一些小地方,会省去不少麻烦.</pre>
这里推荐大家使用make menuconfig,通过此步骤,可以进行一些内核的定制,包括一些模块的删减,定制一些模块为内核的挂在模块等等。</li></p>
下面就是编译了,编译我们使用make -j8 这里的数字设置为本机cpu支持的并发线程的1-2倍效率最高,比如我的i5,所以我设置成了j8. -jxx意味着同时进行编译的Job数量。</li>
安装内核模块: 使用make modules_install -j8</li>
安装内核: make install 执行此命令和会把广告编译好的内核安装到现在的计算机上。</li>
</ol></p>
一个叫 leamon.1900的孤儿,一个叫Max的小号手,一张唱片, 一艘唯一在三等仓有立式钢琴的邮轮, 以小号手的回忆为主线,向我们讲述了1900的传奇生涯。
对于1900而言,音乐,是生命的升华,回想当Max在船上第一次遇到1900时,1900让钢琴与大海共舞,那是1900的一种娱乐,他永远为了自己弹奏着,从未与音乐分离。
1900独特的人生阅历造就了1900独特的音乐才华,一眼望穿一个人,就可以根据他此时的心情弹奏出适当的音乐。
电影里最让人琢磨不透的就是为何1900不肯下船,我认为正如1900自己所说“Leave this ship, marry a nice woman, and have children... all those things in life that are not immense, but are worth the effort.“ 的确如此,海上的世界对1900已经足够美好了。对他来说,船上的世界就是他的全部,不是每个人都勇气去冒险。
1900曾经邂逅过一名令他一见钟情的女子,这也是1900唯一一次想要踏入陆地的动力,但当他站在甲板与陆地之间望向城市时,他的心意再次莫名的转变了,他转身固执的回到了甲板上。
是的,1900最终也没有下船,我认为1900第一次被抓的时候也是躲在了锅炉房里,成为了电影的相互照应,第一次之后,1900莫名其妙的学会了弹琴,而第二次,当Max找到他后,并试图让1900跟他一起下船,可是他无法接受陆地的广大,更难以离开他一直以来唯一的家。最后,船被炸掉了,而1900大概也连同船一起沉入了大海。
我认为1900不肯下船的原因:
1900曾经说过:”他说他的船有头也有尾,每次只容纳两千人,钢琴只有88个键“。正如钢琴键盘上有限的88个琴键能弹出无限的音乐篇章,而无限的琴键则什么都弹不出来一样。陆地对于1900来说,是艘太大的船;美得过分的美人;过于浓烈的香水。,因此我觉得,或许那艘船就是1900的整个世界,当他的世界都即将被毁掉时,他自然也就不存在了。
用1900自己的花来解释我觉得实在是再好不过了:
“那些漫无边际的城市,可以说什么都不缺。就是没有尽头,我看不到东西的尽头,世界的尽头。比如说钢琴,琴键有始也有终,你知道琴上的88个键一个也不多一个也不少。琴键是有限的,但你是无限的,在这些琴键上创造出来的音乐,那才是无限的。”
我确定天国上面有钢琴,圣彼得在名册上也能够找到1900的名字,1900也能用两只右手演奏出比谢利的Jazz还要美妙的音乐。
我感觉人不会愿意离开自己赖以生存的环境,就像在鱼缸里的鱼儿不愿意去湖泊,大海,虽然那里更加的宽广,当那里始终不是他的世界,是的,鱼缸里的鱼儿完全不属于那个宽广的世界,在那里,他将完全找不到归属感。环境会束缚一个人,应该叫做坚守,同时也是电影让我们对我们现代人生活的一种思考,为何我们不愿意离开我们当今的生活地点,我们每个人实际上都和1900一样,环境的改变对1900的影响同样也将是对我们的影响。