This commit is contained in:
2023-11-08 14:27:21 +00:00
commit f39b67e87d
32 changed files with 238 additions and 0 deletions

BIN
add_and_subtract Executable file

Binary file not shown.

26
add_and_subtract.hla Normal file
View File

@@ -0,0 +1,26 @@
program AddAndSub;
#include("stdlib.hhf")
static
eight_bit_integer: int8 := 7;
begin AddAndSub;
stdout.put
(
nl,
"Initialized values: eight_bit_integer=",
eight_bit_integer,
nl
);
mov( 0, dh ); // `al` is an eight-bit register
sub( eight_bit_integer, dh ); // `al` minus `eight_bit_integer`
mov( dh, eight_bit_integer ); // this should be -7
stdout.put(nl, "Now eight_bit_integer = ", eight_bit_integer, nl);
// add( 135, eight_bit_integer);
// stdout.put(nl, "Now eight_bit_integer = ", eight_bit_integer, nl);
end AddAndSub;

BIN
add_and_subtract.o Normal file

Binary file not shown.

BIN
dec Executable file

Binary file not shown.

12
dec.hla Normal file
View File

@@ -0,0 +1,12 @@
program ConvertToDecimal;
#include("stdlib.hhf")
static
value: int32;
begin ConvertToDecimal;
stdout.put("Input a hex value: ");
stdin.get(eax);
mov(eax, value);
stdout.put("The value $", eax, " converted to decimal is ", value, nl);
end ConvertToDecimal;

BIN
dec.o Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
fasm_with_tsoding/hello Executable file

Binary file not shown.

View File

@@ -0,0 +1,34 @@
format ELF64 executable
STDOUT = 1
HAPPY_EXIT_CODE = 1
SYSCALL_EXIT = 60
SYSCALL_WRITE = 1
macro print fd, buf, len
{
mov rax, SYSCALL_WRITE ; 1 -> write, which takes three arguments (below)
mov rdi, fd
mov rsi, buf
mov rdx, len
syscall
}
macro exit code
{
mov rax, SYSCALL_EXIT
mov rdi, HAPPY_EXIT_CODE
syscall
}
segment readable executable
entry main
main:
print STDOUT, msg, msg_len
exit 1
segment readable writeable
msg db "Hello, World!", 10
msg_len db $ - msg

BIN
fasm_with_tsoding/server Executable file

Binary file not shown.

View File

@@ -0,0 +1,49 @@
format ELF64 executable
STDOUT = 1
HAPPY_EXIT_CODE = 0
SYSCALL_EXIT = 60
SYSCALL_WRITE = 1
SYSCALL_SOCKET = 41
AF_INET = 2
SOCK_STREAM = 1
macro print buf, len
{
mov rax, SYSCALL_WRITE ; 1 -> write, which takes three arguments (below)
mov rdi, STDOUT
mov rsi, buf
mov rdx, len
syscall
}
macro exit code
{
mov rax, SYSCALL_EXIT
mov rdi, code
syscall
}
macro socket domain, type, protocol
{
mov rax, SYSCALL_SOCKET
mov rdi, domain
mov rsi, type
mov rdx, protocol
syscall
}
segment readable executable
entry main
main:
print msg, msg_len
socket AF_INET, SOCK_STREAM, 0
mov dword [socket_fd], eax
print [socket_fd], 32
exit HAPPY_EXIT_CODE
segment readable writeable
msg db "Starting web server!", 10
msg_len db $ - msg
socket_fd dd 0

View File

