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
1700414127
1700414128
下面就从汇编语言的第1行开始转换。第一行的LD A,207匹配LD A,num这个模式,所以可以先转换成00111110 num。然后把十进制数207转换成8比特的二进制数,用这个二进制数替换num。即LD A,207的机器语言为00111110 11001111。由于这条指令存储在内存最开始的部分(00000000号地址),所以要把这条指令和内存地址像下面这样并排写下来
1700414129
1700414130
地址 汇编语言 机器语言
1700414131
1700414132
00000000 LD A,207 00111110 11001111
1700414133
1700414134
第二条指令OUT(2),A匹配OUT(num),A这个模式,所以可以先转换成11010011 num,然后把num替换成00000010,即用8比特二进制数表示的十进制数2,最终得到机器语言11010011 00000010,因为内存中已经存储了2字节的机器语言,所以这条机器语言要从00000010号地址(用十进制表示就是2号地址)开始存储
1700414135
1700414136
地址 汇编语言 机器语言
1700414137
1700414138
00000010 OUT (2),A 11010011 00000010
1700414139
1700414140
这之后由于LD指令和OUT指令又以相同的模式出现了3次,所以用相同的步骤转换成机器语言。请注意,机器语言每条语句的字节是多少,内存地址就相应增加多少
1700414141
1700414142
地址 汇编语言 机器语言
1700414143
1700414144
00000100 LD A,255 00111110 11111111
1700414145
1700414146
00000110 OUT (2),A 11010011 00000010
1700414147
1700414148
00001000 LD A,207 00111110 11001111
1700414149
[
上一页 ]
[ :1.7004141e+09 ]
[
下一页 ]