npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

hasm

v0.1.31

Published

Right now this package is designed to only work on 64bit Windows, I plan to make it work on Linux eventually, and if all goes well other other platforms as well.

Downloads

18

Readme

HASM

Right now this package is designed to only work on 64bit Windows, I plan to make it work on Linux eventually, and if all goes well other other platforms as well.

I have only tested it on Intel CPU, but it should work fine on AMD CPUs as well, also I'm only testing this package on node v11.0.0, but older versions should work as well.

This package is heavy work in progress, expect things to not work correctly and compatibility to be broken often.

Disclaimer

This package compiles code directly to "runtime" ASM, this means that it has raw access to the CPU, it can do anything you can do in compiled languages such as C, C++ etc... this means that it can cause a lot of issues, basically it can do anything, so there is no guarantee that it is be stable or safe to use.

I'm not responsible for any damage this package can cause.

License

I haven't decided on the license for the package yet, right now you can use anything as if it were public domain, not that there is much anyway, but this will change in the future and there will be a proper license.

How to use

For all of the example I will be using TypeScript.

So let's start with an example.

import { Native, ASMBuilder, VarType, JumpType } from "hasm";
const CodeArray = Native.ExecutableArrayBuffer(1 << 24);
const CodeContainer = new Uint8Array(CodeArray);

let retRegister = 0;
let arg0 = 1;
let arg1 = 2;

let temp5 = 15;

let asm = new ASMBuilder();
let exitLabel = asm.label(); // create a label for :loop
let loopLabel = asm.label(); // create a label for :exit

asm.clear(VarType.Int, retRegister); // clear return register
asm.move(VarType.Int, temp5, arg1); // move int from arg1 to temp5

asm.testAnd(VarType.Int, temp5); // setup AND test for temp5
asm.jump(JumpType.JZ, exitLabel); // if temp5 === 0 jump to :exit
loopLabel.here(); // :loop
asm.add(VarType.Int, retRegister, arg0); // arg0++
asm.decrement(VarType.Int, temp5); // temp5--
asm.jump(JumpType.JNZ, loopLabel); // if temp5 !== 0 jump to :loop
exitLabel.here(); // :exit
asm.return(); // return

// convert the function to bytes
let bytes = asm.asBytes();
// copy function bytes to the executable array CodeContainer
CodeContainer.set(bytes, 0);

// execute function from CodeContainer at offset 0 with arguments 1, 10000
let ret = Native.Execute(CodeArray, 0, 1, 10000); // 10000
console.log(ret); // 10000