汇编作业

计算机接口与通信作业(汇编)

原文刊登在 https://github.com/rsy56640/Assignment-in-WHUISS/blob/master/Other/Asm-AS/README.md

访问 github 时请在 url 后加上 ?ts=4 使得 tab 表示 4 个空格。

1. 求100以内所有质数

注意到若 n n n 不是质数,则 ∃ q ≤ n , s . t .   q ∣ n \exist q\le \sqrt{n},\quad s.t.\ q|n qn ,s.t. qn,所以写了一个简易的计算 i n t ( n ) int(\sqrt{n}) int(n ) 的函数。

2. 计算前30位斐波那契数(使用16位寄存器,注意溢出,每次输出一位数字)

基本计算方法: ( a , b ) = ( b , a + b ) (a,b) = (b, a+b) (a,b)=(b,a+b),不断迭代(交换 a , b a,b a,b 时采用3次异或运算)

a , b a,b a,b 均使用2个16位寄存器拼成32位寄存器模拟加法,每一轮都将 a a a 的低16位和高16位送去 print_fib PROC 打印。

x , y x,y x,y 分别表示高16位和低16位,将其表示为十进制:(注意到 0 ≤ x , y ≤ 65535 0 \le x,y \le 65535 0x,y65535
x = x 4 ∗ 1 0 4 + x 3 ∗ 1 0 3 + x 2 ∗ 1 0 2 + x 1 ∗ 1 0 1 + x 0 ∗ 1 0 0 y = y 4 ∗ 1 0 4 + y 3 ∗ 1 0 3 + y 2 ∗ 1 0 2 + y 1 ∗ 1 0 1 + y 0 ∗ 1 0 0 r e s u l t = x ⋅ 2 16 + y = 65536 x + y \begin{aligned} & x = x_4*10^4 + x_3*10^3 + x_2*10^2 + x_1*10^1 + x_0*10^0 \\ & y = y_4*10^4 + y_3*10^3 + y_2*10^2 + y_1*10^1 + y_0*10^0 \\ & result = x \cdot 2^{16} + y = 65536x + y \\ \end{aligned} x=x4104+x3103+x2102+x1101+x0100y=y4104+y3103+y2102+y1101+y0100result=x216+y=65536x+y
将表达式展开得:

exponentcoefficient
1 0 8 10^8 108 6 x 4 6x_4 6x4
1 0 7 10^7 107 5 x 4 + 6 x 3 5x_4+6x_3 5x4+6x3
1 0 6 10^6 106 5 x 4 + 5 x 3 + 6 x 2 5x_4+5x_3+6x_2 5x4+5x3+6x2
1 0 5 10^5 105 3 x 4 + 5 x 3 + 5 x 2 + 6 x 1 3x_4+5x_3+5x_2+6x_1 3x4+5x3+5x2+6x1
1 0 4 10^4 104 6 x 4 + 3 x 3 + 5 x 2 + 5 x 1 + 6 x 0 + y 4 6x_4+3x_3+5x_2+5x_1+6x_0+y_4 6x4+3x3+5x2+5x1+6x0+y4
1 0 3 10^3 103 6 x 3 + 3 x 2 + 5 x 1 + 5 x 0 + y 3 6x_3+3x_2+5x_1+5x_0+y_3 6x3+3x2+5x1+5x0+y3
1 0 2 10^2 102 6 x 2 + 3 x 1 + 5 x 0 + y 2 6x_2+3x_1+5x_0+y_2 6x2+3x1+5x0+y2
1 0 1 10^1 101 6 x 1 + 3 x 0 + y 1 6x_1+3x_0+y_1 6x1+3x0+y1
1 0 0 10^0 100 6 x 0 + y 0 6x_0+y_0 6x0+y0

这样我们直接计算每一位的值,与此同时维护2个进位器(因为有可能进不止1位)

为了加速计算过程,使用了4个临时变量来储存中间结果:

varvalue
temp0 3 x 0 ,   5 x 0 ,   3 x 4 ,   5 x 4 3x_0,\ 5x_0,\ 3x_4,\ 5x_4 3x0, 5x0, 3x4, 5x4
temp1 3 x 1 ,   5 x 1 3x_1,\ 5x_1 3x1, 5x1
temp2 3 x 2 ,   5 x 2 3x_2,\ 5x_2 3x2, 5x2
temp3 3 x 3 , 5 x 3 3x_3, 5x_3 3x3,5x3

value 的变化表示在不同时期缓存的不同值。

红色圈表示在计算这个值的过程中将其缓存,缓存的取值为红笔标注的值。
在这里插入图片描述

打印时先找到第一个非0数字,然后依次打印每一个数字即可。

3. 八皇后

基本思路:用一个长度为8的一维数组来表示位置,即 queen[i] 表示第i列的皇后位于第几行。递归地尝试每一个可能值,注意递归时要记录之前的状态。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值