One*_*tch 2 assembly machine-code opcode x86-16 emu8086
我用的是emu8086。我有一个问题,要求我在从六段输入转换后显示我们在七段显示器上看到的内容。我应该以十六进制输入我的数据,如果它与七段表的十六进制输入匹配,则显示十进制数,例如。3FH = 0, 06H = 1。我使用数组来实现这个程序。下面是工作源程序:
\nORG 100H \n\nMOV AL,[1840H] \xef\xbc\x9binput in this memory location\nMOV CL,0AH ; initialize length counter\n \nAGAIN: CMP AL,MSG+BX ; compare to check if the data matches\n JE RESULT ; jump to RESULT if data matched\n INC BX ; increase decimal output by 1 if data not matched\nLOOP AGAIN\n\nMOV [1841H],0FFH ; display FF if no data matched the array\n\nHLT\n\nMSG DB 3FH, 06H, 5BH, 4FH,66H, 6DH,7DH,07H,7FH,6FH ; my array with hexa inputs\n\nRESULT: MOV [1841H],BL ; display data if matched\nRun Code Online (Sandbox Code Playgroud)\n我让这个程序工作了。但我尝试过将数组切换到 after和 beforeMSG DB 3FH...的位置,运行程序会给出错误消息ORG 100HMOV AL,[1840H]
\n\n“跳过未知操作码:66,不是 8086 指令 - 尚不支持”。
\n
我找不到原因。
\n任何人都会知道原因是什么,如果我将数组保留在ORG 100H和之间,我可以修复任何东西以使我的程序正常工作MOV AL,[1840H]吗?
通过将数据数组MSG移到第一条指令前面,您实际上要求 emu8086 执行它!MSG的第一个字节对应于有效的 8086 指令(AAS、PUSH ES、POP BX和DEC DI),但第五个字节表示操作数大小前缀,这在 8086 处理器中不可用!
要快速解决您的问题,只需跳过MSG:
ORG 100H
jmp start
MSG DB 3FH, 06H, 5BH, 4FH,66H, 6DH,7DH,07H,7FH,6FH
start:
Run Code Online (Sandbox Code Playgroud)
但最好像原来一样将它放在代码后面,这样它一开始就不会妨碍。当您可以将代码放在那里时,将程序的第一条指令设置为 a 是没有任何好处的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]中使用方括号一样编写吗?对于在 MASM 中使用方括号(emu8086 是 MASM 风格)的更多困惑(和一些澄清),请阅读Ross Ridge 答案。mov AL, [1840H]MOV [1841H],0FFHMOV [1841H],BL我的修改后的程序版本:
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
Run Code Online (Sandbox Code Playgroud)
相关/重复:
| 归档时间: |
|
| 查看次数: |
8272 次 |
| 最近记录: |