Difference between revisions of "16-bit Assembly"

From SkullSecurity
Jump to navigation Jump to search
(New page: {{Construction}} {{Infobox assembly}})
 
Line 1: Line 1:
{{Construction}}
{{Construction}}
{{Infobox assembly}}
{{Infobox assembly}}
There are many challenges with cracking a 16-bit game that aren't present in modern 32-bit programs. Some examples of issues are:
* Debuggers don't work
* Small segments means code is more spread out
* Different uses for registers/instructions
This section will address the final point, since that's the only really necessary tool.
[[Registers]]
The general purpose registers are similar, with one exception: the 32-bit registers no longer exist. That means that the registers available are:
* ax
* bx
* cx
* dx
* si
* di
* bp
* sp
Another change is in the instruction pointer, eip -- there are now two instruction pointers, '''''XXXXX''''' and ip. '''''XXXXX''''' points to the current segment and ip points to the current instruction within that segments.
The reason for this change is because a 16-bit register only has a 65536-value range, and most programs are more than 64k big.
[[Different Instructions]]
The main differences in instructions is that the instructions that operate on 64-bit registers (such as div and mul) now operate on 32-bit registers. That means that any instruction that uses edx:eax now uses dx:ax.

Revision as of 20:48, 16 March 2007

Stop hand.png This page is under construction. USE AT YOUR OWN RISK!







Assembly Language Tutorial
Please choose a tutorial page:

There are many challenges with cracking a 16-bit game that aren't present in modern 32-bit programs. Some examples of issues are:

  • Debuggers don't work
  • Small segments means code is more spread out
  • Different uses for registers/instructions

This section will address the final point, since that's the only really necessary tool.

Registers The general purpose registers are similar, with one exception: the 32-bit registers no longer exist. That means that the registers available are:

  • ax
  • bx
  • cx
  • dx
  • si
  • di
  • bp
  • sp

Another change is in the instruction pointer, eip -- there are now two instruction pointers, XXXXX and ip. XXXXX points to the current segment and ip points to the current instruction within that segments.

The reason for this change is because a 16-bit register only has a 65536-value range, and most programs are more than 64k big.

Different Instructions The main differences in instructions is that the instructions that operate on 64-bit registers (such as div and mul) now operate on 32-bit registers. That means that any instruction that uses edx:eax now uses dx:ax.