计算机导论课作业 07(基于Python)

4、 (20 points)装上我们的SEAL(教学用的汇编语言模拟器)写出正确的汇编语言程序。输入:三个整数,用_data 1,[a,b,c]表示,计算出最大数放入寄存器R1中,打印。请不要用函数调用。

请在注释中写出你的Python对应代码,把你的全部代码拷贝到word报告中,并将程序的运行结果截图粘贴到报告中。

#python
a=7
b=18
c=9
if a<b:
if b<c:
print(c)
else:
print(b)
else:
if a>c:
print(a)
else:
print(c)

模拟器的代码
_data 1000,[7,18,9]

load R2,(1000)   # a = 7 
load R3,(1001)  # b = 18
load R4,(1002)  # c = 9

slt R1,R2,R3 #将a与b进行比较
beqz R1,L0#如果b大继续执行下面的语句,反之跳转去L0
slt R1,R3,R4
beqz R1,L1#如果c大继续执行下面的语句
_pr R4#输出c
goto label4#结束程序

L1:#如果b大就输出b
_pr R3
goto L4

L0:#如果a大,继续比较a与c
slt R1,R2,R4
beqz R1,L2#c大就继续执行下面的语句来输出c,否则就去L2
_pr R4
goto L4

L2:#输出a
_pr R2
goto L4

L4:

5、 (20 points)请用SEAL写出和执行汇编语言程序。输入一个个字符串表示二进制数,以_data的形式输入,此数组中的第一个数代表字符串的长度,然后是0或1的ASCII码:字符0是48,字符 1是49.。例如,“101”是用_data 0, [3, 49, 48, 49].是请用最简单的方式计算出它有多少个”1”,将结果放在R1中,并打印。例如,这个例子有2个“1”。
请在注释中写出你的Python对应代码,把你的全部代码拷贝到word报告中,并将程序的运行结果截图粘贴到报告中。

a = "101"
b = 0
for i in a:
    if i == '1':
        b+=1
print(b)

汇编语言:
_data 0, [49, 48, 49]#A = "101"

mov R1,0#储存结果
mov R2,0#计数
mov R5,0#储存首地址
mov R6,49

L1:
load R3,0h(R5)
sle R4,R6,R3#比较R5是否小于等于49
beqz R4,L2#如果R5比49小直接+1返回循环
sle R4,R3,R6#比较R5是否大于等于49
beqz R4,L2#R5比49大也直接+1然后返回循环
add R2,R2,1#R5==49让R2加一
add R5,R5,1
slt R4,R5,2h#判断R5是否到达了2
beqz R4,L3#是就停止循环然后输出
goto L1#不然继续循环

L3:
_pr R2

L2:
add R5,R5,1
goto L1 #R5加一之后返回

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值