打字猴:1.700413872e+09
1700413872
1700413873 00010101    00010000
1700413874
1700413875 00010110    00000000
1700413876
1700413877 这段由8比特二进制数构成的机器语言程序总共23个字节。若把这些字节一个接一个地依次写入内存中,所占据的内存空间就是00000000-00010110。一旦重置了CPU,CPU就会从0号地址开始顺序执行这段程序
1700413878
1700413879 在机器语言程序中,虽然都是0和1的组合,但每个组合都是有特定含义的指令或数据。可是对人类来说,如果只看0和1的话,恐怕很难判断各个组合都表示什么
1700413880
1700413881 于是就有人发明了一种编程方法,根据表示指令功能的英语单词起一个相似的昵称,并将这个昵称赋予给0和1的组合。这种类似英语单词的昵称叫做“助记符”,使用助记符的编程语言叫做“汇编语言”。无论是使用机器语言还是汇编语言,所实现的功能都一样的,区别只在于程序是用数字表示,还是用助记符表示。也就是说,如果理解了汇编语言,也就理解了机器语言,更进一步也就理解了计算机的原始工作方式
1700413882
1700413883 代码清单3.1中的机器语言可以转换成如代码清单3.2所示的汇编语言。汇编语言的语法十分简单,以至于语法只有一个,即把“标签”“操作码(指令)”和“操作数(指令的对象)”并排写在一行上,仅此而已
1700413884
1700413885 代码清单3.2 用汇编语言的代码表示代码清单3.1中的机器语言
1700413886
1700413887 标签         操作码        操作数
1700413888
1700413889 LD            A,207
1700413890
1700413891 OUT           (2),A
1700413892
1700413893 LD            A,255
1700413894
1700413895 OUT           (2),A
1700413896
1700413897 LD            A,207
1700413898
1700413899 OUT           (3),A
1700413900
1700413901 LD            A,0
1700413902
1700413903 OUT           (3),A
1700413904
1700413905 LOOP:        IN            A,(0)
1700413906
1700413907 OUT           (1),A
1700413908
1700413909 JP            LOOP
1700413910
1700413911 标签的作用是为该行代码对应的内存地址起一个名字。编程时如果总要考虑“这一行的内存地址是什么来着?”就会很不方便,所以在汇编语言中用标签来代替地址。用汇编语言编程时可以在任何需要的标签的地方“贴上”名称任意的标签。在代码清单3.2所示的程序中,使用了名为LOOP:的标签
1700413912
1700413913 操作码就是表示“做什么”的指令。因为用助记符表示的指令是英语单词的缩写,比如LD是Load(加载)的缩写,所以多少能猜出其含义。汇编语言中提供子多少种助记符,CPU就有多少种功能。Z80 CPU的指令全部加起来有70条左右,这里先把主要的指令列在表3.1中,请大家粗略浏览一下。在浏览的过程中请注意这些指令的分类,按功能这些指令可以分成运算、与内存的输入输出和与I/O的输入输出三类。这是因为计算机能做的事也只有输入、运算、输出这三种了
1700413914
1700413915 操作数表示的是指令执行的对象。CPU的寄存器、内存地址、I/O地址或直接给出的数字都可以作为操作数。如果某条指令需要多个操作数,那么它们之间就要用逗号分隔。操作数的个数取决于指令的种类。也有不需要操作数的指令,比如用于停止CPU运转的HALT指令
1700413916
1700413917 汇编语言的语法和英语祈使句的语法很像。若对比英语的祈使句Give me money和汇编语言的语句,就可以看出在英语的祈使句中,一开头放置了一个表示“做什么”的动词,这个动词就相当于汇编语言中的操作码。在动词后面放置了一个表示“动作作用到什么上”的宾语,这个宾语就相当于汇编语言中的操作数。因为程序的作用是向CPU发出指令,而且编程语言又是由说英语的人发明的,所以编程语言与英语祈使句类似也就不足为奇了
1700413918
1700413919 构成机器语言的是二进制数,而在汇编语言中,则使用十进制数和十六进制数记录数据。若仅仅写出123这样的数字,表示的就是十进制数;而像123H这样在数字末尾加一个H(H表示Hexadecimal,即十六进制数),表示的就是十六进制数。在代码清单3.2所示的程序中,使用的都是十进制数
1700413920
1700413921 表3.1 Z80 CPU中的主要指令
[ 上一页 ]  [ :1.700413872e+09 ]  [ 下一页 ]