program helloWorld
#include("stdlib.hhf");
begin helloWorld;
stdout.put("Hello, World of Assembly Language", nl);
end helloWorld;
.MODEL Small
.STACK 100h
.DATA
msg db 'Way to Go Why!$'
.CODE
start:
mov ah, 09h
lea dx, msg
int 21h
mov ax,4C00h
int 21h
end start

program Test;
#include ("stdlib.hhf")
static
input: int32;
begin Test;
forever
try
stdout.put("Enter an integer value: ");
stdin.get(input);
stdout.put("The first input value was: ", input,nl);
mov(0,eax);
sub(input, eax);
mov(eax, input);
stdout.put("The input value has been negated: ", input, nl);
unprotected
break;
exception(ex.ValueOutofRange)
stdout.put("The value entered was too large, reenter value." nl);
exception(e*****nversionError)
stdout.put( "The input contained illegal characters, reenter." nl);
endtry;
endfor;
stdout.put("Enter another number: ");
stdin.get(input);
mov(0,eax);
sub(input, eax);
mov(eax, input);
stdout.put("The input value has been negated: ", input, nl);
end Test;

Come on - Int 33h Mouse handling! 

.MODEL Small //Set the memory model to 'Small'
.STACK 100h //Set the stack size to 0x100;
.DATA //data segment
msg db 'Way to Go Why!$' //Define a string variable 'msg' with the text
.CODE //code segment
start: //start label
mov ah, 09h //Set Command for 'in21h' later on - 0x09 = write to stdout
lea dx, msg //Load Effective Address of message into DX (in C++ it'd be: DX = &msg);
int 21h //Print the Text
mov ax,4C00h //Set AX to value to use with int21h : 0x4C00h = exit program with return code 0 (AH = 0x4C and AL is return code in this case 0)
int 21h //Perform Exit Program
end start //end start label
mov ax,4C00h //Set AX to value to use with int21h :
mov 4C00h, ax
(You'd have to have a 16-bit linker to get that sample to work btw
)
The pointer explanation was just to 'visualize' the concept in familiar terms, so nothing to do with pointers,pointersize etc 

.386 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\masm32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\masm32.lib .data EnterValue db "Enter an integer value: ", 0 ValueWas db "The first input value was: ",0 Output db "The input value has been negated: ",0 endl db 13,10,0 .data? number dw 20 dup(?) .code start: invoke StdOut, addr EnterValue invoke StdIn, addr number, lengthof number invoke StdOut, addr ValueWas invoke StdOut, addr number invoke StdOut, addr endl invoke atol, addr number neg eax invoke dwtoa, eax, addr number invoke StdOut, addr Output invoke StdOut, addr number invoke StdOut, addr endl invoke ExitProcess, 0 end start
.386 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\kernel32.inc include \masm32\include\masm32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\masm32.lib .data EnterValue db "Enter an integer value: ", 0 ValueWas db "The first input value was: ",0 Output db "The input value has been negated: ",0 endl db 13,10,0 .data? number dw 20 dup(?) .code start: lea eax, EnterValue push eax call StdOut push lengthof number lea eax, number push eax call StdIn lea eax, ValueWas push eax call StdOut lea eax, number push eax call StdOut lea eax, endl push eax call StdOut lea eax, number push eax call atol neg eax lea ebx, number push ebx push eax call dwtoa lea eax, Output push eax call StdOut lea eax, number push eax call StdOut lea eax, endl push eax call StdOut push 0h call ExitProcess end start
00401010 >|> \8D05 00404000 LEA EAX,DWORD PTR DS:[404000] 00401016 |. 50 PUSH EAX ; /Arg1 => 00404000 ASCII "Enter an integer value: " 00401017 |. E8 0C010000 CALL 00401128 ; \StdOut 0040101C |. 6A 14 PUSH 14 ; /Arg2 = 00000014 0040101E |. 8D05 70414000 LEA EAX,DWORD PTR DS:[404170] ; | 00401024 |. 50 PUSH EAX ; |Arg1 => 00404170 00401025 |. E8 36010000 CALL 00401160 ; \StdIn 0040102A |. 8D05 19404000 LEA EAX,DWORD PTR DS:[404019] 00401030 |. 50 PUSH EAX ; /Arg1 => 00404019 ASCII "The first input value was: " 00401031 |. E8 F2000000 CALL 00401128 ; \StdOut 00401036 |. 8D05 70414000 LEA EAX,DWORD PTR DS:[404170] 0040103C |. 50 PUSH EAX ; /Arg1 => 00404170 0040103D |. E8 E6000000 CALL 00401128 ; \StdOut 00401042 |. 8D05 58404000 LEA EAX,DWORD PTR DS:[404058] 00401048 |. 50 PUSH EAX ; /Arg1 => 00404058 ASCII " " 00401049 |. E8 DA000000 CALL 00401128 ; \StdOut 0040104E |. 8D05 70414000 LEA EAX,DWORD PTR DS:[404170] 00401054 |. 50 PUSH EAX ; /s => "" 00401055 |. E8 46010000 CALL 004011A0 ; \atol 0040105A |. F7D8 NEG EAX 0040105C |. 8D1D 70414000 LEA EBX,DWORD PTR DS:[404170] 00401062 |. 53 PUSH EBX 00401063 |. 50 PUSH EAX 00401064 |. E8 57000000 CALL 004010C0 ; Test1.dwtoa 00401069 |. 8D05 35404000 LEA EAX,DWORD PTR DS:[404035] 0040106F |. 50 PUSH EAX ; /Arg1 => 00404035 ASCII "The input value has been negated: " 00401070 |. E8 B3000000 CALL 00401128 ; \StdOut 00401075 |. 8D05 70414000 LEA EAX,DWORD PTR DS:[404170] 0040107B |. 50 PUSH EAX ; /Arg1 => 00404170 0040107C |. E8 A7000000 CALL 00401128 ; \StdOut 00401081 |. 8D05 58404000 LEA EAX,DWORD PTR DS:[404058] 00401087 |. 50 PUSH EAX ; /Arg1 => 00404058 ASCII " " 00401088 |. E8 9B000000 CALL 00401128 ; \StdOut 0040108D |. 6A 00 PUSH 0 ; /ExitCode = 0 0040108F \. E8 22000000 CALL 004010B6 ; \ExitProcess