whlll‘s jasmin教程

本文是whlll关于Jasmin的教程,旨在帮助读者搭建Jasmin环境,理解基本编译操作,并通过实例展示如何从Java代码转为Jasmin程序。教程包括Jasmin的环境搭建、编译步骤和Java字节码到Jasmin的转换规则,适合应对课程任务或对汇编语言感兴趣的读者。
摘要由CSDN通过智能技术生成

@whlll’s Jasmin

Jasmin

这篇文章主要教你jasmin的环境的搭建,基本编译语法,以及如何从java快速编写jasmin程序,以应付课程任务,鉴于网上相关资源太少,也没什么人研究这个,写自己的第一篇Blog,回忆一下jasmin的学习过程吧0.0

jasmin环境搭建与基本编译操作:
首先您只需要支付5积分便可从我分享的资源下载jasmin并获得本人编写的部分jasmin例程供你学习.链接附文章末尾

准备工作:下载jdk并配置好环境变量,命令行输入java --version检查是否成功jdk安装验证

jasmin内部文件+examples例程:
jasmin软件examples例程

编译步骤:

  1. win+R 输入cmd打开命令行操作界面,打开jasmin文件夹所在目录:这里我将它放在D下方便操作
  2. 输入:java -jar jasmin.jar examples\q2.j(ps:q2.j为笔者所写的冒泡排序)编译,(Generated编译成功)生成class执行文件.编译
  3. 输入:java q2运行(q2对应代码中的q2类,如果代码中你给debug,那么它编译之后便生产的debug.class可执行文件)
.class public q2
.super java/lang/Object

.method public <init>()V
   aload_0
   invokenonvirtual java/lang/Object/<init>()V
   return
.end method

.method public static main([Ljava/lang/String;)V
.limit locals 20
.limit stack 10

new java/util/Scanner
dup
getstatic java/lang/System.in Ljava/io/InputStream;
invokespecial java/util/Scanner/<init>(Ljava/io/InputStream;)V
astore_0

bipush 10
newarray int
astore_1

iconst_0
istore_2

ldc "input:"
getstatic java/lang/System/out Ljava/io/PrintStream;
swap
invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V
Loadarray:
aload_0
invokevirtual java/util/Scanner/nextInt()I
istore_3

aload_1
iload_2
iload_3
iastore

iinc 2 1

iload_2
bipush 10
if_icmplt Loadarray

bubsort:
aload_1
arraylength
istore 4

iload 4
bipush 1
isub
istore 11

iconst_0
istore 5

Loop_1:
iconst_0
istore 6

iload 5
iload 4
if_icmplt Loop_2
goto output
Loop_2:
iload 11
iload 5
isub
istore 10

iload 6
iload 10
if_icmplt exchange_judge
goto else_1
exchange_judge:
aload_1
iload 6
iaload

iload 6
bipush 1
iadd
istore 7

aload_1
iload 7
iaload

if_icmpgt exchange
goto else_2
exchange:
aload_1
iload 6
iaload
istore 8

aload_1
iload 7
iaload
istore 9

aload_1
iload 6
iload 9
iastore

aload_1
iload 7
iload 8
iastore
goto else_2

else_1:
iinc 5 1
goto Loop_1

else_2:
iinc 6 1
goto Loop_2

output:
ldc "order:"
jsr Print
iconst_0
istore 12
Loop_3:
aload_1
iload 12
iaload
istore 13
getstatic java/lang/System.out Ljava/io/PrintStream;
iload 13
invokevirtual java/io/PrintStream/print(I)V
ldc " "
jsr Print
iinc 12 1
iload 12
bipush 10
if_icmplt Loop_3

ldc " whlll  "
jsr Print
ldc " 19041420  "
jsr Print

return
Print:
astore 2
getstatic java/lang/System/out Ljava/io/PrintStream;
swap
invokevirtual java/io/PrintStream/print(Ljava/lang/String;)V
ret 2

.end method

请忽视笔者的学号姓名0.0
4.运行结果:运行结果
So easy!

当你会java后,情况就变得不一样了:
当你有一个约瑟夫环的java代码+javap
约瑟夫环 java:

package YSF;

import java.util.Iterator;
import java.util.Scanner;

/*
 * 500个小孩围一圈,数到3的退出,问剩下最后的小孩原来是多少号?
 * author@
 * */
public class YueSeFuHuan
{
   
	public static void main(String[]
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值