我们读到的汇编程序文本包含两种内容:
①跟机器码一一对应的汇编指令,比如mov,jmp,jne等,也包含中断调用int 21H之类
②伪指令和运算符,比如db string "I am a student",和“+”,“-”符号,这些由汇编语言的编译器生成某种运行环境(一般是os)能够识别的信息,然后存储到磁盘上,伪指令在os加载编译生成的汇编程序时,在内存中一次性完成构筑,形成(可以单步调试的)汇编指令所运行的环境。运算符没太大意义(目前的理解)
这个过程可以比喻为烹饪。
汇编指令是做菜的动作,比如“切”,“点火”,“加入(食材或调味料)”,数据是食材。而CPU是炊具(炉或刀具、锅),磁盘上的汇编程序可看做菜谱,菜谱上包含动作和食材,分别是汇编指令和数据,我们翻看菜谱的过程,把同是文字的做菜流程经由大脑分解为动作和食材。
汇编是如何经由大脑分解为动作和食材的,这个过程可以(先)视为一个黑盒动作,不做过多描述,就像你既然已经可以学习做菜已经默认为一个成年人,而不是一个啥都不知道的婴儿。
相似的地方是:菜谱以文字记载做菜流程,磁盘上的汇编程序以二进制码来记录指令和数据。
待续...
CPU的三种总线:地址,控制和数据总线
地址总线决定可寻址范围,实际是厨房容纳食材空间的大小,地址总线以外的数据可视为存放于厨房旁边的一个仓库。比如16位的8086,24位的80286。对于程序员来说,os的位数通常指的就是寻址位数,比如32位windows编程,你就拥有了4G寻址空间;而DOS你只有1M(本该是64k,但DOS通过段式寻址方式,用段地址:偏移量将寻址空间扩充为16x64k = 1M)
数据总线决定一次读写的数据位宽,决定单位时间内CPU的运算能力,比如一个锅子的大小,一个指令周期就只能处理多少数据。数据总线宽度常用于定义CPU种类,比如32位的80386和16位的8086/80286,8位的8088
控制总线决定厨房处理方式的多样性:可以蒸炸煎炒(比如用来区分各种硬件中断信号,硬中断用于控制接口卡,通过定义中断号来控制各种外设:如显卡,声卡,分配不同的中断号,通过中断号(类似于索引)接受CPU发送的控制命令,可以将其想象为封建皇帝(CPU)设置的行(中书)省),控制总线是对定义CPU种类、OS种类影响最小的总线。