1700414077
1700414078
一旦重置了CPU,00000000就会被自动存储到PC寄存器中,这意味着接下来CPU将要从00000000号地址读出程序。首先CPU会从00000000号地址读出指令00111110,判断出这是一条由2个字节构成的指令,于是接下来会从下一个地址(即00000001,1号地址,代码清单3.3中并没有标记出该地址本身)读出数据11001111,把这两个数据汇集到一起解释、执行。执行的指令是把数值207写入寄存器A,用汇编语言表示的话就是“LD A,207”,这时,由于刚刚从内存读出了一条2字节的指令(占用两个内存地址),所以PC寄存器的值要增加2,并接着从00000010号地址读出指令,解释并执行。
1700414079
1700414080
接下来的流程与此类似,通过反复执行“读取指令”“解释、执行指令”“更新PC寄存器的值”这3个操作,程序就能运行起来了。一旦执行完最后一行的JP LOOP所对应的机器语言,PC寄存器的值就会被设为标签LOOP
:对应的地址00010000,这样就可以循环执行同样的操作。请重点观察PC寄存器是如何控制程序流程的
1700414081
1700414082
代码清单3.3 汇编语言与机器语言的对应关系
1700414083
1700414084
地址 机器语言 标签 操作码 操作数
1700414085
1700414086
00000000 00111110 11001111 LD A,207
1700414087
1700414088
00000010 11010011 00000010 OUT (2),A
1700414089
1700414090
00000100 00111110 11111111 LD A,255
1700414091
1700414092
00000110 11010011 00000010 OUT (2),A
1700414093
1700414094
00001000 00111110 11001111 LD A,207
1700414095
1700414096
00001010 11010011 00000011 OUT (3),A
1700414097
1700414098
00001100 00111110 00000000 LD A,0
1700414099
1700414100
00001110 11010011 00000011 OUT (3),A
1700414101
1700414102
00010000 11011011 00000000 LOOP
: IN A,(0)
1700414103
1700414104
00010010 11010011 00000001 OUT (1),A
1700414105
1700414106
00010100 11000011 00010000 00000000 JP LOOP
1700414107
1700414108
1700414109
1700414110
1700414112
计算机是怎样跑起来的 3.5 尝试手工汇编
1700414113
1700414114
在CPU的资料中,明确写有所有可以使用的助记符,以及助记符转换成机器语言后的数值。只要查看这些资料,就可以把用汇编语言编写的程序手工转换成机器语言的程序,这样的工作称为“手工汇编”。进行手工汇编时,要一行一行地把用汇编语言编写的程序转换成机器语言。下面就实际动手试一试。表3.2列出了汇编语言中必要指令的助记符、助记符所对应的机器语言,以及执行这些机器语言所需的时钟周期数
1700414115
1700414116
表3.2 从助记符到机器语言的转换方法
1700414117
1700414118
助记符 机器语言 时钟周期数
1700414119
1700414120
LD A,num 00111110 num 7
1700414121
1700414122
OUT(num),A 11010011 num 11
1700414123
1700414124
IN A,(num) 11011011 num 11
1700414125
1700414126
JP num 11000011 num 10
[
上一页 ]
[ :1.700414077e+09 ]
[
下一页 ]