使用名爲「emu8086」的x8086仿真器。 我寫了簡單的代碼,當我運行它時,它給了我一個錯誤。 我不知道是什麼問題。 http://prntscr.com/8bpivm指令「mov ax,[ax]」不會編譯
0
A
回答
6
[AX]
不是有效的有效地址。下面是有效的16位尋址方式(source)列表:
[BX + val]
[SI + val]
[DI + val]
[BP + val]
[BX + SI + val]
[BX + DI + val]
[BP + SI + val]
[BP + DI + val]
[address]
的+ val
部分表示一個8位或16位的位移,並且可以省略,所以你可以寫[BX]
而不是[BX + 0]
。
您還可以在英特爾的軟件開發人員手冊,第2A卷,表2-1中找到這些內容。帶ModR/M字節的16位尋址表格。
0
英特爾手冊中的下表顯示瞭如何使用Mod R/M-byte指定寄存器的指令寄存器。
Instruction Prefix 0 or 1 Byte
Address-Size Prefix 0 or 1 Byte
Operand-Size Prefix 0 or 1 Byte
Segment Prefix 0 or 1 Byte
Opcode 1 or 2 Byte
Mod R/M 0 or 1 Byte
SIB, Scale Index Base (386+) 0 or 1 Byte
Displacement 0, 1, 2 or 4 Byte (4 only 386+)
Immediate 0, 1, 2 or 4 Byte (4 only 386+)
Format of Postbyte(Mod R/M from Intel-Manual)
---------------------------------------------
MM RRR MMM
MM - Memory addressing mode
RRR - Register operand address
MMM - Memory operand address
RRR Register Names
Filds 8bit 16bit 32bit
000 AL AX EAX
001 CL CX ECX
010 DL DX EDX
011 Bl BX EBX
100 AH SP ESP
101 CH BP EBP
110 DH SI ESI
111 BH DI EDI
---
16bit memory (No 32 bit memory address prefix)
MMM Default MM Field
Field Sreg 00 01 10 11=MMM is reg
000 DS [BX+SI] [BX+SI+o8] [BX+SI+o16]
001 DS [BX+DI] [BX+DI+o8] [BX+DI+o16]
010 SS [BP+SI] [BP+SI+o8] [BP+SI+o16]
011 SS [BP+DI] [BP+DI+o8] [BP+DI+o16]
100 DS [SI] [SI+o8] [SI+o16]
101 DS [DI] [DI+o8] [SI+o16]
110 SS [o16] [BP+o8] [BP+o16]
111 DS [BX] [BX+o8] [BX+o16]
Note: MMM=110,MM=0 Default Sreg is DS !!!!
32bit memory (Has 67h 32 bit memory address prefix)
MMM Default MM Field
Field Sreg 00 01 10 11=MMM is reg
000 DS [EAX] [EAX+o8] [EAX+o32]
001 DS [ECX] [ECX+o8] [ECX+o32]
010 DS [EDX] [EDX+o8] [EDX+o32]
011 DS [EBX] [EBX+o8] [EBX+o32]
100 SIB [SIB] [SIB+o8] [SIB+o32]
101 SS [o32] [EBP+o8] [EBP+o32]
110 DS [ESI] [ESI+o8] [ESI+o32]
111 DS [EDI] [EDI+o8] [EDI+o32]
Note: MMM=110,MM=0 Default Sreg is DS !!!!
---
SIB is (Scale/Base/Index)
SS BBB III
Note: SIB address calculated as:
<sib address>=<Base>+<Index>*(2^(Scale))
Fild Default Base
BBB Sreg Register Note
000 DS EAX
001 DS ECX
010 DS EDX
011 DS EBX
100 SS ESP
101 DS o32 if MM=00 (Postbyte)
SS EBP if MM<>00 (Postbyte)
110 SS ESI
111 DS EDI
Fild Index
III register Note
000 EAX
001 ECX
010 EDX
011 EBX
100 never Index SS can be 00
101 EBP
110 ESI
111 EDI
Fild Scale coefficient
SS =2^(SS)
00 1
01 2
10 4
11 8
相關問題
- 1. mov ax,bx與mov ax,[bx]
- 2. MOV BL,[AX]錯誤
- 3. 在NASM中,MOV EBX,AX是一個有效的指令嗎?
- 4. Linux上的Masm32:爲什麼mov [bx],ax工作,但mov [ax],bx(或mov [bl],al)不?
- 5. MOV指令限制
- 6. MOV [EBX],AX - 指向寄存器的指針?
- 7. 爲什麼mov指令直接使用ax而不是兩個段寄存器?
- 8. 指令DB和AX寄存器
- 9. MOV指令 - 大會
- 10. 大會MOV指令
- 11. Dynamics AX 2012 C#編譯警告
- 12. mov eax,0和mov ax之間的機器碼差異,0
- 13. 重複MOV指令的x86
- 14. 矩陣乘法Ax = 1或Ax = 0
- 15. x86_64 - 編碼mov指令
- 16. 從ax執行非AX報告
- 17. 不使用NEG指令的AX的2的補碼
- 18. 「mov ds,ax」在Visual Studio中顯示0xC0000005錯誤
- 19. 線程AX 2012
- 20. Ax 2012 tts error
- 21. 在AX 2012
- 22. Dynamics AX的FTP
- 23. Microsoft Dynamics AX
- 24. 安裝AX 2012
- 25. 嵌套指令元素不會編譯
- 26. Dynamics AX的2012:翻譯RecId成價值
- 27. axbuild.exe nonInteractive | AX 2012 R3
- 28. AX 2012爲了WMSLocationId
- 29. AX 2009:找不到「SalesCreateReleaseOrderLineTmp」表
- 30. 報告AX 2012不開;