@@ -0,0 +1,10 @@
1) install fasm ([link](https://flatassembler.net/download.php))
```bash
sudo apt install build-essential manpages-dev software-properties-common
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update && sudo apt install gcc-11 g++-11
```
1) `sudo apt install libx11-dev`
1) install gdb
1) install [gf](git clone https://github.com/nakst/gf.git)

BIN
hello Executable file

Binary file not shown.

8
hello.hla Normal file
View File

@@ -0,0 +1,8 @@
program helloWorld;
#include( "stdlib.hhf" );
begin helloWorld;
stdout.put( "Hello, World of Assembly Language" nl );
end helloWorld;

BIN
hello.o Normal file

Binary file not shown.

BIN
hex Executable file

Binary file not shown.

12
hex.hla Normal file
View File

@@ -0,0 +1,12 @@
program ConvertToHex;
#include("stdlib.hhf")
static
value: int32;
begin ConvertToHex;
stdout.put("Input a decimal value: ");
stdin.get(value);
mov(value, eax);
stdout.put("The value ", value, " converted to hex is $", eax, nl);
end ConvertToHex;

BIN
hex.o Normal file

Binary file not shown.

BIN
logical_ops Executable file

Binary file not shown.

13
logical_ops.hla Normal file
View File

@@ -0,0 +1,13 @@
program LogicalOp;
#include("stdlib.hhf")
begin LogicalOp;
stdout.put( "Input left operand: "); // 5 -> 0000_0000_0000_0101
stdin.get( eax );
stdout.put( "Input right operand: ");
stdin.get( ebx ); // 15 -> 0000_0000_0000_1111
stdout.put( "$", eax, " xor $", ebx, " = $");
// mov (eax, ecx );
xor (eax, ebx );
stdout.put( ebx, nl); // 10
end LogicalOp;

BIN
logical_ops.o Normal file

Binary file not shown.

20
sign_extension.hla Normal file
View File

@@ -0,0 +1,20 @@
program signExtension;
#include( "stdlib.hhf" )
static
i8: int8;
i16: int16;
i32: int32;
begin signExtension;
stdout.put("Enter a small negative number: ");
stdin.get(i8);
stdout.put(nl, "Sign extension using CBW and CWDE:", nl, nl);
mov(i8, al);
stdout.put("You entered ", i8, " ($", al, ")", nl);
cbw(); // ??? must be sign extending the value in `al` to `ax`
mov(ax, i16);
stdout.put("16-bit sign extension: ", i16, " ($", ax, ")", nl);

BIN
twos_complement Executable file

Binary file not shown.

25
twos_complement.hla Normal file
View File

@@ -0,0 +1,25 @@
program twosComplement;
#include("stdlib.hhf")
static
pos_value: int8;
neg_value: int8;
begin twosComplement;
stdout.put( "Enter an integer between 0 and 127: " );
stdin.get( pos_value );
stdout.put( nl, "Value in hex: $" );
stdout.puth8( pos_value );
mov( pos_value, al );
// not ( al );
// stdout.put( nl, "Invert all the bits: $", al, nl);
// add( 1, al );
neg( al );
// stdout.put( "Add one: $", al, nl );
mov( al, neg_value );
stdout.put( nl, "Result in decimal: ", neg_value, nl);
end twosComplement;

BIN
twos_complement.o Normal file

Binary file not shown.

BIN
variables Executable file

Binary file not shown.

15
variables.hla Normal file
View File

@@ -0,0 +1,15 @@
program Vars;
#include( "stdlib.hhf" )
static
MyNum: int8 := 42;
NumNotInitialized: int8;
begin Vars;
stdout.put( "MyNum = ", MyNum, nl);
stdout.put( "Enter an integer value: " );
stdin.get(NumNotInitialized);
stdout.put( "You entered '", NumNotInitialized, "'", nl );
end Vars;

BIN
variables.o Normal file

Binary file not shown.

BIN
zero_extension Executable file

Binary file not shown.

14
zero_extension.hla Normal file
View File

@@ -0,0 +1,14 @@
program zero_extension;
#include("stdlib.hhf")
static
magic_num: int8 := 42;
magic_num_16: int16;
begin zero_extension;
mov(magic_num, al);
mov(0, ah);
mov(ax, magic_num_16);
stdout.put("magic_num_16 = ", magic_num_16); // should be 42
end zero_extension;

BIN
zero_extension.o Normal file

Binary file not shown.