x86汇编上手的第一反应就是古老,但是给人的体验却实在新奇。
与高级语言的区别
首先是你无法声明变量,只能用寄存器,内存(也许还有硬盘,不过涉及IO交互的地方我没有实践过)来实现一个个变量的作用,一写个四五十行的代码寄存器的数量就会显得捉襟见肘。一共就8个16位的寄存器,其中四个再拆分为8个8位寄存器。而且有些寄存器是有特定用途的,譬如AX和DX经常就一起处理一些乘除操作,CX要当做循环计数器,SP要指向栈底。剩下的BX,SI,DI,BP有时也因为要作为子程序的传入参数而不能动。
而且指令也很严格,比如内存不能直接到段寄存器,访问内存只能用BX,SI,DI和BP(BP只是默认访问栈,加上段指示器还是可以访问DS的)
空间要一开始就申请并分配,而且是自己动手做栈和数据段的初始化和指向。
这些都是一开始要适应的点
好玩的地方
直接访问显存来输出字符串的方式就很好玩,IO设备交互的扫描码之类的引用也很好玩,内外中断的新程序写入也很有意思。
收获
对于底层的实现有了一点点小小的理解,比如高级语言里直接用寄存器储存参数而不用传入参数(没什么用),比如不用main函数怎么实现编译(没什么用)。