打字猴:1.700414079e+09
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
1700414111 计算机是怎样跑起来的 [:1700412640]
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
1700414127
1700414128 下面就从汇编语言的第1行开始转换。第一行的LD A,207匹配LD A,num这个模式,所以可以先转换成00111110 num。然后把十进制数207转换成8比特的二进制数,用这个二进制数替换num。即LD A,207的机器语言为00111110 11001111。由于这条指令存储在内存最开始的部分(00000000号地址),所以要把这条指令和内存地址像下面这样并排写下来
[ 上一页 ]  [ :1.700414079e+09 ]  [ 下一页 ]