我想确认我对 Kademlia DHT 中的存储桶的理解。\nKademlia 有m 个 k 存储桶,其中m是网络的大小(以位为单位),k是每个存储桶存储的键值对的数量。\nm=4例如,让我们说我们可以有2^4节点,即从 0 到 15。
+========+\n| NodeId |\n+========+\n| 0000 |\n+--------+\n| 0001 |\n+--------+\n| 0010 |\n+--------+\n| 0011 |\n+--------+\n| 0100 |\n+--------+\n| 0101 |\n+--------+\n| 0110 |\n+--------+\n| 0111 |\n+--------+\n| 1000 |\n+--------+\n| 1001 |\n+--------+\n| 1010 |\n+--------+\n| 1011 |\n+--------+\n| 1100 |\n+--------+\n| 1101 |\n+--------+\n| 1110 |\n+--------+\n| 1111 |\n+--------+\nRun Code Online (Sandbox Code Playgroud)\n\n每个节点都有0位匹配、1位匹配、2位匹配等的路由表,这就是m桶。此外,对于每个桶,它将存储k代表而不是单个 NodeId。\n因此,如果我们说 k=2,则节点 0101 的路由表将类似于:
\xe2\x94\x8c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x90\n\xe2\x94\x82 0101 \xe2\x94\x82\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xa4\n| |\n| +==================+ |\n| | xxxx | |\n| +==================+ …Run Code Online (Sandbox Code Playgroud) 以下代码适用于程序集 8086,我正在使用LOOP指令进行循环。
在CL变为零后,循环将永远继续,并将CX值更改为 FFFFh。
但是,如果我将 的值更改CL为最大 06h,则循环会正确停止。
此外,如果我先删除LOOP AGAIN它会正常工作。
DATA DB 01001100b
MOV AL, DATA
MOV CL, 08h
SUB BL, BL
SUB DL, DL
AGAIN:
ROL AL, 1
JC SKIP
INC BL
LOOP AGAIN
SKIP:
INC DL
LOOP AGAIN
Run Code Online (Sandbox Code Playgroud)
我希望它在CL变为零时停止。知道为什么它没有按预期运行吗?
更新 1
我注意到当CL(或CX当使用 16 位时)达到 1 并且最后一位为 0,那么第一个LOOP AGAIN不会跳起来并且操作继续到SKIP部分。如果我将DATA的最后一位更改为 1,它将使JC SKIP一切正常。