Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
**i=0然后x[i]=偶数,i=1然后[i]=奇数**从汇编转换为Java编程_Java_Assembly - Fatal编程技术网

**i=0然后x[i]=偶数,i=1然后[i]=奇数**从汇编转换为Java编程

**i=0然后x[i]=偶数,i=1然后[i]=奇数**从汇编转换为Java编程,java,assembly,Java,Assembly,以下是评估练习中的问题。尽管我从网上找到并总结了答案,但我仍然不知道它在Java编程中是如何工作的,Java编程可以帮助新手理解逻辑,因此我更有可能在Sigma 16系统中将其转换为汇编语言 问: Sigma16系统在内存中有一个16位有符号数字的数组X。编写一个汇编语言程序来编写第二个数组,如果X的第i个元素为偶数,则Y的第i个元素为0,如果X的第i个元素为奇数,则Y的第i个元素为1 答复: 添加R1、R0、R0;i=0 lear2,4[R0];R2=4 lear3,1[R0];R3=1 le

以下是评估练习中的问题。尽管我从网上找到并总结了答案,但我仍然不知道它在Java编程中是如何工作的,Java编程可以帮助新手理解逻辑,因此我更有可能在Sigma 16系统中将其转换为汇编语言

问: Sigma16系统在内存中有一个16位有符号数字的数组X。编写一个汇编语言程序来编写第二个数组,如果X的第i个元素为偶数,则Y的第i个元素为0,如果X的第i个元素为奇数,则Y的第i个元素为1

答复:

添加R1、R0、R0;i=0
lear2,4[R0];R2=4
lear3,1[R0];R3=1
lear4,2[R0];R4=2
回路负载R5,X[R1];R5=x[i]
R6、R5、R4分区;x[i]/2
存储R15,Y[R1];y[i]=x[i]模2
加上R1、R1、R3;我++
CMPLT R15、R1、R2;如果我小于4,那么⋯
跳线R15,环路[R0];环
陷阱R0,R0,R0

非常感谢您的回答。如果上述代码有偏差,请纠正错误

Java中的16位有符号整数是
short
s,因此Java中的等效代码片段可能是:

short[]x = new short[]{32, 203, 98, 19, 47, 78}; 
short[]y = new short[x.length]; 

for (int i = 0; i < x.length; ++x)
    if (x[i] % 2 == 0)  // % is the remainder operator 
        y[i] = 0;
    else
        y[i] = 1;  
与“2除法后的余数”测试不同,还有一个更像汇编的按位操作选项:

    y[i] = x[i] & 1;

Java对整数有按位运算,因此您仍然可以测试低位,以查看整数是否为偶数<代码>奇偶[i]=x[i]&1。IDK asm用于什么体系结构,但它很可怕。不要使用
div
除以2,只需移位或检查低位。
div
是“除法”操作还是“mod”(余数)操作?假设它是除法,
divr6,R5,R4
的意思是“将R5(x[i])除以R4(2),然后将商放入R6”。剩下的会神奇地进入R15吗?如果没有,下面的
存储R15,Y[R1]
只是将垃圾存储到Y[i]中。因为除以2后的余数是您希望存储在y数组中的内容。@KevinAnderson:我在中找到了一个asm示例,使用了类似的语法,只描述为“类似MIPS”(与幻灯片中介绍的数据流体系结构相反)。我是在谷歌的
“STORE”“R15”“DIV”“LOAD”
上找到的。R15似乎对那里的
DIV
并不特别,但我找不到任何ISA引用。有一些玩具架构只有加法,没有按位的东西,所以一个有更多算术但仍然没有按位的玩具ISA对于没有二进制的学习asm的学生来说可能是合理的…@PeterCordes我认为它看起来很像Alpha,但这正是我刚刚熟悉的体系结构…@KevinAnderson:是的,比较到寄存器就像MIPS或Alpha,但Alpha的加载/存储助记符是
ldw
/
stw
(这是著名的)。此外,Alpha没有
陷阱
指令或
lea
。().
jumpt
目标地址非常不寻常,显然是寄存器的偏移量,而不是简单的相对跳转?但是,对余数可能有不同的指令,与C和除Python之外的大多数语言相同。(
-1%2==-1
)。OP严格要求偶数/奇数为0或1,因此实际上需要避免符号除法/模语义。最简单的方法是像在asm中一样执行
x[i]&1
,否则可以使用
x[i]%2==0
作为选择0或1的条件,并让优化器将其转换为按位and。OP确实明确地说他们的数字是有符号的,但我认为将其转换为无符号也会起作用。这就是Python为您提供的@PeterCordes:always being different just be be be be different(;->)。无论如何,你是对的;我会修改我的答案。嗨,伙计们,非常感谢!!!由于您使用了其他方法进行了解释,因此它非常简短且易于理解。
    y[i] = (x[i] % 2 == 0) ? 0 : 1;
    y[i] = x[i] & 1;