avPlayerVideoController = [[AVPlayerViewController alloc] init];
avPlayer = [AVPlayer playerWithURL:[NSURL URLWithString:videoURL]];
avPlayerVideoController.view.frame = CGRectMake( imgViewVideo.frame.origin.x, imgViewVideo.frame.origin.y, imgViewVideo.frame.size.width, imgViewVideo.frame.size.height);
avPlayerVideoController.delegate = self;
avPlayerVideoController.showsPlaybackControls = YES;
avPlayerVideoController.player = avPlayer;
[avPlayerVideoController.player play];
这就是我的Easy68k代码。
int X = 0;
int Y = 1;
while(X <= 10 ){
if(X%2 == 0)
Y = Y * X;
else
Y++;
X++;
}
cout << "Y is: " << Y;
我不确定我的代码有什么不对,但我觉得这是循环部分开头的一个问题。我已经跟着代码,但我仍然无法弄清楚它出错的地方。当我运行它时,它会输出 Y是:10。 D1和D2也是A或10.任何帮助都表示赞赏。
答案 0 :(得分:1)
在进行除法和交换之后,你仍然在d3
中得到除法的结果和余数。这意味着它永远不会为零,并且比较总是假的。您需要使用and
将上半部分归零或使用仅使用下半部分的form.of cmp
。
只需注意:当您使用2的权力时,您也可以跳过除法并直接使用and
值减去1。在这种情况下,除以2的余数与and
相同,值为1.
答案 1 :(得分:0)
不是使用divu
更有效和更快的机制来执行与x%2相同的操作,而只是检查位0的状态。这也会产生更少的代码。这显然只适用于2的mod,任何其他值都需要另一种方法(甚至可能是可怕的分歧:))
更改现有代码以进行阅读(为简洁而修剪):
LOOP CLR.W D3 ;Find the remainder
MOVE.W D1,D3
btst #0,d3 ; Test bit 0
BEQ EQUAL ;If equal, then go to equal
...
执行速度会明显加快(在真实硬件上)..并非你可能会注意到:)
这是有效的,因为mod 2基本上告诉你一个数字是偶数还是奇数,这可以通过简单地查看是否设置位0来非常便宜地完成
HTH
答案 2 :(得分:0)
回答“什么是不正确的”:
LOOP CLR.W D3 ;Find the remainder
MOVE.W D1,D3
DIVU #2,D3
68000上的 divu.w
和divs.w
命令从第二个参数中获取完整的32位字,并将其除以第一个参数中指定的16位字。
您的代码在分割之前无需清除高{16}的d3
。
所以变化是显而易见的:
LOOP CLR.L D3 ;Find the remainder
;all the same from here on