本文主要是介绍USTC ICS(2023Fall) Lab2 The PingPong Sequence,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
LC-3汇编语言
.ORIG x3000LDI R0,n ;f(n)NOT R0,R0ADD R0,R0,#1 ;取R0补码用于减法AND R1,R1,#0 ;R1记录循环次数,先初始化为0ADD R2,R1,#0 ;R2记录符号,加号为0,减号为-1,f(1)对应加号ADD R3,R1,#3 ;记录f(n),f(1)=3AND R5,R5,#0 ;R5存0000 1111 1111 1111,先初始化为0
LOOP1 ADD R5,R5,#1 ;本行开始的6行是将R5从1变为所需值的过程ADD R1,R1,#1 ;R1记录循环次数ADD R4,R1,#-12BRz LOOP2ADD R5,R5,R5BRp LOOP1
LOOP2 AND R1,R1,#0 ;初始化R4为0AND R4,R4,#0 ;初始化R4为0ADD R1,R1,#1 ;记录循环次数
LOOP3 ADD R7,R0,R1 BRz LOOP8 ;循环了n次就跳出循环ADD R3,R3,R3 ;R3=R3+R3AND R4,R2,#1 ;看R2代表加号还是减号BRz LOOP4ADD R3,R3,#-2 ;R2代表减号,R3=R3-2BRnzp LOOP5
LOOP4 ADD R3,R3,#2 ;R2代表加号,R3=R3+2
LOOP5 ADD R1,R1,#1 ;循环次数+1AND R3,R5,R3 ;将R3取4096的模AND R6,R3,#-8 ;看R3末三位是否为0BRnp LOOP6 ;若是,则能被8整除,改变R2,否则进入LOOP6,判断末位是否为8NOT R2,R2 ;改变R2BRnzp LOOP3
LOOP6 ADD R6,R3,#-8 ;R6=R3-8BRp LOOP7 ;R6为正数则继续到LOOP7里减10BRn LOOP3 ;R6为负数则不需改R2,跳回LOOP3NOT R2,R2 ;R6为0则需改R2BRnzp LOOP3
LOOP7 ADD R6,R6,#-10;R6=R6-10BRp LOOP7 ;R6为正数则继续到LOOP7里减10BRn LOOP3 ;R6为负数则不需改R2,跳回LOOP3NOT R2,R2 ;R6为0则需改R2BRnzp LOOP3
LOOP8 STI R3,HERE ;把R3也就是f(n)放到x3103
HERE .FILL x3103
n .FILL x3102TRAP x25.END
C++
int16_t lab2(int16_t n) {int16_t num=3,i=0;char x='+';for(i=2;i<=n;i++){if(x=='+'){num+=num;num+=2;while (num>=4096)num-=4096;if(!(num&0x0007))x='-';else{int16_t temp=num;while (temp>=10)temp-=10;if(temp==8)x='-';}}else{num+=num;num-=2;while (num>=4096)num-=4096;if(!(num&0x0007))x='+';else{int16_t temp=num;while (temp>=10)temp-=10;if(temp==8)x='+';}}}return num;
}
这篇关于USTC ICS(2023Fall) Lab2 The PingPong Sequence的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!