The Wiert Corner – irregular stream of stuff

Jeroen W. Pluimers on .NET, C#, Delphi, databases, and personal interests

  • My badges

  • Twitter Updates

  • My Flickr Stream

  • Pages

  • All categories

  • Enter your email address to subscribe to this blog and receive notifications of new posts by email.

    Join 1,862 other subscribers

Archive for the ‘Software Development’ Category

Deploy .NET Framework 3.5 by using Deployment Image Servicing and Management (DISM) instead of Chocolatey and some notes on PowerShell colours

Posted by jpluimers on 2025/01/07

Since every now and then, like testing software developed with older tools, you need to run older software.

This always works: [Wayback /Archive] Deploy .NET Framework 3.5 by using Deployment Image Servicing and Management (DISM) | Microsoft Learn

DISM /Online /Enable-Feature /FeatureName:NetFx3 /All

Use /All to enable all parent features of the specified feature.

(The /All is needed because software requiring .NET Framework 3.5 also require the parent features).

Notes:

  • Tested on Windows 10 and Windows 11 in 2022.
  • It can take a really long time (more than just a few minutes!) even on fast connections.
  • Installing through Chocolatey with `choco install dotnet3.5 fails on Windows 11 (have not tried on Windows 10) with the classical red on black PowerShell default error theme*:

    ERROR: The term 'wmic' is not recognized as the name of a cmdlet, function, script file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct and try again.
    The install of DotNet3.5 was NOT successful.
    Error while running 'C:\ProgramData\chocolatey\lib\DotNet3.5\Tools\ChocolateyInstall.ps1'.

Read the rest of this entry »

Posted in .NET, .NET 3.0, .NET 3.5, C#, Chocolatey, Development, Power User, PowerShell, Software Development, Windows, Windows 10, Windows 11 | Leave a Comment »

Getting the list of vscode extensions when it upgraded to a version not supported on the platform any more (and packing your extensions in a .vsix list package)

Posted by jpluimers on 2025/01/02

While moving from ancient hardware to more modern hardware, somehow Visual Studio Code had updated itself to a version that didn’t support the underlying operating system any more. Bummer!

Normally I would get the list of extensions through this command (which is listed in many places, like in my blog post How can you export the Visual Studio Code extension list? (via: Stack Overflow), but also for instance answered in the below question by [WaybackSave/Archive] Benny Ng):

code --list-extensions

That obviously would not work, but thanks to [Wayback/Archive] How can you export the Visual Studio Code extension list? – Stack Overflow (thanks [Wayback/Archive] Andrew and [Wayback/Archive] MarkP) I now could do this:

ls -alh ~/.vscode/extensions

(That directory obviously is also in various forms of official documentation like in the the Your Extensions Folder section of [Wayback/Archive] Publishing Extensions | Visual Studio Code Extension API.

A comment to the above question pointed me to an interesting way to automate extension installs on various machines: pack the installed extension list into its own .vsix file:

Read the rest of this entry »

Posted in Development, Software Development, vscode Visual Studio Code | Leave a Comment »

Old programming books had cool little “puns” in their references, modern lack them in their indices. On the why, and history of them.

Posted by jpluimers on 2025/01/01

I wrote a two earlier blog posts around puns in programming book indices before:

  1. the 1992 Turbo Pascal 7.0 Language Guide having both entry in the manual about Recursion (“recursive loop, see recursive loop”) which of course is similar to “infinite loop” and entries for “infinite loop See loop, infinite” and “loop, infinite See infinite loop”.
  2. infinite loop in “LaTeX: A Document Preparation System” by Leslie Lamport, printed in 1994.

In the last one, I promised to list more occurrences which I now finally had time for to do.

But let me first elaborate more on the observation that modern computer books (like for instance on C# and Delphi beyond version 1) lack these kinds of index pun.

On the Delphi side, the index entry joke for recursion got removed no later than Delphi 3 (I am still looking for a Delphi 2 version of the Object Pascal Language Guide, see further below) even before the book being fully redone electronically and the index pages generation being automated in

I think I even understand why that is: the process of creating of indices. By the start of this century, more and more indices were automatically being generated and for the last 2 decades or so, all of them are. Back in the days however, indices were mostly done by hand. Nowadays, with everything automated, it is actually pretty tricky in most environments to add such an “infinite loop” index entry like in the Turbo Pascal book, as it would require two things at once:

Read the rest of this entry »

Posted in .NET, C, C#, C++, Conference Topics, Conferences, Delphi, Delphi 1, Delphi 2, Development, EKON, Event, History, LaTeX, LifeHacker, LISP, Mathematics, Pascal, Perl, PL/I (a.k.a. PL/1), Power User, science, Software Development, Turbo Pascal, Typesetting | Tagged: , | 4 Comments »

Uncommon Uses of Python in Commonly Used Libraries

Posted by jpluimers on 2025/01/01

For my link archive as it will help me when ready to step up my Python skills: [Wayback/Archive] Uncommon Uses of Python in Commonly Used Libraries.

Via: [Wayback/Archive] Julia Evans on Twitter: “i love this kind of researchy blog post (“i read a bunch of python libraries, here’s what i learned!”)

Read the rest of this entry »

Posted in Development, Python, Scripting, Software Development | Leave a Comment »

A truckload of links which I need for some Bookmarklets work

Posted by jpluimers on 2024/12/31

A while ago, browser tabs were overflowing again so I first mad the list of links with quotes below, then discovered there is a template for many browser tabs open at [Wayback/Archive] To many browser tabs open Meme Generator – Imgflip

One of the reasons is that the WordPress “Press This” bookmarklet is very slow and also flaky at escaping HTML (for instance the below html – Why shouldn’t &amp;apos; be used to escape single quotes? – Stack Overflow sometimes becomes html – Why shouldn’t <code>'</code> be used to escape single quotes? – Stack Overflow in [Wayback/Archive] Press This – WordPress plugin | WordPress.org especially when running it from Archive Today archived pages).

So here we go: Read the rest of this entry »

Posted in Bookmarklet, Development, HTML, HTML5, JavaScript/ECMAScript, Power User, Scripting, Software Development, Web Browsers, Web Development | Leave a Comment »

HInvoke and avoiding PInvoke | drakonia’s blog

Posted by jpluimers on 2024/12/26

On my research list [Wayback/Archive] HInvoke and avoiding PInvoke | drakonia’s blog.

A very minimalistic approach of calling .net runtime functions or accessing properties using only hashes as identifiers. It does not leave any strings or import references since we dynamically resolve the required member from the mscorlib assembly on runtime.

Read the rest of this entry »

Posted in .NET, C#, Development, Encryption, Hashing, Power User, Red team, Security, Software Development | Tagged: , , , , , , , | Leave a Comment »

x86 assembly – Difference between JE/JNE and JZ/JNZ – Stack Overflow

Posted by jpluimers on 2024/12/25

This brought back memories of some 40 years ago during my first steps learning x86 assembly language, realising the first comment: [Wayback/Archive] assembly – Difference between JE/JNE and JZ/JNZ – Stack Overflow

Q

In x86 assembly code, are JE and JNE exactly the same as JZ and JNZ?

C

Long answer: yes.

C

TL:DR: same machine operation, different semantic meaning. Just like jb / jc / jnae all testing CF=1. See felixcloutier.com/x86/jcc

Merry X-mas everyone!

And thanks [Wayback/Archive] Daniel Hanrahan for asking, [Wayback/Archive] Hans Passant and [Wayback/Archive] Peter Cordes for commenting.

Be sure to read the rest of the comments and answers to read on the WHY these instructions are the same. That insight made me realise I was finally understanding the x86 architecture at a deeper level.

Related:

  • [WaybackSave/Archive] Intel® 64 and IA-32 Architectures Software Developer’s Manual Combined Volumes 2A, 2B, 2C, and 2D: Instruction Set Reference, A-Z
  • [Wayback/Archive] Jcc — Jump if Condition Is Met

    Sorted by Opcode column (with a little bit of help from Excel, Notepad++ and [Wayback/Archive] HTML Tables generator – TablesGenerator.com; then bolded or italicised the Description column of equivalent entries:

    Opcode Instruction Op/En 64-Bit Mode Compat/Leg Mode Description
    0F 80 cd JO rel32 D Valid Valid Jump near if overflow (OF=1).
    0F 80 cw JO rel16 D N.S. Valid Jump near if overflow (OF=1). Not supported in 64-bit mode.
    0F 81 cd JNO rel32 D Valid Valid Jump near if not overflow (OF=0).
    0F 81 cw JNO rel16 D N.S. Valid Jump near if not overflow (OF=0). Not supported in 64-bit mode.
    0F 82 cd JB rel32 D Valid Valid Jump near if below (CF=1).
    0F 82 cd JC rel32 D Valid Valid Jump near if carry (CF=1).
    0F 82 cd JNAE rel32 D Valid Valid Jump near if not above or equal (CF=1).
    0F 82 cw JB rel16 D N.S. Valid Jump near if below (CF=1). Not supported in 64-bit mode.
    0F 82 cw JC rel16 D N.S. Valid Jump near if carry (CF=1). Not supported in 64-bit mode.
    0F 82 cw JNAE rel16 D N.S. Valid Jump near if not above or equal (CF=1). Not supported in 64-bit mode.
    0F 83 cd JAE rel32 D Valid Valid Jump near if above or equal (CF=0).
    0F 83 cd JNB rel32 D Valid Valid Jump near if not below (CF=0).
    0F 83 cd JNC rel32 D Valid Valid Jump near if not carry (CF=0).
    0F 83 cw JAE rel16 D N.S. Valid Jump near if above or equal (CF=0). Not supported in 64-bit mode.
    0F 83 cw JNB rel16 D N.S. Valid Jump near if not below (CF=0). Not supported in 64-bit mode.
    0F 83 cw JNC rel16 D N.S. Valid Jump near if not carry (CF=0). Not supported in 64-bit mode.
    0F 84 cd JE rel32 D Valid Valid Jump near if equal (ZF=1).
    0F 84 cd JZ rel32 D Valid Valid Jump near if 0 (ZF=1).
    0F 84 cd JZ rel32 D Valid Valid Jump near if 0 (ZF=1).
    0F 84 cw JE rel16 D N.S. Valid Jump near if equal (ZF=1). Not supported in 64-bit mode.
    0F 84 cw JZ rel16 D N.S. Valid Jump near if 0 (ZF=1). Not supported in 64-bit mode.
    0F 84 cw JZ rel16 D N.S. Valid Jump near if 0 (ZF=1). Not supported in 64-bit mode.
    0F 85 cd JNE rel32 D Valid Valid Jump near if not equal (ZF=0).
    0F 85 cd JNZ rel32 D Valid Valid Jump near if not zero (ZF=0).
    0F 85 cw JNE rel16 D N.S. Valid Jump near if not equal (ZF=0). Not supported in 64-bit mode.
    0F 85 cw JNZ rel16 D N.S. Valid Jump near if not zero (ZF=0). Not supported in 64-bit mode.
    0F 86 cd JBE rel32 D Valid Valid Jump near if below or equal (CF=1 or ZF=1).
    0F 86 cd JNA rel32 D Valid Valid Jump near if not above (CF=1 or ZF=1).
    0F 86 cw JBE rel16 D N.S. Valid Jump near if below or equal (CF=1 or ZF=1). Not supported in 64-bit mode.
    0F 86 cw JNA rel16 D N.S. Valid Jump near if not above (CF=1 or ZF=1). Not supported in 64-bit mode.
    0F 87 cd JA rel32 D Valid Valid Jump near if above (CF=0 and ZF=0).
    0F 87 cd JNBE rel32 D Valid Valid Jump near if not below or equal (CF=0 and ZF=0).
    0F 87 cw JA rel16 D N.S. Valid Jump near if above (CF=0 and ZF=0). Not supported in 64-bit mode.
    0F 87 cw JNBE rel16 D N.S. Valid Jump near if not below or equal (CF=0 and ZF=0). Not supported in 64-bit mode.
    0F 88 cd JS rel32 D Valid Valid Jump near if sign (SF=1).
    0F 88 cw JS rel16 D N.S. Valid Jump near if sign (SF=1). Not supported in 64-bit mode.
    0F 89 cd JNS rel32 D Valid Valid Jump near if not sign (SF=0).
    0F 89 cw JNS rel16 D N.S. Valid Jump near if not sign (SF=0). Not supported in 64-bit mode.
    0F 8A cd JP rel32 D Valid Valid Jump near if parity (PF=1).
    0F 8A cd JPE rel32 D Valid Valid Jump near if parity even (PF=1).
    0F 8A cw JP rel16 D N.S. Valid Jump near if parity (PF=1). Not supported in 64-bit mode.
    0F 8A cw JPE rel16 D N.S. Valid Jump near if parity even (PF=1). Not supported in 64-bit mode.
    0F 8B cd JNP rel32 D Valid Valid Jump near if not parity (PF=0).
    0F 8B cd JPO rel32 D Valid Valid Jump near if parity odd (PF=0).
    0F 8B cw JNP rel16 D N.S. Valid Jump near if not parity (PF=0). Not supported in 64-bit mode.
    0F 8B cw JPO rel16 D N.S. Valid Jump near if parity odd (PF=0). Not supported in 64-bit mode.
    0F 8C cd JL rel32 D Valid Valid Jump near if less (SF≠ OF).
    0F 8C cd JNGE rel32 D Valid Valid Jump near if not greater or equal (SF≠ OF).
    0F 8C cw JL rel16 D N.S. Valid Jump near if less (SF≠ OF). Not supported in 64-bit mode.
    0F 8C cw JNGE rel16 D N.S. Valid Jump near if not greater or equal (SF≠ OF). Not supported in 64-bit mode.
    0F 8D cd JGE rel32 D Valid Valid Jump near if greater or equal (SF=OF).
    0F 8D cd JNL rel32 D Valid Valid Jump near if not less (SF=OF).
    0F 8D cw JGE rel16 D N.S. Valid Jump near if greater or equal (SF=OF). Not supported in 64-bit mode.
    0F 8D cw JNL rel16 D N.S. Valid Jump near if not less (SF=OF). Not supported in 64-bit mode.
    0F 8E cd JLE rel32 D Valid Valid Jump near if less or equal (ZF=1 or SF≠ OF).
    0F 8E cd JNG rel32 D Valid Valid Jump near if not greater (ZF=1 or SF≠ OF).
    0F 8E cw JLE rel16 D N.S. Valid Jump near if less or equal (ZF=1 or SF≠ OF). Not supported in 64-bit mode.
    0F 8E cw JNG rel16 D N.S. Valid Jump near if not greater (ZF=1 or SF≠ OF). Not supported in 64-bit mode.
    0F 8F cd JG rel32 D Valid Valid Jump near if greater (ZF=0 and SF=OF).
    0F 8F cd JNLE rel32 D Valid Valid Jump near if not less or equal (ZF=0 and SF=OF).
    0F 8F cw JG rel16 D N.S. Valid Jump near if greater (ZF=0 and SF=OF). Not supported in 64-bit mode.
    0F 8F cw JNLE rel16 D N.S. Valid Jump near if not less or equal (ZF=0 and SF=OF). Not supported in 64-bit mode.
    70 cb JO rel8 D Valid Valid Jump short if overflow (OF=1).
    71 cb JNO rel8 D Valid Valid Jump short if not overflow (OF=0).
    72 cb JB rel8 D Valid Valid Jump short if below (CF=1).
    72 cb JC rel8 D Valid Valid Jump short if carry (CF=1).
    72 cb JNAE rel8 D Valid Valid Jump short if not above or equal (CF=1).
    73 cb JAE rel8 D Valid Valid Jump short if above or equal (CF=0).
    73 cb JNB rel8 D Valid Valid Jump short if not below (CF=0).
    73 cb JNC rel8 D Valid Valid Jump short if not carry (CF=0).
    74 cb JE rel8 D Valid Valid Jump short if equal (ZF=1).
    74 cb JZ rel8 D Valid Valid Jump short if zero (ZF = 1).
    75 cb JNE rel8 D Valid Valid Jump short if not equal (ZF=0).
    75 cb JNZ rel8 D Valid Valid Jump short if not zero (ZF=0).
    76 cb JBE rel8 D Valid Valid Jump short if below or equal (CF=1 or ZF=1).
    76 cb JNA rel8 D Valid Valid Jump short if not above (CF=1 or ZF=1).
    77 cb JA rel8 D Valid Valid Jump short if above (CF=0 and ZF=0).
    77 cb JNBE rel8 D Valid Valid Jump short if not below or equal (CF=0 and ZF=0).
    78 cb JS rel8 D Valid Valid Jump short if sign (SF=1).
    79 cb JNS rel8 D Valid Valid Jump short if not sign (SF=0).
    7A cb JP rel8 D Valid Valid Jump short if parity (PF=1).
    7A cb JPE rel8 D Valid Valid Jump short if parity even (PF=1).
    7B cb JNP rel8 D Valid Valid Jump short if not parity (PF=0).
    7B cb JPO rel8 D Valid Valid Jump short if parity odd (PF=0).
    7C cb JL rel8 D Valid Valid Jump short if less (SF≠ OF).
    7C cb JNGE rel8 D Valid Valid Jump short if not greater or equal (SF≠ OF).
    7D cb JGE rel8 D Valid Valid Jump short if greater or equal (SF=OF).
    7D cb JNL rel8 D Valid Valid Jump short if not less (SF=OF).
    7E cb JLE rel8 D Valid Valid Jump short if less or equal (ZF=1 or SF≠ OF).
    7E cb JNG rel8 D Valid Valid Jump short if not greater (ZF=1 or SF≠ OF).
    7F cb JG rel8 D Valid Valid Jump short if greater (ZF=0 and SF=OF).
    7F cb JNLE rel8 D Valid Valid Jump short if not less or equal (ZF=0 and SF=OF).
    E3 cb JCXZ rel8 D N.E. Valid Jump short if CX register is 0.
    E3 cb JECXZ rel8 D Valid Valid Jump short if ECX register is 0.
    E3 cb JRCXZ rel8 D Valid N.E. Jump short if RCX register is 0.

    Original table from the above Jcc link:

    Opcode Instruction Op/En 64-Bit Mode Compat/Leg Mode Description
    77 cb JA rel8 D Valid Valid Jump short if above (CF=0 and ZF=0).
    73 cb JAE rel8 D Valid Valid Jump short if above or equal (CF=0).
    72 cb JB rel8 D Valid Valid Jump short if below (CF=1).
    76 cb JBE rel8 D Valid Valid Jump short if below or equal (CF=1 or ZF=1).
    72 cb JC rel8 D Valid Valid Jump short if carry (CF=1).
    E3 cb JCXZ rel8 D N.E. Valid Jump short if CX register is 0.
    E3 cb JECXZ rel8 D Valid Valid Jump short if ECX register is 0.
    E3 cb JRCXZ rel8 D Valid N.E. Jump short if RCX register is 0.
    74 cb JE rel8 D Valid Valid Jump short if equal (ZF=1).
    7F cb JG rel8 D Valid Valid Jump short if greater (ZF=0 and SF=OF).
    7D cb JGE rel8 D Valid Valid Jump short if greater or equal (SF=OF).
    7C cb JL rel8 D Valid Valid Jump short if less (SF≠ OF).
    7E cb JLE rel8 D Valid Valid Jump short if less or equal (ZF=1 or SF≠ OF).
    76 cb JNA rel8 D Valid Valid Jump short if not above (CF=1 or ZF=1).
    72 cb JNAE rel8 D Valid Valid Jump short if not above or equal (CF=1).
    73 cb JNB rel8 D Valid Valid Jump short if not below (CF=0).
    77 cb JNBE rel8 D Valid Valid Jump short if not below or equal (CF=0 and ZF=0).
    73 cb JNC rel8 D Valid Valid Jump short if not carry (CF=0).
    75 cb JNE rel8 D Valid Valid Jump short if not equal (ZF=0).
    7E cb JNG rel8 D Valid Valid Jump short if not greater (ZF=1 or SF≠ OF).
    7C cb JNGE rel8 D Valid Valid Jump short if not greater or equal (SF≠ OF).
    7D cb JNL rel8 D Valid Valid Jump short if not less (SF=OF).
    7F cb JNLE rel8 D Valid Valid Jump short if not less or equal (ZF=0 and SF=OF).
    71 cb JNO rel8 D Valid Valid Jump short if not overflow (OF=0).
    7B cb JNP rel8 D Valid Valid Jump short if not parity (PF=0).
    79 cb JNS rel8 D Valid Valid Jump short if not sign (SF=0).
    75 cb JNZ rel8 D Valid Valid Jump short if not zero (ZF=0).
    70 cb JO rel8 D Valid Valid Jump short if overflow (OF=1).
    7A cb JP rel8 D Valid Valid Jump short if parity (PF=1).
    7A cb JPE rel8 D Valid Valid Jump short if parity even (PF=1).
    7B cb JPO rel8 D Valid Valid Jump short if parity odd (PF=0).
    78 cb JS rel8 D Valid Valid Jump short if sign (SF=1).
    74 cb JZ rel8 D Valid Valid Jump short if zero (ZF = 1).
    0F 87 cw JA rel16 D N.S. Valid Jump near if above (CF=0 and ZF=0). Not supported in 64-bit mode.
    0F 87 cd JA rel32 D Valid Valid Jump near if above (CF=0 and ZF=0).
    0F 83 cw JAE rel16 D N.S. Valid Jump near if above or equal (CF=0). Not supported in 64-bit mode.
    0F 83 cd JAE rel32 D Valid Valid Jump near if above or equal (CF=0).
    0F 82 cw JB rel16 D N.S. Valid Jump near if below (CF=1). Not supported in 64-bit mode.
    0F 82 cd JB rel32 D Valid Valid Jump near if below (CF=1).
    0F 86 cw JBE rel16 D N.S. Valid Jump near if below or equal (CF=1 or ZF=1). Not supported in 64-bit mode.
    0F 86 cd JBE rel32 D Valid Valid Jump near if below or equal (CF=1 or ZF=1).
    0F 82 cw JC rel16 D N.S. Valid Jump near if carry (CF=1). Not supported in 64-bit mode.
    0F 82 cd JC rel32 D Valid Valid Jump near if carry (CF=1).
    0F 84 cw JE rel16 D N.S. Valid Jump near if equal (ZF=1). Not supported in 64-bit mode.
    0F 84 cd JE rel32 D Valid Valid Jump near if equal (ZF=1).
    0F 84 cw JZ rel16 D N.S. Valid Jump near if 0 (ZF=1). Not supported in 64-bit mode.
    0F 84 cd JZ rel32 D Valid Valid Jump near if 0 (ZF=1).
    0F 8F cw JG rel16 D N.S. Valid Jump near if greater (ZF=0 and SF=OF). Not supported in 64-bit mode.
    0F 8F cd JG rel32 D Valid Valid Jump near if greater (ZF=0 and SF=OF).
    0F 8D cw JGE rel16 D N.S. Valid Jump near if greater or equal (SF=OF). Not supported in 64-bit mode.
    0F 8D cd JGE rel32 D Valid Valid Jump near if greater or equal (SF=OF).
    0F 8C cw JL rel16 D N.S. Valid Jump near if less (SF≠ OF). Not supported in 64-bit mode.
    0F 8C cd JL rel32 D Valid Valid Jump near if less (SF≠ OF).
    0F 8E cw JLE rel16 D N.S. Valid Jump near if less or equal (ZF=1 or SF≠ OF). Not supported in 64-bit mode.
    0F 8E cd JLE rel32 D Valid Valid Jump near if less or equal (ZF=1 or SF≠ OF).
    0F 86 cw JNA rel16 D N.S. Valid Jump near if not above (CF=1 or ZF=1). Not supported in 64-bit mode.
    0F 86 cd JNA rel32 D Valid Valid Jump near if not above (CF=1 or ZF=1).
    0F 82 cw JNAE rel16 D N.S. Valid Jump near if not above or equal (CF=1). Not supported in 64-bit mode.
    0F 82 cd JNAE rel32 D Valid Valid Jump near if not above or equal (CF=1).
    0F 83 cw JNB rel16 D N.S. Valid Jump near if not below (CF=0). Not supported in 64-bit mode.
    0F 83 cd JNB rel32 D Valid Valid Jump near if not below (CF=0).
    0F 87 cw JNBE rel16 D N.S. Valid Jump near if not below or equal (CF=0 and ZF=0). Not supported in 64-bit mode.
    0F 87 cd JNBE rel32 D Valid Valid Jump near if not below or equal (CF=0 and ZF=0).
    0F 83 cw JNC rel16 D N.S. Valid Jump near if not carry (CF=0). Not supported in 64-bit mode.
    0F 83 cd JNC rel32 D Valid Valid Jump near if not carry (CF=0).
    0F 85 cw JNE rel16 D N.S. Valid Jump near if not equal (ZF=0). Not supported in 64-bit mode.
    0F 85 cd JNE rel32 D Valid Valid Jump near if not equal (ZF=0).
    0F 8E cw JNG rel16 D N.S. Valid Jump near if not greater (ZF=1 or SF≠ OF). Not supported in 64-bit mode.
    0F 8E cd JNG rel32 D Valid Valid Jump near if not greater (ZF=1 or SF≠ OF).
    0F 8C cw JNGE rel16 D N.S. Valid Jump near if not greater or equal (SF≠ OF). Not supported in 64-bit mode.
    0F 8C cd JNGE rel32 D Valid Valid Jump near if not greater or equal (SF≠ OF).
    0F 8D cw JNL rel16 D N.S. Valid Jump near if not less (SF=OF). Not supported in 64-bit mode.
    0F 8D cd JNL rel32 D Valid Valid Jump near if not less (SF=OF).
    0F 8F cw JNLE rel16 D N.S. Valid Jump near if not less or equal (ZF=0 and SF=OF). Not supported in 64-bit mode.
    0F 8F cd JNLE rel32 D Valid Valid Jump near if not less or equal (ZF=0 and SF=OF).
    0F 81 cw JNO rel16 D N.S. Valid Jump near if not overflow (OF=0). Not supported in 64-bit mode.
    0F 81 cd JNO rel32 D Valid Valid Jump near if not overflow (OF=0).
    0F 8B cw JNP rel16 D N.S. Valid Jump near if not parity (PF=0). Not supported in 64-bit mode.
    0F 8B cd JNP rel32 D Valid Valid Jump near if not parity (PF=0).
    0F 89 cw JNS rel16 D N.S. Valid Jump near if not sign (SF=0). Not supported in 64-bit mode.
    0F 89 cd JNS rel32 D Valid Valid Jump near if not sign (SF=0).
    0F 85 cw JNZ rel16 D N.S. Valid Jump near if not zero (ZF=0). Not supported in 64-bit mode.
    0F 85 cd JNZ rel32 D Valid Valid Jump near if not zero (ZF=0).
    0F 80 cw JO rel16 D N.S. Valid Jump near if overflow (OF=1). Not supported in 64-bit mode.
    0F 80 cd JO rel32 D Valid Valid Jump near if overflow (OF=1).
    0F 8A cw JP rel16 D N.S. Valid Jump near if parity (PF=1). Not supported in 64-bit mode.
    0F 8A cd JP rel32 D Valid Valid Jump near if parity (PF=1).
    0F 8A cw JPE rel16 D N.S. Valid Jump near if parity even (PF=1). Not supported in 64-bit mode.
    0F 8A cd JPE rel32 D Valid Valid Jump near if parity even (PF=1).
    0F 8B cw JPO rel16 D N.S. Valid Jump near if parity odd (PF=0). Not supported in 64-bit mode.
    0F 8B cd JPO rel32 D Valid Valid Jump near if parity odd (PF=0).
    0F 88 cw JS rel16 D N.S. Valid Jump near if sign (SF=1). Not supported in 64-bit mode.
    0F 88 cd JS rel32 D Valid Valid Jump near if sign (SF=1).
    0F 84 cw JZ rel16 D N.S. Valid Jump near if 0 (ZF=1). Not supported in 64-bit mode.
    0F 84 cd JZ rel32 D Valid Valid Jump near if 0 (ZF=1).

--jeroen

Posted in Assembly Language, Development, Software Development, x86 | Leave a Comment »

Test Automation Code Smells – Angie Jones

Posted by jpluimers on 2024/12/25

Cool presentation: [Wayback/Archive] Test Automation Code Smells – Angie Jones.

A recording is at [Wayback/Archive] What’s That Smell? Tidying Up Our Test Code – YouTube (and embedded below the signature).

The code is at [Wayback] code_smells_workshop.zip.

Read the rest of this entry »

Posted in Agile, Development, Software Development, Testing, Unit Testing | Leave a Comment »

“Incompatible parameter lists” when using Types.T*DynArray? – VCL – Delphi-PRAXiS [en]

Posted by jpluimers on 2024/12/24

Reminder to self: Delphi 11.3 (Alexandria update 3), mid-product added a compiler changing kind of deprecating using types of this form (including ones defined in the System, System.Types and other RTL/VCL units):

Overview of “deprecated” * and alternative array types
“deprecated” alternative: write it all out
TBooleanDynArray TArray<Boolean>
TByteDynArray TArray<Byte>
TCardinalDynArray TArray<Cardinal>
TStringDynArray TArray<string>
  • technically not deprecated, as deprecated is a hinting directive and despite these having existed for almost 25 years now**, hinting directives like platform, deprecated, or library cannot be used on array types:a bug has been filed for this in 2017 but still has not been addressed, see my earlier blog post Delphi Declarations and Statements: Hinting Directives.

Read the rest of this entry »

Posted in Delphi, Delphi 11.0 Alexandria (Olympus), Development, Software Development | Leave a Comment »

Beyond Compare 5 – out since mid 2024, and not many bug fixes needed so far: be sure to upgrade

Posted by jpluimers on 2024/12/19

Being back in the field after quite a long time made me notice I missed the Beyond Compare 5 release mid this year.

It did not need many upgrades so far which is a really good sign. Unlike many other places that release software way too early, Scooter Software seems to have focused on quality first, which nowadays is rare. Great!

Below are some links to get you up to speed, especially since it is available on Home Brew, Chocolatey and various other package installers:

Read the rest of this entry »

Posted in Development, Software Development | Leave a Comment »