8086 notas de montaje 02

Ejemplo correspondiente de instrucciones de montaje y código de máquina

Instrucciones de montaje Instrucciones de la máquina
mov ax, 0123 B8 23 01
mov ax, ds: [0123] A1 23 01
push ds: [0123] FF 36 23 01

Se puede observar que en las instrucciones de montaje generales, la idata (datos inmediatos) en las instrucciones de montaje, ya sea que represente un dato o la dirección de desplazamiento de una unidad de memoria, aparecerá en la instrucción máquina correspondiente.

Instrucción de rama

Las instrucciones de transferencia de 8086CPU se dividen en las siguientes categorías

  • Instrucciones de transferencia incondicional (como: salto)
  • Instrucción de bifurcación condicional
  • Instrucciones de bucle (por ejemplo: bucle)
  • Proceso (función)
  • Interrumpir

Desplazamiento del operador

La función del desplazamiento del operador es obtener la dirección de desplazamiento de la etiqueta (en relación con la dirección del segmento actual)

ejemplo:

assume cs:codesg
codesg segment
start:	mov ax,offset start;相当于mov ax,0 (cs:offset start)
	s: 	mov ax,offset s	   ;相当于mov ax,3	(cs:offset s)
codesg ends
end start

instrucción jmp

jmp es una transferencia incondicional. Puede modificar solo la IP, o modificar la CS y la IP al mismo tiempo. Al mismo tiempo, la instrucción jmp debe proporcionar dos tipos de información:

  • Dirección de destino
  • Distancia de transferencia (transferencia entre segmentos, transferencia corta intrasegmento, transferencia cercana intrasegmento)

Instrucción JMP para transferir según el desplazamiento

jmp short 标号(转移到标号处执行指令)

La instrucción jmp en este formato realiza una transferencia corta dentro de un segmento . Puede modificar la IP en el rango de ** - 128 ~ 127 **, lo que significa que puede mover hasta 128 bytes cuando avanza, y puede se mueven hacia atrás. hasta 127 bytes a través de

ejemplo:

assume cs:codesg
codesg segment
start:	mov ax,0
		jmp short s
		add ax,1
	s: 	inc ax
codesg ends
end start

De hecho jmp short 标号, la función de la instrucción es (IP) = (IP) + 8 bits de desplazamiento

  • Desplazamiento de 8 bits = la dirección en la "etiqueta" -la dirección del primer byte después de la instrucción jmp
  • corto indica que el desplazamiento aquí es un desplazamiento de 8 bits
  • El rango de desplazamiento de 8 bits es -128 ~ 127, expresado en complemento
  • El compilador calcula el desplazamiento de 8 bits en tiempo de compilación
jmp near ptr 标号 

Esta instrucción realiza la transferencia cercana dentro del segmento, es decir, (IP) = (IP) + desplazamiento de 16 bits

  • 16 desplazamiento = la dirección en la "etiqueta" -la dirección del primer byte después de la instrucción jmp
  • cerca de ptr indica que el desplazamiento aquí es un desplazamiento de 16 bits
  • El rango de desplazamiento de 16 bits es -32769 ~ 32767, expresado en complemento
  • El compilador calcula el desplazamiento de 16 bits en tiempo de compilación

La instrucción jmp donde la dirección de destino de la transferencia está en la instrucción

jmp far ptr 标号 

Lo que se logra es la transferencia entre segmentos, también conocida como transferencia lejana.

  • (CS) = la dirección del segmento del segmento donde se encuentra la etiqueta
  • (IP) = dirección de desplazamiento en el segmento donde se encuentra la etiqueta
  • far ptr indica que la instrucción usa la dirección de segmento de etiqueta y la dirección de desplazamiento para modificar CS e IP

ejemplo:

assume cs:codesg
codesg segment
start:	mov ax,0
		mov bx,0
		jmp far ptr s
		db 256 dup(0)
	s: 	add ax,1
		inc ax
codesg ends
end start

Instrucción Jmp con dirección de transferencia en el registro

jmp 16位寄存器

Función: (IP) = (registro de 16 bits)

Instrucción Jmp con dirección de transferencia en memoria

jmp word ptr 内存单元地址(段内转移)

Función: Los datos de una palabra se almacenan a partir de la dirección de la unidad de memoria, que es la dirección de desplazamiento de destino de la transferencia. La dirección de la unidad de memoria se puede dar en cualquier formato del modo de direccionamiento.

ejemplo:

mov ax,0123H
mov ds:[0],ax
jmp word ptr ds:[0]
jmp dword ptr 内存单元地址(段内转移)

Función: Se almacenan datos de dos palabras desde la dirección de la unidad de memoria. La palabra en la dirección alta es la dirección del segmento de destino de la transferencia y la dirección baja es la dirección de desplazamiento de destino de la transferencia. Se puede dar la dirección de la unidad de memoria en cualquier formato del modo de direccionamiento.

  • (CS) = (dirección de la unidad de memoria + 2)
  • (IP) = (dirección de la unidad de memoria)

ejemplo:

mov ax,0123H
mov ds:[0],ax
mov	word ptr ds:[2],0
jmp dword ptr ds:[0]
mov ax,0123H
mov ds:[0],ax
mov	word ptr [bx+2],0
jmp dword ptr [bx]

instrucción jcxz

La instrucción jcxz es una instrucción de transferencia condicional Todas las instrucciones de transferencia condicional son transferencias cortas y el código de máquina correspondiente contiene el desplazamiento de transferencia en lugar de la dirección de destino. El rango de modificación de IP es ** - 128 ~ 127 **, y las instrucciones generales de transferencia condicional son todos los registros cx, como las instrucciones de bucle

jcxz 标号	(如果(cx)=0,则转移到标号初执行)

La operación de comando real de jcxz:

  • Cuando (cx) = 0, (IP) = (IP) + desplazamiento de 8 bits
    • Desplazamiento de 8 bits = la dirección en la "etiqueta" -la dirección del primer byte después de la instrucción jcxz
    • El rango de desplazamiento de 8 bits es -128 ~ 127, expresado en complemento
    • El compilador calcula el desplazamiento de 8 bits en tiempo de compilación
  • Cuando (cx) = 0, no hacer nada (el programa se ejecuta hacia abajo)

De hecho, también se puede entender como

if((cx)==0)
	jmp short 标号

instrucción de bucle

La instrucción de bucle es una instrucción de bucle Todas las instrucciones de bucle son transferencias cortas y el código de máquina correspondiente contiene el desplazamiento de transferencia en lugar de la dirección de destino. El rango de modificación de IP es ** - 128 ~ 127 **

loop 标号

La operación de instrucción real del bucle:

  • (Cx) = (cx) - 1

  • Cuando (cx)! = 0, (IP) = (IP) + desplazamiento de 8 bits

    • Desplazamiento de 8 bits = la dirección en la "etiqueta" -la dirección del primer byte después de la instrucción de bucle
    • El rango de desplazamiento de 8 bits es -128 ~ 127, expresado en complemento
    • El compilador calcula el desplazamiento de 8 bits en tiempo de compilación
  • Cuando (cx) = 0, no hacer nada (el programa se ejecuta hacia abajo)

De hecho, también se puede entender como

(cx)--;
if((cx)!=0)
	jmp short 标号

Supongo que te gusta

Origin blog.csdn.net/kelxLZ/article/details/111129414
Recomendado
Clasificación