What did the 8086 (and 8088) do upon encountering an illegal instruction?Use of undocumented opcodesHow did the Z80 instruction set differ from the 8080?What conventions and language extensions did people use to program the 8086 and 80286?Why did the PDP-11 include a JMP instruction?What was the IBM PC cost saving for using the 8088 vs 8086?Did the Intel 8086/8088 not guarantee the value of SS:SP immediately after RESET?Uses for the halt instruction?8086 pinout and address space limitHow to keep the instruction prefetcher filled upWhat instructions for the 8086 and subsequent x86 CPUs are not available in Long Mode?How did the 8086 interface with the 8087 FPU coprocessor?
Who is "He that flies" in Lord of the Rings?
Mathematica 12 has gotten worse at solving simple equations?
Do Veracrypt encrypted volumes have any kind of brute force protection?
What class is best to play when a level behind the rest of the party?
In American Politics, why is the Justice Department under the President?
If the pressure inside and outside a balloon balance, then why does air leave when it pops?
Playing a trill with grace note ending
Suppose leased car is totalled: what are financial implications?
What's the best way to quit a job mostly because of money?
How to represent jealousy in a cute way?
Am I allowed to determine tenets of my contract as a warlock?
Problem with pronounciation
Placement of positioning lights on A320 winglets
Part of my house is inexplicably gone
Why does there seem to be an extreme lack of public trashcans in Taiwan?
In Pandemic, why take the extra step of eradicating a disease after you've cured it?
Entered UK using my now-lost UK passport; can I go to Spain using my US passport?
Forgot passport for Alaska cruise (Anchorage to Vancouver)
How can I find out about the game world without meta-influencing it?
Why do I seem to lose data using this bash pipe construction?
Why do the TIE Fighter pilot helmets have similar ridges as the rebels?
Selecting by attribute using Python and a list
What is the proper event in Extended Events to track stored procedure executions?
How can you estimate a spike story?
What did the 8086 (and 8088) do upon encountering an illegal instruction?
Use of undocumented opcodesHow did the Z80 instruction set differ from the 8080?What conventions and language extensions did people use to program the 8086 and 80286?Why did the PDP-11 include a JMP instruction?What was the IBM PC cost saving for using the 8088 vs 8086?Did the Intel 8086/8088 not guarantee the value of SS:SP immediately after RESET?Uses for the halt instruction?8086 pinout and address space limitHow to keep the instruction prefetcher filled upWhat instructions for the 8086 and subsequent x86 CPUs are not available in Long Mode?How did the 8086 interface with the 8087 FPU coprocessor?
I was reading Tanenbaum's "Operating Systems, Design and Implementation" 3rd edition (The MINIX Book), where I encountered the following quote that surprised me:
For instance, the 8086 and 8088 processors do not support detection of illegal instruction operation codes, but this capability is available on the 286 and above, which trap on an attempt to execute an illegal opcode.
What did the 8086 and 8088 do when it an encountered an illegal instruction?
instruction-set 8086 microprocessor 8088
New contributor
add a comment |
I was reading Tanenbaum's "Operating Systems, Design and Implementation" 3rd edition (The MINIX Book), where I encountered the following quote that surprised me:
For instance, the 8086 and 8088 processors do not support detection of illegal instruction operation codes, but this capability is available on the 286 and above, which trap on an attempt to execute an illegal opcode.
What did the 8086 and 8088 do when it an encountered an illegal instruction?
instruction-set 8086 microprocessor 8088
New contributor
1
Possible duplicate of Use of undocumented opcodes
– Stephen Kitt
4 hours ago
1
The suggested duplicate isn’t an exact duplicate of the question, but some of the answers to it also answer this question.
– Stephen Kitt
4 hours ago
add a comment |
I was reading Tanenbaum's "Operating Systems, Design and Implementation" 3rd edition (The MINIX Book), where I encountered the following quote that surprised me:
For instance, the 8086 and 8088 processors do not support detection of illegal instruction operation codes, but this capability is available on the 286 and above, which trap on an attempt to execute an illegal opcode.
What did the 8086 and 8088 do when it an encountered an illegal instruction?
instruction-set 8086 microprocessor 8088
New contributor
I was reading Tanenbaum's "Operating Systems, Design and Implementation" 3rd edition (The MINIX Book), where I encountered the following quote that surprised me:
For instance, the 8086 and 8088 processors do not support detection of illegal instruction operation codes, but this capability is available on the 286 and above, which trap on an attempt to execute an illegal opcode.
What did the 8086 and 8088 do when it an encountered an illegal instruction?
instruction-set 8086 microprocessor 8088
instruction-set 8086 microprocessor 8088
New contributor
New contributor
New contributor
asked 9 hours ago
Joe DJoe D
1362
1362
New contributor
New contributor
1
Possible duplicate of Use of undocumented opcodes
– Stephen Kitt
4 hours ago
1
The suggested duplicate isn’t an exact duplicate of the question, but some of the answers to it also answer this question.
– Stephen Kitt
4 hours ago
add a comment |
1
Possible duplicate of Use of undocumented opcodes
– Stephen Kitt
4 hours ago
1
The suggested duplicate isn’t an exact duplicate of the question, but some of the answers to it also answer this question.
– Stephen Kitt
4 hours ago
1
1
Possible duplicate of Use of undocumented opcodes
– Stephen Kitt
4 hours ago
Possible duplicate of Use of undocumented opcodes
– Stephen Kitt
4 hours ago
1
1
The suggested duplicate isn’t an exact duplicate of the question, but some of the answers to it also answer this question.
– Stephen Kitt
4 hours ago
The suggested duplicate isn’t an exact duplicate of the question, but some of the answers to it also answer this question.
– Stephen Kitt
4 hours ago
add a comment |
2 Answers
2
active
oldest
votes
Illegal opcodes were just instructions that hadn't been fully defined by the chip designers – a little like Undefined Behaviour in C, but much more predictable. Many people called these "undocumented instructions", because they functioned just like ordinary instructions, on the particular versions of the particular chips on which they are found. There was no special handling to prevent these instructions from executing.
Most of them were just NOP
s (either because they weren't wired up to anything or because they did stuff like writing a register to itself) or duplicates of other instructions (because the instruction decoder ignored some bits when it didn't need to pay attention to them), but some of them were more interesting.
For instance, SALC
, which does:
if (carry flag set)
AL = 0xFF;
else
AL = 0x00;
This can be used as a translation layer between C code and certain assembly returning conventions. It is equivalent to SBB AL, AL
, except that it does not clobber flags.
For more information, see:
Stephen Kitt's answer to Use of undocumented opcodes.
supercat's answer to Use of undocumented opcodes, which has a good explanation of where they come from.- A related question on Stack Overflow
add a comment |
It might be better to think about it this way:
On the 286 and above, a new thing was defined called an "illegal instruction", and this new thing came with a new behavior -- a trap that was generated when one was encountered. Before the 286, there was no such thing as an illegal instruction, just undocumented ones.
Your question then becomes, "what did the 8086 and 8088 do when encountering undocumented instructions" and the answer is simply that the behavior was undocumented. Some of them appeared to do nothing (i.e. they produced the same apparent result as a NOP instruction), while others did odd things, or simply the same thing as another opcode.
Here's a WayBack link that may shed more light on the situation:
http://web.archive.org/web/20190321200321/http://www.os2museum.com/wp/undocumented-8086-opcodes-part-i/
This gets confusing because the 186 was introduced just after the 286, but it also generates an “illegal instruction” exception, so it’s technically “186 and above”.
– Stephen Kitt
4 hours ago
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "648"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
noCode: true, onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Joe D is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fretrocomputing.stackexchange.com%2fquestions%2f11327%2fwhat-did-the-8086-and-8088-do-upon-encountering-an-illegal-instruction%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Illegal opcodes were just instructions that hadn't been fully defined by the chip designers – a little like Undefined Behaviour in C, but much more predictable. Many people called these "undocumented instructions", because they functioned just like ordinary instructions, on the particular versions of the particular chips on which they are found. There was no special handling to prevent these instructions from executing.
Most of them were just NOP
s (either because they weren't wired up to anything or because they did stuff like writing a register to itself) or duplicates of other instructions (because the instruction decoder ignored some bits when it didn't need to pay attention to them), but some of them were more interesting.
For instance, SALC
, which does:
if (carry flag set)
AL = 0xFF;
else
AL = 0x00;
This can be used as a translation layer between C code and certain assembly returning conventions. It is equivalent to SBB AL, AL
, except that it does not clobber flags.
For more information, see:
Stephen Kitt's answer to Use of undocumented opcodes.
supercat's answer to Use of undocumented opcodes, which has a good explanation of where they come from.- A related question on Stack Overflow
add a comment |
Illegal opcodes were just instructions that hadn't been fully defined by the chip designers – a little like Undefined Behaviour in C, but much more predictable. Many people called these "undocumented instructions", because they functioned just like ordinary instructions, on the particular versions of the particular chips on which they are found. There was no special handling to prevent these instructions from executing.
Most of them were just NOP
s (either because they weren't wired up to anything or because they did stuff like writing a register to itself) or duplicates of other instructions (because the instruction decoder ignored some bits when it didn't need to pay attention to them), but some of them were more interesting.
For instance, SALC
, which does:
if (carry flag set)
AL = 0xFF;
else
AL = 0x00;
This can be used as a translation layer between C code and certain assembly returning conventions. It is equivalent to SBB AL, AL
, except that it does not clobber flags.
For more information, see:
Stephen Kitt's answer to Use of undocumented opcodes.
supercat's answer to Use of undocumented opcodes, which has a good explanation of where they come from.- A related question on Stack Overflow
add a comment |
Illegal opcodes were just instructions that hadn't been fully defined by the chip designers – a little like Undefined Behaviour in C, but much more predictable. Many people called these "undocumented instructions", because they functioned just like ordinary instructions, on the particular versions of the particular chips on which they are found. There was no special handling to prevent these instructions from executing.
Most of them were just NOP
s (either because they weren't wired up to anything or because they did stuff like writing a register to itself) or duplicates of other instructions (because the instruction decoder ignored some bits when it didn't need to pay attention to them), but some of them were more interesting.
For instance, SALC
, which does:
if (carry flag set)
AL = 0xFF;
else
AL = 0x00;
This can be used as a translation layer between C code and certain assembly returning conventions. It is equivalent to SBB AL, AL
, except that it does not clobber flags.
For more information, see:
Stephen Kitt's answer to Use of undocumented opcodes.
supercat's answer to Use of undocumented opcodes, which has a good explanation of where they come from.- A related question on Stack Overflow
Illegal opcodes were just instructions that hadn't been fully defined by the chip designers – a little like Undefined Behaviour in C, but much more predictable. Many people called these "undocumented instructions", because they functioned just like ordinary instructions, on the particular versions of the particular chips on which they are found. There was no special handling to prevent these instructions from executing.
Most of them were just NOP
s (either because they weren't wired up to anything or because they did stuff like writing a register to itself) or duplicates of other instructions (because the instruction decoder ignored some bits when it didn't need to pay attention to them), but some of them were more interesting.
For instance, SALC
, which does:
if (carry flag set)
AL = 0xFF;
else
AL = 0x00;
This can be used as a translation layer between C code and certain assembly returning conventions. It is equivalent to SBB AL, AL
, except that it does not clobber flags.
For more information, see:
Stephen Kitt's answer to Use of undocumented opcodes.
supercat's answer to Use of undocumented opcodes, which has a good explanation of where they come from.- A related question on Stack Overflow
edited 26 mins ago
Cody Gray
1,149521
1,149521
answered 8 hours ago
wizzwizz4♦wizzwizz4
8,915642110
8,915642110
add a comment |
add a comment |
It might be better to think about it this way:
On the 286 and above, a new thing was defined called an "illegal instruction", and this new thing came with a new behavior -- a trap that was generated when one was encountered. Before the 286, there was no such thing as an illegal instruction, just undocumented ones.
Your question then becomes, "what did the 8086 and 8088 do when encountering undocumented instructions" and the answer is simply that the behavior was undocumented. Some of them appeared to do nothing (i.e. they produced the same apparent result as a NOP instruction), while others did odd things, or simply the same thing as another opcode.
Here's a WayBack link that may shed more light on the situation:
http://web.archive.org/web/20190321200321/http://www.os2museum.com/wp/undocumented-8086-opcodes-part-i/
This gets confusing because the 186 was introduced just after the 286, but it also generates an “illegal instruction” exception, so it’s technically “186 and above”.
– Stephen Kitt
4 hours ago
add a comment |
It might be better to think about it this way:
On the 286 and above, a new thing was defined called an "illegal instruction", and this new thing came with a new behavior -- a trap that was generated when one was encountered. Before the 286, there was no such thing as an illegal instruction, just undocumented ones.
Your question then becomes, "what did the 8086 and 8088 do when encountering undocumented instructions" and the answer is simply that the behavior was undocumented. Some of them appeared to do nothing (i.e. they produced the same apparent result as a NOP instruction), while others did odd things, or simply the same thing as another opcode.
Here's a WayBack link that may shed more light on the situation:
http://web.archive.org/web/20190321200321/http://www.os2museum.com/wp/undocumented-8086-opcodes-part-i/
This gets confusing because the 186 was introduced just after the 286, but it also generates an “illegal instruction” exception, so it’s technically “186 and above”.
– Stephen Kitt
4 hours ago
add a comment |
It might be better to think about it this way:
On the 286 and above, a new thing was defined called an "illegal instruction", and this new thing came with a new behavior -- a trap that was generated when one was encountered. Before the 286, there was no such thing as an illegal instruction, just undocumented ones.
Your question then becomes, "what did the 8086 and 8088 do when encountering undocumented instructions" and the answer is simply that the behavior was undocumented. Some of them appeared to do nothing (i.e. they produced the same apparent result as a NOP instruction), while others did odd things, or simply the same thing as another opcode.
Here's a WayBack link that may shed more light on the situation:
http://web.archive.org/web/20190321200321/http://www.os2museum.com/wp/undocumented-8086-opcodes-part-i/
It might be better to think about it this way:
On the 286 and above, a new thing was defined called an "illegal instruction", and this new thing came with a new behavior -- a trap that was generated when one was encountered. Before the 286, there was no such thing as an illegal instruction, just undocumented ones.
Your question then becomes, "what did the 8086 and 8088 do when encountering undocumented instructions" and the answer is simply that the behavior was undocumented. Some of them appeared to do nothing (i.e. they produced the same apparent result as a NOP instruction), while others did odd things, or simply the same thing as another opcode.
Here's a WayBack link that may shed more light on the situation:
http://web.archive.org/web/20190321200321/http://www.os2museum.com/wp/undocumented-8086-opcodes-part-i/
answered 8 hours ago
Ken GoberKen Gober
8,37112542
8,37112542
This gets confusing because the 186 was introduced just after the 286, but it also generates an “illegal instruction” exception, so it’s technically “186 and above”.
– Stephen Kitt
4 hours ago
add a comment |
This gets confusing because the 186 was introduced just after the 286, but it also generates an “illegal instruction” exception, so it’s technically “186 and above”.
– Stephen Kitt
4 hours ago
This gets confusing because the 186 was introduced just after the 286, but it also generates an “illegal instruction” exception, so it’s technically “186 and above”.
– Stephen Kitt
4 hours ago
This gets confusing because the 186 was introduced just after the 286, but it also generates an “illegal instruction” exception, so it’s technically “186 and above”.
– Stephen Kitt
4 hours ago
add a comment |
Joe D is a new contributor. Be nice, and check out our Code of Conduct.
Joe D is a new contributor. Be nice, and check out our Code of Conduct.
Joe D is a new contributor. Be nice, and check out our Code of Conduct.
Joe D is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Retrocomputing Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fretrocomputing.stackexchange.com%2fquestions%2f11327%2fwhat-did-the-8086-and-8088-do-upon-encountering-an-illegal-instruction%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Possible duplicate of Use of undocumented opcodes
– Stephen Kitt
4 hours ago
1
The suggested duplicate isn’t an exact duplicate of the question, but some of the answers to it also answer this question.
– Stephen Kitt
4 hours ago