我正在汇编中实现直接映射缓存。我有一个C程序,它定义了一个函数check_cache()
,我在一个单独的IA32程序集文件中实现它。该函数返回一个unsigned char值,并分别接受2个参数:line cache[4]
和unsigned char addr
。 line cache[4]
参数是表示缓存行的结构。把这一切放在一起,我有以下C代码:
typedef struct {
char valid;
char tag;
char block[4];
} line;
unsigned char check_cache(line cache[4], unsigned char addr);
然后,我的问题是如何在我的程序集文件中访问check_cache
的参数。它是基于论证的大小吗?例如,一个C结构是8个字节,一个char是1个字节,因此可以使用cache
和movl 8(%ebp), %ecx
访问addr
movb 9(%ebp), %cl
shrb
。我是在正确的轨道上吗?另外,有没有办法检查我是否得到了正确的参数?
我的下一个问题是关于访问结构的成员。我被告知我可以使用andb
或valid
说明来访问tag
,block[4]
和import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
public class CompletableFutureTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
Runnable dummyTask = () -> {
try {
Thread.sleep(200);
} catch (InterruptedException ignored) {
}
};
CompletableFuture<Void> f1 = CompletableFuture.runAsync(dummyTask);
CompletableFuture<Void> f2 = CompletableFuture.runAsync(dummyTask);
CompletableFuture[] all = {f1, f2};
f1.whenComplete((aVoid, throwable) -> System.out.println("Completed f1"));
f2.whenComplete((aVoid, throwable) -> System.out.println("Completed f2"));
CompletableFuture<Void> allOf = CompletableFuture.allOf(all);
allOf.whenComplete((aVoid, throwable) -> {
System.out.println("Completed allOf");
}
);
allOf.join();
System.out.println("Joined");
}
}
,但我不明白为什么。有人可以解释这些背后的想法吗?