IA32汇编 - 访问参数

时间:2017-11-21 16:40:45

标签: c assembly x86 calling-convention

我正在汇编中实现直接映射缓存。我有一个C程序,它定义了一个函数check_cache(),我在一个单独的IA32程序集文件中实现它。该函数返回一个unsigned char值,并分别接受2个参数:line cache[4]unsigned char addrline 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个字节,因此可以使用cachemovl 8(%ebp), %ecx访问addr movb 9(%ebp), %cl shrb 。我是在正确的轨道上吗?另外,有没有办法检查我是否得到了正确的参数?

我的下一个问题是关于访问结构的成员。我被告知我可以使用andbvalid说明来访问tagblock[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"); } } ,但我不明白为什么。有人可以解释这些背后的想法吗?

0 个答案:

没有答案