Red de conocimiento informático - Conocimiento sistemático - La línea de montaje 19 está mal, masm genera un error esperado constante, pero no sé qué está mal, supongo

La línea de montaje 19 está mal, masm genera un error esperado constante, pero no sé qué está mal, supongo

Creo que esta es programación de 16 bits, que no incluye el factor de escala. Solo está disponible después de 32 bits, por lo que el direccionamiento de memoria no está disponible*

Y el de 32. factor de escala de bits Solo puede ser *1, *2, *4, *8, por lo que las opciones de alineación del lenguaje C solo pueden ser 1, 2, 4, 8

Problema de codificación de instrucciones x86, 16 formato de direccionamiento de memoria de bits Sí

Registro de dirección base + registro de índice + desplazamiento

El registro de dirección base puede ser BX, BP

El registro de índice puede ser SI , DI

El desplazamiento es cualquier parámetro o se calcula como una constante.

Como se mencionó anteriormente, mientras que el signo de multiplicación se puede usar en un ensamblado de 16 bits, solo se puede usar al calcular valores literales.

En detalle, puede escribir una declaración compleja en C y el resultado serán varias declaraciones cuando se descompile.

El poder del ensamblaje es que cada instrucción sólo realiza una operación. La división del trabajo está detallada y existe la posibilidad de optimización.

Y la CPU de 32 bits aún puede usar registros de propósito general de 32 bits en modo de 16 bits.

La codificación de bytes de código correspondiente específica es modo protegido, modo de dirección real, formato de instrucción en modo virtual-8086

══════════════ ═. ════════════════════════

¿Prefijo de instrucción?+?opcode?+?ModR/M?+?SIB +? ¿Desplazamiento?+?Número inmediato

───────────────────────────────── ── ──

Prefijo de comando: [opt] ¿Hasta cuatro prefijos, cada prefijo 1 byte?

──────────── ─────── ─────────────────────

Código de operación: 1, 2, 3 bytes

────── ─────────────────────────────────

ModR /M: 1 bytes, si es necesario

────────────────────────────── ───────

SIB: 1? byte, si es necesario

────────────────── ────────────── ─────

Desplazamiento: 1, 2, 4 bytes o ninguno

─── ────────────────── ─────────────────

Número inmediato: 1, 2, 4 bytes o Ninguno

═══════ ═════════════════════════════ Direccionamiento válido para codificación ═══16?bit?ModR/M?

═══════════════════════════ ════════════

r8(/ r)ALCLDLBLAHCHHDHBH

r16(/r)AXCXDXBXSPBPSIDI

r32(/r) EAXECXEDXEBXESPEBPESIEDI

mm(/r)MM0MM1MM2MM3MM4MM5MM6MM7

xmm (/r)XMM0?XMM1?XMM2?XMM3?XMM4?XMM5?XMM6?XMM7

(Decimal)/dígito(Código de operación)0?1?2?3?4?5?6?7

(Binario) REG?=?000001010011100101110111

─────── ─────────────────── ─── ──────────

[Mod][R/M]ModR/M

─────────────── ──────────────────────────

[BX+SI][00]?[000]?0008101820283038

[BX+DI]?[001]?0109111921293139

[BP+SI]?[010 ]?020A121A222A323A

[BP+DI]?[011]? 030B131B232B333B

[SI][100]?040C141C242C343C

[DI][101]? p>[BX][111]?070F171F272F373F

───────────── ───────────────── ─── ───────

[BX+SI]+disp8?[01]?[000]?4048505860687078

[BX+DI]+disp8[001]?4149515961697179

[BP+SI]+disp8[010]?424A52

5A626A727A

[BP+DI]+disp8[011]?434B535B636B737B

[SI]+disp8?[100]?444C545C646C747C

[DI]+disp8 ?[101]?454D555D656D757D

[BP]+disp8?[110]?464E565E666E767E

[BX]+disp8?[111]?474F575F676F777F

─ ──────────────────────────────────────

[B X+SI] +disp16?[10]?[000]?80889098A0A8B0B8

[BX+DI]+disp16?[001]?81899199A1A9B1B9

[BP+SI]+disp16?[010] ?828A929AA2AAB2BA

[BP+DI]+disp16?[011]?838B939BA3ABB3BB

[SI]+disp16?[100]?848C949CA4ACB4BC

[DI] +disp16?[101]?858D959DA5ADB5BD

[BP]+disp16?[110]?868E969EA6AEB6BE

[BX][111]?878F979FA7AFB7BF

── ───────────────────────────────────

EAX/AX/AL/ 0 /XMM0?[11]?[000]?C0C8D0D8E0E8F0F8

ECX/CX/CL/MM1/XMM1?[001]?C1C9D1D9E1E9F1F9

EDX/DX/DL/MM2/ XMM2 ?[010]?C2CAD2DAE2EAF2FA

ECX/BX/BL/MM3/XMM3?[011]?C3CBD3DBE3EBF3FB

ESP/SP/AH/MM4/XMM4?[100]?

EBP/BP/CH/MM5/XMM5?[101]?C5CDD5DDE5EDF5FD

ESI/SI/DH/MM6/XMM6?[110]?C6CED6DEE6EEF6FE

EDI/DI/BH/MM7/XMM7?[111]?C7CFD7DFE7EFF7FF

══════════════════════════ ═ ════════════