Assembly 旧的汇编代码仍然可用吗?

Assembly 旧的汇编代码仍然可用吗?,assembly,Assembly,我发现了一本关于旧x86处理器的旧书,其中有一些汇编代码片段 其中一个代码片段是: LDA 4567H ADI A,56H STA 0567H 所以我用这样的结构复制了代码 .data .global main main: LDA 4567H ADI A,56H STA 0567H leave ret 并收到以下信息: 错误:指令lda未知 错误:指令adi未知 错误:指令sta未知 所以,我有点困惑。我一直认为,英特尔代码兼容所有英特尔处理器(即

我发现了一本关于旧x86处理器的旧书,其中有一些汇编代码片段

其中一个代码片段是:

LDA 4567H
ADI A,56H
STA 0567H
所以我用这样的结构复制了代码

.data
.global main
main:
    LDA 4567H
    ADI A,56H
    STA 0567H
    leave
    ret
并收到以下信息:

  • 错误:指令lda未知
  • 错误:指令adi未知
  • 错误:指令sta未知
所以,我有点困惑。我一直认为,英特尔代码兼容所有英特尔处理器(即使是最旧的)。 这是正确的还是我做错了什么

关于旧的x86处理器

它不是x86代码。这是8086之前的一代,8080家族。它们是8位处理器

我一直认为,英特尔代码兼容所有英特尔处理器

保留8位指令集是不实际的。尽管如此,英特尔还是确保将8080汇编代码翻译成8086相对容易。你可以买一个程序来处理这个问题。最著名的可能是在CP/M上运行的,以及在MCS-86开发系统上运行的。提供的手册链接。找到一本并运行它肯定需要去博物馆一趟

关于旧的x86处理器

它不是x86代码。这是8086之前的一代,8080家族。它们是8位处理器

我一直认为,英特尔代码兼容所有英特尔处理器


保留8位指令集是不实际的。尽管如此,英特尔还是确保将8080汇编代码翻译成8086相对容易。你可以买一个程序来处理这个问题。最著名的可能是在CP/M上运行的,以及在MCS-86开发系统上运行的。提供的手册链接。找到一本并运行它肯定需要去博物馆一趟

这可能是8080代码,它与8086不兼容。当累加器的宽度为8位时,它被命名为
A
,当累加器扩展到16位时,它被命名为
AX
,当累加器变为64位时,它被命名为
EAX
。1980年左右的汇编代码最近没有太多需求。这可能是8080代码,与8086不兼容。累加器在8位宽时被命名为
A
,扩展到16位时被命名为
AX
,扩展到32位时被命名为
EAX
,转换为64位时被命名为
RAX
。1980年左右的汇编代码最近并没有得到太多的要求。另一方面,在PC上使用8080代码你会怎么做?如果我理解正确,
lda4567h
指令将等于
MOV AL[4567h]
。然而,地址
4567h
在MS-DOS PC上的含义与基于8080的CPM机器上的含义完全不同——甚至不谈32位OSs……请快速阅读手册。他们翻译汇编,而不是机器代码。所以它会说LDA foobar。4567h仍然没有问题,它是相对于DS段寄存器的。另一方面:在PC上使用8080代码你会怎么做?如果我理解正确,
lda4567h
指令将等于
MOV AL[4567h]
。然而,地址
4567h
在MS-DOS PC上的含义与基于8080的CPM机器上的含义完全不同——甚至不谈32位OSs……请快速阅读手册。他们翻译汇编,而不是机器代码。所以它会说LDA foobar。4567h仍然没有问题,它与DS段寄存器相对。