汇编语言学习总结
汇编语言在我看来是一门什么样的语言?为什么会想要学习汇编语言
汇编语言是一种最接近机器语言的一门编程语言。与纯机器语言的01代码一一对应的一门语言,只是为了方便编写使用了方便人阅读的指令格式。学习汇编语言的难度确实挺高的。必须对计算机组成,尤其是CPU工作原理有相当的了解才有汇编语言入门的可能性。就拿几乎所有编程语言都会使用和helloworld程序来说吧。别的编程语言几乎都是上来让你写一下这个程序,再来解释这个程序,很快就能入门,C语言就是这样,通过hello world我们就能知道C语言程序的基本格式什么的,几乎不需要别的知识作为前提。但是汇编语言不一样,就算给初学者一个helloworld程序,也不是两三页也说明白这个程序的。因为再简单的汇编程序也需要我们了解CPU工作原理,至少了解CPU与内存和外设的总线工作模式,CPU内部各种寄存器(至少是了解通用寄存器和CS、DS两个段寄存器,ip,sp等指针寄存器,还至少得了解基本的指令,如mov和jmp等等)所以汇编语言的入门难度比一般的程序设计语言高很多,而且汇编在现在的应用场景也不是很多,也就是给一些性能很差的机器做嵌入式开发时可能会用到,但其实现在好多板子都用C语言做开发语言了。比如入门级别的51单片机现在基本都是在使用C语言做开发语言了,更多的情况是使用C语言做主力开发语言。在关键位置嵌入汇编语言。汇编语言的程序开发难度确实较大,往往C语言等高级语言十行的代码,用汇编语言可能要写一百多行。所以我认为现在学习汇编语言的目的不应该是考虑把汇编语言作为主力开发语言去学习,所以不必要过于关注自己汇编编程能力,不需要考虑自己能不能用汇编语言写出排序或者之类的小程序,这是没有什么意义的。最好是把汇编语言作为一门理论知识,而不是应用知识来学习。学习过程中更加关注CPU和机器指令工作原理,不需要过分在意程序设计能力。我学习汇编语言的目的也才于此,目的就是希望自己更加了解底层的工作原理,根本目的还是能够让自己更深入地理解高级语言。
CPU工作原理示意图,通过总线与内存和外设等交换信息,总线=地址总线+数据总线+控制总线
CPU把内存和外设自带的RAM从逻辑上看成一块连续的大内存空间
栈段指令的使用
通用寄存器AX,段寄存器CS+ip原理,两个16位地址得出20位地址(SA*16+EA)
DOS模式下使用debug调试程序用的几个命令:
使用masm开发环境的程序运行过程: