LC-3机器码编程实验

    

一、实验目的与要求

  • (分析和理解实验指定的问题。
  • 利用LC-3的机器代码设计实现相关程序。
  • 通过LC-3仿真器调试和运行相关程序并得到正确的结果。 

二、实验内容与方法

  • 利用LC-3的机器代码计算一个16位的字中有多少位是’1’
    • 程序从x3000开始
    • 需计算的字存储在x3500
    • 计算的结果存储在x3501

0011 000 000000000;PC=x3000程序开始
0101 000 000 1 00 000;AND R0<-0,给R0赋值为0(R0为要判断的该数有多少位为1)
0101 001 001 1 00 000;AND R1<-0,给R1赋值为0(R1为循环的次数,由于输入数据有16位,进行判断需赋值为16)
0001 001 001 1 01000;ADD R1<-8,给R1赋值为8(因为无法直接通过0001的指令将R1直接赋值为16)
0001 001 001 0 00 001;ADD R1<-R1+R1,给R1赋值为16
1010 010 000010100;LD R2<-M[X3500],间接寻址X3500,在该条指令的后14条指令,指向x3500
0001 001 001 1 00000;ADD R1<-R1+0,更新R1以便于之后循环重新回到该条指令而所有数值不发生任何改变
0000 010 000000110;BRZ X300D进行判断开始循坏
0001 010 010 1 00000;ADD R2<-R2+0,同上作用
0000 011 000000001;BRZP X300A,判断正负
0001 000 000 1 00001;R0<-R0+1,若此时判断R2为负则执行该步,使R0加一
0001 010 010 0 00 010;ADD R2<-R2+R2,左移R2第一位,更新R2符号位以重新判断
0001 001 001 1 11111;ADD R1<-R1-1,执行操作后将R1-1更新循环次数
0000 111 111111000;BRNZP X3005,判断R1是否为0,是否要结束循环,如不则回到x3005
1011 000 000000001;将R0赋值给x3501,(由于pc偏移过大无法直接进行赋值,所以采用1011间接赋值)
1111 0000 00100101;结束程序
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值