回归母语

    技术2023-11-13  104

    汇编语言

    回归母语做个小笔记信而美

    回归母语

    其实我也学过不少程序语言了吧,C,Java,Python,Matlab,R等等,但是每一种我都没有学到很精通的地步,一来是因为确实和工作比较远,二来确实自己也还是比较懒。学习时候遇到困难就总喜欢抱怨,这种语言好啰嗦,那种语言好麻烦,这个定义不清晰,那个语法太奇葩之类的,一直幻想有没有一种通用的计算机语言,可以把不同语言转换成一种,这样我们就可以只学一种语言,只要转换成通用语言就可以和其他语言编写的程序一样使用了。可是,你们也知道我的幻想在某种意义上其实并不存在,但是其实你们也知道我的幻想在另外一种意义上其实早就是现实了。有一次在群里聊这个话题,被嘲笑了,大家说你可以去学汇编语言啊,是啊,说起来好尴尬,我真的没有学过汇编语言啊,而且我似乎从来没想过要去学(T_T),我一直以为那就是给计算机读的语言…直到前不久,突然内心膨胀去参加CTF比赛,一头雾水没有做出一道题的情况下,也还是看了看IDA,跟着别人的writeup试着反编译,我才发现其实汇编语言是给人类看的,只有二进制才是真的为计算机定制的语言,然而即便是二进制,人类也是可以看得懂得。

    终于发现,其实所有的编程高级语言,不过是汇编语言的抽象化,最终都要翻译成汇编语言的,这么看起来,汇编语言才是编程的母语。既然我的其他语言学得都不好,先把母语学学可能会有帮助吧。

    做个小笔记

    最近开始看一本有趣的书《30天自制操作系统》,作者是川合秀实,当然我看的是中译本(日语还没有学到可以读书的水平T_T)。书里讲了很多汇编语言的语句,我准备在这里做一个小笔记,把这些语句的意思记录下来,这样下次遇到的时候我就不用到处查了,回来翻翻自己的博客就好啦(有些懒)。下面的这些都是整理自《30天自制操作系统》的内容哦

    常见的几个汇编语句及其含义:

    MOV :move,意思是移动,实质是赋值。源数据和目的数据必须位数相同。JMP :jump,意思是跳转。ORG :origin,意思是源头,起点,实质是指定程序开始的地址。ADD :add,相加BYTE:使用的存储单元只是地址多指定的字节。WORD:地址所指定的字节的相邻一个字节也会成为指令的操作对象。DWORD:与WORD相邻的两个字节都会成为指令的操作对象。CMP :compare,比较指令JE :jump if equal, 条件跳转指令,如果比较结果相等就跳转,不等就不跳转INT : interrupt , 软件中断指令。HLT :halt,让CPU进入待机状态。JC :jump if carry,如果进位标志是1就跳转,否则不跳转。JNC:jump if not carry,如果进位标志是0就跳转,否则不跳转。JAE :jump if above or equal,大于或等于时跳转,否则不跳转。JBE :jump if below or equal,小于等于则跳转,否则不跳转。JB :jump if below,如果小于则跳转RESB: reverse byte, 预留字节DW:define wordDD:define double-wordDB:define byte

    还有一些常用的寄存器的名称,也很重要的感觉。

    8个16位寄存器:

    AX :accumulator,累加寄存器CX :counter, 计数寄存器DX :data,数据寄存器BX :base,基址寄存器SP :stack pointer,栈指针寄存器BP :base pointer,基址指针寄存器SI :source index,源变址寄存器DI :destination index,目的变址寄存器

    16位段寄存器:

    ES :extra segment,附加段寄存器CS :code segment,代码段寄存器SS :stack segment,栈段寄存器DS :data segment,数据段寄存器FS :没有名字的段寄存器GS :没有名字的段寄存器

    8个8位寄存器:

    AL :累加寄存器低位CL :计数寄存器低位DL :数据寄存器低位BL :基址寄存器低位AH :累加寄存器高位CH :计数寄存器高位DH :数据寄存器高位BH :基址寄存器高位

    8个32位寄存器: EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI,这里的E就是Extend的意思,就是在16位寄存器的基础上扩展了的意思

    信而美

    看完了这些汇编语言,我才发现,其实计算机的语言本质也很简洁啊,比文言文还要简洁啊,如此甚好。之前在看《操作系统之哲学原理》的时候,有一章的引子叫“信言不美,美言不信”,我一时间不理解为什么用这个标题。看完汇编语言之后,我大概有些理解了。那么多的高级语言,看起来很美,但是执行的过程中就会有一些不可靠的情况,而汇编语言,虽然看起来不美,但是执行起来是不大折扣的。

    信言不美,美言不信,固然是现实,但是理想主义者的心理总有一种追求,可不可以既信又美呢?如果可以出现一种信而美的语言,是不是可以拯救满是bug的世界呢?(白日梦模式已经开启)

    到底是什么导致信言不美,美言不信呢,仔细想想,可能是对美的追求有些不切实际呢,其实《30天自制操作系统》这本书里也有提到,程序写的在漂亮,执行时候出问题也白搭,还不如程序写的容易执行但是看起来不那么漂亮。

    就让我从白日梦开始,学习编程吧。

    Processed: 0.008, SQL: 9