Some of our members are active in 64-bit land, and I have a few questions to them:
- which assembler and/or package are you using?
1. Masm64 SDK (https://masm32.com/board/index.php?board=53.0)
2. UAsm (https://masm32.com/board/index.php?board=51.0) (download (http://www.terraspace.co.uk/uasm.html#p2))
3. AsmC (https://masm32.com/board/index.php?topic=948.msg81875#msg81875)
4. Dual 64- and 32-bit Assembly (https://masm32.com/board/index.php?topic=9266.msg111052#msg111052)
5. PoAsm (https://masm32.com/board/index.php?topic=5686.0)
6. Other: ...
- which include files (please provide links to the latest version)?
- which libraries (please provide links to the latest version)?
The reason for this survey is that there are several competing approaches, with pros and cons, and sooner or later we should work on one of them to make it easier for beginners to do their first steps in 64-bit land.
Please just reply to the questions, so that we can get a first impression who is doing what. The collection phase for this thread may take a week, since many members are not always active, so be patient.
To discuss the options, there is a separate thread called 64-bit Assembly: The Best Approach (https://masm32.com/board/index.php?topic=10951.0).
I will start the survey:
- No. 4, dual assembly (sometimes also No. 1, Masm64 SDK)
- include files provided with the package
- no specific libraries, i.e. WinAPI only
I admit that 90% of my coding is still in 32-bit land :tongue:
assembler:
- UAsm
- ML64
- JWasm
include files:
- ObjAsm Package (https://github.com/ObjAsm)
- Masm64 SDK, downloded 10/05/2022, with some macros updates, mostly Invoke (I have to see if Hutch included some modifications in JAN_20)
- no includes.
libraries:
- ObjAsm Package (https://github.com/ObjAsm).
- Masm64 SDK.
- No libraries.
:biggrin: Combined in that order!!
Just in case:
- UAsm with ObjAsm Package (https://github.com/ObjAsm), for big neutral bitness applications (but most working apps still are 32 bits).
- ML64 with Masm64 SDK, for developments, test and also some console applications.
- Jwasm, to develop small libraries (esentially for SmplMath) mostly without includes and libraries. So far, some tests are using Masm64 SDK library.
RadAsm 3
ml64
visual studio 2022 binaries
x86IDE:Binaries:- Microsoft (R) Macro Assembler Version 6.14.8444 (from MASM32 SDK v11)
- Microsoft (R) Incremental Linker Version 12.00.31101.0 (taken from a Visual Studio installation)
- Microsoft (R) Library Manager Version 12.00.31101.0 (taken from a Visual Studio installation)
- Microsoft (R) Windows (R) Resource Compiler Version 6.3.9600.17336 (taken from a dot net installation)
Support Files:- MASM32 SDK Includes
- MASM32 SDK Libraries
Debugger:- x64dbg (https://github.com/x64dbg/x64dbg)
x64IDE: - Radasm 2
- UASM-with-RadASM (https://github.com/mrfearless/UASM-with-RadASM)
Binaries: - UASM v2.56, Oct 25 2022, Masm-compatible assembler. (https://www.terraspace.co.uk/uasm.html)
- Microsoft (R) Incremental Linker Version 12.00.31101.0 (taken from a Visual Studio installation)
- Microsoft (R) Library Manager Version 12.00.31101.0 (taken from a Visual Studio installation)
- Microsoft (R) Windows (R) Resource Compiler Version 6.3.9600.17336 (taken from a dot net installation)
Support Files: - WinInc Includes (https://www.terraspace.co.uk/WinInc210.zip)
- Windows Kit Libraries / Windows SDK Libraries (https://developer.microsoft.com/en-us/windows/downloads/sdk-archive)
Debugger: - x64dbg (https://github.com/x64dbg/x64dbg)
- AsmC
- AsmC includes
- AsmC libs
- Linux operating system
- UASM
- No includes.
- The GNU C Library .
How do you code without any includes? Where do the values for all those symbolic constants come from?
Quote from: NoCforMe on July 15, 2023, 07:03:42 AM
How do you code without any includes? Where do the values for all those symbolic constants come from?
:biggrin: You make your own basic functions, and you write your own includes for that functions. That is true specially for libraries, but simple console programs can requiere very few external things (and can be made internals!).
Quote from: HSE on July 15, 2023, 07:31:47 AM
Quote from: NoCforMe on July 15, 2023, 07:03:42 AM
How do you code without any includes? Where do the values for all those symbolic constants come from?
:biggrin: You make your own basic functions, and you write your own includes for [those] functions.
OK, I just gotta ask: let's say you're doing some printing, and you need to get some printer info using the DeviceCapabilities() function, which you've never used before. So that means you've got to define the DEVMODE structure, which looks like this (in C, of course, which you'll have to translate to an asm STRUCT):
typedef struct _devicemode {
TCHAR dmDeviceName[CCHDEVICENAME];
WORD dmSpecVersion;
WORD dmDriverVersion;
WORD dmSize;
WORD dmDriverExtra;
DWORD dmFields;
union {
struct {
short dmOrientation;
short dmPaperSize;
short dmPaperLength;
short dmPaperWidth;
short dmScale;
short dmCopies;
short dmDefaultSource;
short dmPrintQuality;
};
struct {
POINTL dmPosition;
DWORD dmDisplayOrientation;
DWORD dmDisplayFixedOutput;
};
};
short dmColor;
short dmDuplex;
short dmYResolution;
short dmTTOption;
short dmCollate;
TCHAR dmFormName[CCHFORMNAME];
WORD dmLogPixels;
DWORD dmBitsPerPel;
DWORD dmPelsWidth;
DWORD dmPelsHeight;
union {
DWORD dmDisplayFlags;
DWORD dmNup;
};
DWORD dmDisplayFrequency;
#if (WINVER >= 0x0400)
DWORD dmICMMethod;
DWORD dmICMIntent;
DWORD dmMediaType;
DWORD dmDitherType;
DWORD dmReserved1;
DWORD dmReserved2;
#if (WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)
DWORD dmPanningWidth;
DWORD dmPanningHeight;
#endif
#endif
} DEVMODE, *PDEVMODE, *LPDEVMODE;
So you mean to tell me you're OK typing all that crap in (after translating it)? I couldn't imagine programming for Win32 without include files; that would truly be a pain in the ass. So why no includes?
Yet another reason for me to never, ever want to even go near 64-bit assembler!
:biggrin: :biggrin: In the end, the trick is: you don't use includes if you don't need them.
Anyway I'm going to tell you a secret, something new: you can copy and paste :thumbsup:
I only coded few programs made in the first halfbaked 64 bit instruction set: MMX
If i switch to 64 bit,should think best ways are
To switch to the 64 bit assembler used by most forum members to get most info teach/learn things between members
Worst choice would be end up the lonely road of the assembler only i want to use
Quote from: HSE on July 15, 2023, 07:31:47 AM
Quote from: NoCforMe on July 15, 2023, 07:03:42 AM
How do you code without any includes? Where do the values for all those symbolic constants come from?
:biggrin: You make your own basic functions, and you write your own includes for that functions. That is true specially for libraries, but simple console programs can requiere very few external things (and can be made internals!).
For structures, you may use the Convert C/C++ structure to MASM format (https://masm32.com/board/index.php?topic=10956.0) tool :thumbsup:
Quote from: NoCforMe on July 15, 2023, 10:29:29 AMSo that means you've got to define the DEVMODE structure
And you may some minor editing, depending on the complexity of the structure:
DEVMODE STRUCT
dmDeviceName TCHAR CCHDEVICENAME dup(<>)
dmSpecVersion WORD ?
dmDriverVersion WORD ?
dmSize WORD ?
dmDriverExtra WORD ?
dmFields DWORD ?
UNION
???? struct <>
dmOrientation SWORD ?
dmPaperSize SWORD ?
dmPaperLength SWORD ?
dmPaperWidth SWORD ?
dmScale SWORD ?
dmCopies SWORD ?
dmDefaultSource SWORD ?
dmPrintQuality SWORD ?
ENDS
???? struct <>
dmPosition POINTL <>
dmDisplayOrientation DWORD ?
dmDisplayFixedOutput DWORD ?
DEVMODE ENDS
.DATA?
align 16
devmode DEVMODE <>
But my question still remains, why would anyone want to not use includes? Isn't that like trying to run a race with heavy weights strapped to your feet? Is this some kind of "purity" thing?
I guess if you only wrote code that rarely uses any Windows GDI stuff it might make sense ...
Quote from: mabdelouahab on July 15, 2023, 06:55:42 AM
- Linux operating system
- UASM
- No includes.
- The GNU C Library .
Bold mine, for emphasis
Quote from: NoCforMe on July 16, 2023, 04:25:53 AM
But my question still remains, why would anyone want to not use includes? Isn't that like trying to run a race with heavy weights strapped to your feet? Is this some kind of "purity" thing?
I guess if you only wrote code that rarely uses any Windows GDI stuff it might make sense ...
mabdelouahab is running linux, not Windows. Also GNU C Library, possibly using parts of translated C headers (in source file==no includes)Maybe it is much different coding for linux than writing code for Windows. :icon_idea: Apples vs Oranges kind of thing.Perhaps mabdelouahab may come back and correct or verify my assumptions?.
Quote from: NoCforMe on July 16, 2023, 04:25:53 AM
But my question still remains, why would anyone want to not use includes?
:biggrin: You don't use a walking stick unless you need that.
Quote from: NoCforMe on July 16, 2023, 04:25:53 AM
I guess if you only wrote code that rarely uses any Windows GDI stuff it might make sense ...
Exactly :thumbsup:
Quote from: NoCforMe on July 16, 2023, 04:25:53 AM
But my question still remains, why would anyone want to not use includes?
I would vote for a compromise: create
one include file for the 100 most frequently used API calls, the 100 most frequently used structures and the 100 most frequently used equates. That would be one 60kBytes file, roughly, and it would be sufficient for 99.9% of your projects.
The problem is there are no statistics on API/structures/equates usage :sad:
P.S.: JBasic covers over 14,000 API calls, but there are many more, of course.
Wellll, for 32-bit stuff the MASM32 windows.inc file is 955K, and it seems to cover (almost) everything anyone would ever need. Why not have something like this for 64-bit as well? I assume people have done this already, right?
x64IDE:
- EmEditor (https://www.emeditor.com/ (https://www.emeditor.com/))
- AkelPad (x64) (https://akelpad.sourceforge.net/en/index.php (https://akelpad.sourceforge.net/en/index.php))
- Sublime Text 4 (Build 4143) (https://www.sublimetext.com/ (https://www.sublimetext.com/))
Binaries:
- Microsoft (R) Macro Assembler (x64) Version 14.33.31630.0 (taken from a Visual Studio installation)
- Microsoft (R) Incremental Linker Version 14.33.31630.0 (taken from a Visual Studio installation)
- Microsoft (R) Library Manager Version 14.33.31630 (taken from a Visual Studio installation)
- Microsoft (R) Windows (R) Resource Compiler Version 6.3.9600.17336 (Windows Kits\10\bin\x64)
Support Files:
- Includes and lib-files hand make
- lib-files from Visual Studio\...\VC\Tools\MSVC\...\lib\x64
- Includes from fasmw64\W7include64 (https://board.flatassembler.net/topic.php?t=13931 (https://board.flatassembler.net/topic.php?t=13931))
Debuggers:
- x64dbg (https://github.com/x64dbg/x64dbg (https://github.com/x64dbg/x64dbg))
- 64-bit OllyDbg v2.01 (https://www.ollydbg.de/odbg64.html (https://www.ollydbg.de/odbg64.html))
- WinDbg (https://aka.ms/windbg/download (https://aka.ms/windbg/download))
- GoAsm (also has x86 compatible mode for 32-bit assembly using 64-bit source code), GoRC, GoLink, x64dbg / Pelles C, EmEditor
- include files self-built using my xlatHinc (needs updating to handle 'stuff' in newer SDKs), or Donkey's Headers (latest goes back to around 2013).
- no libraries, GoLink resolves external symbols using the export symbols in the DLLs
QuotePerhaps mabdelouahab may come back and correct or verify my assumptions?
you are right :biggrin:
I suffered greatly from translation in lasmIDE (https://github.com/mabdelouahab/lasmIDE/tree/main/projects/lasmIDE/muasm) :sad:
Editors: from Visual Studio Community Edition 2022, Wordpad, Notepad
Assemblers: ml64, uasm
Includes: hand-typed, include64, WinInc
Debuggers: from Visual Studio Community Edition 2022, x64dbg
Quote from: mabdelouahab on July 16, 2023, 09:23:29 PMQuotePerhaps mabdelouahab may come back and correct or verify my assumptions?
you are right :biggrin:
I suffered greatly from translation in lasmIDE (https://github.com/mabdelouahab/lasmIDE/tree/main/projects/lasmIDE/muasm) :sad:
:thumbsup: I just saw this today. :biggrin:
Now we know why we see you on the forum sometimes, but not posting a lot. (Mostly Windows program code, etc. here)
Quote from: zedd151 on July 19, 2023, 07:23:58 AM:thumbsup: I just saw this today. :biggrin:
Now we know why we see you on the forum sometimes, but not posting a lot. (Mostly Windows program code, etc. here)
:biggrin:
I have posted a lot in the past like AsmDotNet64 (https://masm32.com/board/index.php?topic=6726.0) and Masm32Ref (https://masm32.com/board/index.php?topic=5028.0) and lasmIDE Cross-platform, but I did not find anyone interested, so why should I exhaust myself?
Quote from: mabdelouahab on July 19, 2023, 04:57:28 PMMasm32Ref (https://masm32.com/board/index.php?topic=5028.0)
If I remember well that was amazing :thumbsup:
seem to have missed a whole lot of whats gone on in the last month or two
but
ide:
notepad++
binaries etc :
mix of stuff similar to that described by Mikl and bits of Masm64.sdk
debugger:
Radare
didnt know olly 64 bit existed
regards mikeb
Editors: vi, nano, lasmIDE, Radasm, kate, mcedit.
Assemblers: uasm, jwasm, asmc, nasm, fasm, gas, solasm, masm, yasm, rosasm, tasm, ... . I tried all that I have seen.
Includes: windows, linux.
Debuggers: gdb, edb, radare2, Cutter, x64dbg, olly, ... .
Tools: grep, diff, wine (run windows programs in linux), h2incx, nm (export symbols from library, to quickly proto :vararg), objdump, gcc (to create some asm files (expand macros) from c source code and to preprocess some header files (defined constants)), ... .
qproto.sh
#!/bin/bash
export LC_ALL=C LANG=C
#if exist file tmp.tmp, delete file.
TMP=tmp.tmp
if test -f "$TMP"; then
rm tmp.tmp
fi
#empty first argument
if [ -z "$1" ]
then
echo "no input library, please copy dynamic library to same folder:"
echo "Usage:"
echo "./qproto.sh library.so library.inc"
echo "Example:"
echo "./qproto.sh libc.so.6 libc.inc"
exit 1
fi
#empy second argument
if [ -z "$2" ]
then
echo "no include filename"
exit 1
fi
for file in "$1" ; do
nm -D "$file" | while read num type name dummy ; do
[ "$type" = "T" ] || continue
# [ "$bind" = "GLOBAL" ] || continue
# [ "$num" = "$[$num]" ] || continue
# [ "$index" = "$[$index]" ] || continue
case "$name" in *)
# line bellow remove suffix from function names that starts with @ like @GLIBC_2.2.5 from libc
suffix="@"
newname=${name/%$suffix*}
#echo function name to file tmp.tmp
echo "${newname} proto :vararg" >> tmp.tmp
# printf '%s proto :vararg\n' "$newname" > $2
# printf '%s proto :vararg\n' "$name"
;;
esac
done
done
#remove duplicates, some function names have different glibc version used only.
sort -u tmp.tmp > $2
rm tmp.tmp
Write code on linux and port to windows count as cross development ?
I do cross development ,typing in code on my android tablet and assemble afterwards on pc
No, I don't think that counts as cross-development. Just cross-editing.
Quote from: daydreamer on July 21, 2023, 02:44:53 PMWrite code on linux and port to windows count as cross development ?
I do cross development ,typing in code on my android tablet and assemble afterwards on pc
Quote from: NoCforMe on July 21, 2023, 02:46:28 PMNo, I don't think that counts as cross-development. Just cross-editing.
I mean Cross-platform
(https://i.postimg.cc/N97hDL18/Lasm-Ide-Win.png) (https://postimg.cc/N97hDL18)
Hi mineiro,
QuoteAssemblers: uasm, jwasm, asmc, nasm, fasm, gas, solasm, masm, yasm, rosasm, tasm, .
Maybe I am missing something but Tasm does not offer any option to do 64-bit coding. It's limited only to 32-bit programming.
Yes sir Vortex, tasm was done to 32 bits, and was not updated.
Speaking of update, I found that some group is updating "Open Watcom"? If this is truth, it's a good news, they are updating support to arm too, so, more cross development can be done.
https://openwatcom.org/ (https://openwatcom.org/)
https://github.com/open-watcom/open-watcom-v2 (https://github.com/open-watcom/open-watcom-v2)
Quote from: mabdelouahab on July 19, 2023, 04:57:28 PMQuote from: zedd151 on July 19, 2023, 07:23:58 AM:thumbsup: I just saw this today. :biggrin:
Now we know why we see you on the forum sometimes, but not posting a lot. (Mostly Windows program code, etc. here)
:biggrin:
I have posted a lot in the past like AsmDotNet64 (https://masm32.com/board/index.php?topic=6726.0) and Masm32Ref (https://masm32.com/board/index.php?topic=5028.0) and lasmIDE Cross-platform, but I did not find anyone interested, so why should I exhaust myself?
I feel the same way coding/posting later avx2 256bitcode because many here has old cpu,but also biggest reason to not post 64bit program using big advantage of allocate 64gb,because old computers probably havent enough memory past 4gb so it futile
:sad:
Quote from: mabdelouahab on July 21, 2023, 05:24:11 PMI mean Cross-platform
(https://i.postimg.cc/N97hDL18/Lasm-Ide-Win.png) (https://postimg.cc/N97hDL18)
Do you have used msys2, msvc or downloaded from msys2 site the packages (extract, check dependencies, ...)?
Quote from: mineiro on July 21, 2023, 10:28:08 PMDo you have used msys2, msvc or downloaded from msys2 site the packages (extract, check dependencies, ...)?
yes sir mineiro, With some modifications in the source code
Before i retired from programming, x64 programming wasn't a problem, as i used Pelles C and C language.
Now in my days are just gardening and drinking beers :biggrin:
Thanks for all current moderators, this site is now clean from old BS :thumbsup:
idk why anyone would use anything other than VS... Brilliant debugger, even compile/debug asm, VB, C#, ... languages within the same project
Anyone tried android QuickEdit Text Editor?
What, on a phone?
My phone is a phone, not a general-use computah ...
GoAsm suite, I enjoy 32-bit coding and GoAsm aligns well with my simple coding practices.
Coincidentally, I have not mastered 64-bit stack alignment in GoAsm with COM calls yet. Maybe some day...
Notepad++, EasyCode, Notepad2, a hex editor, calculator, Photoshop, and Acrobat. Sumatra for epub files.
I like DirectDraw with full-screen, windowed programs and bitmapped graphics. 100% assembly on my end. Always.
Alway-open reference: Win32.hlp, AMD or Intel manual, DirectX, and SSE info
Three monitors, so two are usually filled with reference, etc.
Or, one for reference and one for moonlight ocean waves video.
Computer = one of those minis with Win 11, 32 GB, 8 cores, 4Kx4 video, wifi, and SSD- and USB-everything. I just love it!
Include files don't bog this thing down a bit. Nothing seems to. 250+ processes is... about normal.
Opinion: I really held my nose with getting win 11. And, to my surprise? IMO, it is the best Windows ever. Really, really good. And I loved 7. This is better and then some.
Quote from: jj2007 on July 14, 2023, 06:55:19 PMSome of our members are active in 64-bit land, and I have a few questions to them:
- which assembler and/or package are you using?
EuroAssembler (https://euroassembler.eu/eadoc/#ShortCharacteristic)
Quote from: jj2007 on July 14, 2023, 06:55:19 PM- which include files (please provide links to the latest version)?
wins*.htm (https://euroassembler.eu/maclib/), extended as needed.
Quote from: jj2007 on July 14, 2023, 06:55:19 PM- which libraries (please provide links to the latest version)?
No third-party, only macrolibraries extended every now and then, as the life goes on.
winabi.htm (https://euroassembler.eu/maclib/winabi.htm)
Project - SoundFont2 Synthesizer. Uses AVX256 and FMA. The application can use Multiple SoundFonts, that altogether can be 10-15Gb or more.
IDE - Visual Studio 2022 + ASMDude 2022
Assembler - ml64
Win64 Include/Libraries - create based on requirement.
Debugger Visual Studio 2022 + ASMDude 2022
Visual Studio + ASMDude is awesome
The libraries are created on pre-build VS event. For my project this seems convenient as I don't have many API calls. Additionally, I have few helper macros.
(https://i.postimg.cc/XZy5ZqRp/image.png) (https://postimg.cc/XZy5ZqRp)
(https://i.postimg.cc/GHHm3Vwp/image.png) (https://postimg.cc/GHHm3Vwp)
(https://i.postimg.cc/s103LmQC/image.png) (https://postimg.cc/s103LmQC)
Now I am using Github copilot-Free with VS2022 to develop in ASM. The copilot helps a lot in writing ASM code, specially it is able to predict code based on local variables and declarations. Now the VS2022 + ASM Dude + github copilot is the best programming experience for me. I encourage others to try it out, you won't regret it other than worrying about code being shared with MS.
Quote from: VCoder on March 11, 2025, 12:25:23 AMyou won't regret it other than worrying about code being shared with MS.
:eusa_naughty: :eusa_naughty: :eusa_naughty:
Well that just won't do at all. Microsoft certainly does not like sharing its source codes, until at least the product is well past its end of life and deprecated. I do not want to share mine with anyone that is not of my own choosing. :tongue:
Just kidding, vcoder. Whatever makes the job easier for you. :thumbsup:
Just know that AI generated code often has flaws. I have experimented with a few flavors of AI for code generation, Google Gemini, ChatGPT and MS copilot. None of them 'tasted' very good to me. Not sure if github copilot would be much different than the others, in that respect.
Quote from: zedd151 on March 11, 2025, 12:36:25 AMJust know that AI generated code often has flaws. I have experimented with quite a few flavors of AI for code generation. None of them 'tasted' very good to me. Not sure if github copilot would be much different than the others, in that respect.
It will be in a form code suggestions, you can accept it or ignore it. Enhanced intellisence!!!
For example, if you have
pBuffer dd ?
fHandle dd ?
FileName db "c:\myfile.txt",0
ReadFile proc
..from this line copilot will suggest each line by line based on the above context. If you have some error handling macros, it will also use that when suggesting the code after API calls.
Try and see, since it is free.
Quote from: VCoder on March 11, 2025, 01:08:21 AMTry and see, since it is free.
Maybe, one day.... I might just take a look and see.
GitHub's copilot is probably more tailored for coding than the general purpose AI models, I am assuming.
My AI coding experiments, in brief (https://masm32.com/board/index.php?topic=12455.0) in case you are interested, vcoder. Around only a 25% success rate, iirc. For most (75%), the results were not correct, even though compiling (for C code) or assembling (for assembly source) usually went ok. And ran without any exceptions being thrown at me.