Hội đồng mã hóa JVM (thông qua Jasmin ) - 952 960 990
.class public Q
.super java/io/File
.method public static main([Ljava/lang/String;)V
.limit stack 9
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc ".class public Q%n.super java/io/File%n.method public static main([Ljava/lang/String;)V%n.limit stack 9%ngetstatic java/lang/System/out Ljava/io/PrintStream;%nldc %c%s%c%nldc 3%nanewarray java/lang/Object%ndup%ndup%nldc 0%nldc 34%ninvokestatic java/lang/Integer/valueOf(I)Ljava/lang/Integer;%ndup_x2%naastore%nldc 2%nswap%naastore%ndup2%nswap%nldc 1%nswap%naastore%ninvokevirtual java/io/PrintStream/printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;%npop%nreturn%n.end method"
ldc 3
anewarray java/lang/Object
dup
dup
ldc 0
ldc 34
invokestatic java/lang/Integer/valueOf(I)Ljava/lang/Integer;
dup_x2
aastore
ldc 2
swap
aastore
dup2
swap
ldc 1
swap
aastore
invokevirtual java/io/PrintStream/printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
pop
return
.end method
Đáng buồn thay, Jasmin không cho phép nhiều thủ thuật hay như Microsoft ilasm
cho phép. Nhưng JVM có tổng cộng sáudup
hướng dẫn khác nhau thực hiện tất cả các loại điều thú vị. Sắp xếp lại các mục trên ngăn xếp là điều mà .NET dường như không hỗ trợ.
Trong mọi trường hợp, tôi đoán không có mục nào trong hai mục của tôi là ứng cử viên nghiêm trọng cho mã ngắn nhất nhưng tôi đoán thật khó để làm cho chúng ngắn hơn nhiều. Do đó, chỉ để hoàn thiện :-)
Phiên bản đã nhận xét với thông tin về những gì trên ngăn xếp:
.class public Q
.super java/io/File
.method public static main([Ljava/lang/String;)V
.limit stack 9
getstatic java/lang/System/out Ljava/io/PrintStream;
ldc ".class public Q%n.super java/io/File%n.method public static main([Ljava/lang/String;)V%n.limit stack 9%ngetstatic java/lang/System/out Ljava/io/PrintStream;%nldc %c%s%c%nldc 3%nanewarray java/lang/Object%ndup%ndup%nldc 0%nldc 34%ninvokestatic java/lang/Integer/valueOf(I)Ljava/lang/Integer;%ndup_x2%naastore%nldc 2%nswap%naastore%ndup2%nswap%nldc 1%nswap%naastore%ninvokevirtual java/io/PrintStream/printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;%npop%nreturn%n.end method"
ldc 3 ; stack; System.out, string, 3
anewarray java/lang/Object ; stack: System.out, string, Object[3]
dup
dup ; stack: System.out, string, array, array, array
ldc 0 ; stack: System.out, string, array, array, array, 0
ldc 34 ; stack: System.out, string, array, array, array, 0, 34
invokestatic java/lang/Integer/valueOf(I)Ljava/lang/Integer;
dup_x2 ; stack: System.out, string, array, array, 34, array, 0, 34
aastore ; stack: System.out, string, array, array, 34
ldc 2 ; stack: System.out, string, array, array, 34, 2
swap ; stack: System.out, string, array, array, 2, 34
aastore ; stack: System.out, string, array
dup2 ; stack: System.out, string, array, string, array
swap ; stack: System.out, string, array, array, string
ldc 1 ; stack: System.out, string, array, array, string, 1
swap ; stack: System.out, string, array, array, 1, string
aastore ; stack: System.out, string, array
invokevirtual java/io/PrintStream/printf(Ljava/lang/String;[Ljava/lang/Object;)Ljava/io/PrintStream;
pop
return
.end method
Lịch sử:
- 2011/02/07 02:09 (990) - Phiên bản làm việc đầu tiên.
- 2011/02/07 02:11 (960) -
ldc
ngắn hơn bipush
hoặc iconst_*
.
- 2011/02/07 02:30 (952) - Ai nói tôi cần thừa kế từ java.lang.Object? Tên lớp khác ngắn hơn rất nhiều :-)