gpt4 book ai didi

assembly - 未知操作码跳过 : 66, 不是 8086 指令 - 尚不支持

转载 作者:行者123 更新时间:2023-12-02 01:03:05 24 4
gpt4 key购买 nike

我正在使用 emu8086。我有一个问题要求我在从其六输入转换后显示我们在七段显示器上看到的内容。我应该以hexa输入我的数据,如果它与七段表的hexa输入匹配,它会显示十进制数,例如。 3FH = 0, 06H = 1。我正在使用数组来实现这个程序。下面是工作源程序:

ORG 100H     

MOV AL,[1840H] ;input in this memory location
MOV CL,0AH ; initialize length counter

AGAIN: CMP AL,MSG+BX ; compare to check if the data matches
JE RESULT ; jump to RESULT if data matched
INC BX ; increase decimal output by 1 if data not matched
LOOP AGAIN

MOV [1841H],0FFH ; display FF if no data matched the array

HLT

MSG DB 3FH, 06H, 5BH, 4FH,66H, 6DH,7DH,07H,7FH,6FH ; my array with hexa inputs

RESULT: MOV [1841H],BL ; display data if matched

我让这个程序运行。但是我尝试了一些我切换阵列的东西 MSG DB 3FH...ORG 100H 之后的位置和之前 MOV AL,[1840H] ,运行程序会报错

"Unknown opcode skipped: 66, not 8086 instruction - not supported yet".

我找不到原因。

任何人都会知道这是什么原因,如果我将数组保持在 ORG 100H 之间,我可以修复任何东西以使我的程序运行吗?和 MOV AL,[1840H]

最佳答案

通过将数据数组 MSG 移动到第一条指令前面,您可以有效地要求 emu8086 执行它! MSG 的第一个字节对应于有效的 8086 指令(AASPUSH ESPOP BXDEC DI) 但第五个字节表示操作数大小前缀,这在 8086 处理器中不可用!

要快速解决您的问题,只需跳过MSG:

  ORG 100H
jmp start
MSG DB 3FH, 06H, 5BH, 4FH,66H, 6DH,7DH,07H,7FH,6FH
start:

但最好像最初那样将它放在代码之后,这样一开始它就不会碍事。将程序的第一条指令设为 jmp 没有任何好处,因为您可以将代码放在那里,除非您希望它位于二进制文件中的标准位置,以便其他东西可以编辑该文件。 (.com 可执行文件没有元数据来告诉程序加载器入口点在哪里;它固定在 IP=100h,文件的第一个字节。)

一些观察

  • LOOP AGAIN中,LOOP指令依赖于整个CX寄存器,而您只通过初始化了它的低8位MOV CL,0AH.
  • 您的代码还使用 BX 寄存器来索引数组,但您从未将 BX 置零,因此您不能确定程序是否正常运行。
  • MOV [1841H],0FFH 中,您似乎依赖 emu8086 在将立即数写入内存位置时默认为字节大小。我建议始终强加您需要的大小,例如 mov byte ptr [1841h], 255
  • 让我感到困惑的是 CMP AL,MSG+BX 中缺少方括号。
    你不应该写 cmp al, [MSG+BX] 类似于你在 mov AL, [1840H], MOV [1841H], 0FFHMOV [1841H],BL?有关在 MASM 中使用方括号(emu8086 是 MASM 样式)的更多困惑(和一些说明),请阅读 this Ross Ridge answer .

我修改后的程序版本:

  ORG  256
jmp start

msg db 3Fh, 06h, 5Bh, 4Fh, 66h, 6Dh, 7Dh, 07h, 7Fh, 6Fh

start:
mov al, [1840h]
xor bx, bx ; ArrayIndex (offset)
again:
cmp al, [msg+bx]
je result
inc bx
cmp bx, 10 ; NumberOfElements
jb again
mov bl, -1
result:
mov [1841h], bl ; display ARRAYINDEX if matched else display FF
hlt

相关/重复:

关于assembly - 未知操作码跳过 : 66, 不是 8086 指令 - 尚不支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26145673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com