所以在我的程序的一部分是汇编语言,我必须创建一个随机的8位数字,其中只有3个...所以我创建了8位随机数,我很难搞清楚如何弄清楚它是否有3个如此,如果它不能我可以创建另一个并再次检查。直到它只有3.到目前为止我还没有找到任何在线有用的东西,除了"汉明重量"。但由于我不熟悉汇编语言,我无法弄清楚如何编码它。 这是我到目前为止基于班级
的笔记rand8: mov a, rand8reg ;puts the 1 bit of memory in a
jnz rand8b ;if it is 0 it will jump to the next loop
cpl a ;takes compliment of the number
mov rand8reg, a
rand8b: anl a, #10111000b
mov c, p
mov a, rand8reg
rlc a
mov rand8reg, a
mov r0, #30h
cloop2: mov a, @r0
mov r2, #8
cloop1: rlc a
jnc nocy
inc 20h
nocy: djnz r2, cloop1
inc r0
cjne r0,#40h,cloop2
ljmp randloop
答案 0 :(得分:0)
解决这个问题的方法:查看数字的每一位,然后将其与0相加,并将结果添加到计数器中:如果值为!= 3,请再试一次。
This给出了如何做到这一点的想法,XOR当然不是唯一的方法,你可以增加一个计数器而不是打印到屏幕上。这也是非常低效的。
答案 1 :(得分:0)
这就是我在C中的表现:
int main() {
int v = 3; // count the number o ...
int c = 0; // c accumulates th ...
while (v)
{
c += v & 1;
v >>= 1;
}
}
这会生成如下汇编代码:
main:
PUSH %BP
MOV %SP, %BP
@main_body:
SUB %SP, $4, %SP
MOV $3, -4(%BP)
SUB %SP, $4, %SP
MOV $0, -8(%BP)
@while0:
CMP -4(%BP), 0
JEQ @false0
@true0:
AND -4(%BP), $1, %0
ADD -8(%BP), %0, %0
MOV %0, -8(%BP)
SHR -4(%BP), $1, %0
MOV %0, -4(%BP)
JMP @while0
@false0:
@exit0:
@main_exit:
MOV %BP, %SP
POP %BP
RET
我用这个网站来帮助我编写程序集,它解释得非常好: http://ctoassembly.com/
答案 2 :(得分:0)
不使用循环的另一种可能性:
stepsize