Chinaunix首页 | 论坛 | 博客
  • 博客访问: 675939
  • 博文数量: 191
  • 博客积分: 1875
  • 博客等级: 上尉
  • 技术积分: 2167
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-23 23:21
个人简介

有时候,就是想窥视一下不知道的东东,因为好奇!

文章分类

全部博文(191)

文章存档

2024年(7)

2023年(3)

2020年(1)

2019年(1)

2018年(1)

2017年(2)

2016年(69)

2015年(53)

2014年(14)

2013年(1)

2012年(5)

2011年(25)

2010年(9)

分类: 其他平台

2024-07-19 00:16:06

前面分析指令及对应动作,现在跑下,尽量将每条指令都用到,看看效果如何:
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变量作为操作数,不能实现两个变量乘/除法。。。
阅读(56) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~