前面分析指令及对应动作,现在跑下,尽量将每条指令都用到,看看效果如何:
1.点亮LED跑马灯
用OUT Im输出点亮4个LED,对应指令为
10111111(OUT 15 --- LED全亮)
10110000(OUT 0 --- LED全灭)
10110001(OUT 1 --- LED1亮,其它LED灭)
10110010(OUT 2 --- LED2亮,其它LED灭)
10110100(OUT 4 --- LED3亮,其它LED灭)
10111000(OUT 8 --- LED4亮,其它LED灭)
10110000(OUT 0 --- LED全灭)
11110000(JMP 0 --- 跳转到开始重新执行
将板子上的拔码开关,按以上方式拔到相应的位置,算是将“代码“调入”内存“了!板子上电可看到LED逐一点亮再熄灭!
2.递增计数点亮LED
输出点亮4个LED,对应指令为
0> 01111111(MOV B,15 --- 15赋值给B)
1> 10010000(OUT B --- LED全亮)
2> 01110000(MOV B,0 --- 0赋值给B)
3> 10010000(OUT B --- 哪几个LED点亮,由B的值决定)
4> 01010001(ADD B,1 --- B增加1)
5> 11100011(JNC 3 --- 未超过15进位,就跳转到前面3>的位置进行下一次迭代)
6> 11110000(JMP 0 --- 跳转到起点重新开始)
将板子上的拔码开关,按以上方式拔到相应的位置,上电可看到LED循环计数0-15!
4位机超15就溢出,进位标志置1,用C语言记录近似逻辑:
while(1) {
int i = 15;
printf("%d",i);
for(i = 0; i < 16; i++) {
printf("%d",i);
}
}
3. 递减计数点亮LED
输出点亮4个LED,对应指令为
0> 01100000(IN B --- 输入赋值给B)
1> 10010000(OUT B --- LED点亮)
2> 01011111(ADD B,15 --- B值减1。用加上其相反数的补码实现减法)
3> 11100000(JNC 0 --- 无进位就是到0>了,跳转到开始处重新开始)
4> 11110001(JMP 1 --- 跳转到1>下一次迭代)
用C语言记录近似逻辑:
while(1) {
int i;
scanf("%d",&i);
for(; i > 0; i--) {
printf("%d",i);
}
}
*.求两数之乘/除,可用循环累加/减实现!
此CPU不能同时将2变量作为操作数,不能实现两个变量乘/除法。。。
阅读(111) | 评论(0) | 转发(0) |