Implementación de un código
DATA SEGMENT
ARRAY1 DB 2,5,0,3,-4,5,0,0AH,0FH
ARRAY2 DB 3,5,4,-2,0,8,3,-0AH,20H
COUNT DB $-ARRAY2
LEN DB ?
SUM DB 20H DUP(0)
DATA ENDS
STACK1 SEGMENT PARA STACK 'STACK'
DW 20H DUP(0)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA;把数据段传给AX
MOV DS,AX;AX进堆栈
MOV BX,-1;初始化BX为-1,是数组从第一个元素开始处理
MOV CX,0;清零CX
MOV CL,COUNT ;把数组的长度传给CL
NOZERO: INC BX;增量指令,是BX加一处理下一个数组元素
MOV AL,ARRAY1[BX];把数组1的元素传给AL
ADD AL, ARRAY2[BX];令数组2与数组1对于的元素相加
MOV SUM [BX],AL;把相加的结果传给SUN[BX]
LOOPNE NOZERO;循环执行,直到处理完数组的所有元素
JE ENDO;循环结束,调到ENDO语句
INC BL;增量指令
ENDO: MOV LEN,BL;把BL统计的相加后的数组长度传给LEN
MOV AH,4CH;返回DOS
INT 21H;停机
CODE ENDS
END START
Verifique el primer ciclo.
Puede ver que 001C es la sentencia de juicio de inicio
para el siguiente ciclo. Ingrese g = 0000 001C para verificar el primer ciclo, AL = 05, que es el resultado de agregar el primer elemento de las dos matrices, correcto.
Se puede inferir que la dirección lógica de la matriz 1, 2 es 0000 y la matriz agregada es 0010, y el resultado es 05, 0A, 04, 01, FC, 0D, 03, 00 respectivamente. Cuando ZF = 1, el ciclo termina.
2.
Comando Debug U
Puede ver la dirección de cada instrucción para las siguientes operaciones de depuración
Verifique el primer ciclo del comando G.
Ingrese g = 0000 001C para verificar el primer ciclo, AL = 05, que es el resultado de agregar el primer elemento de las dos matrices, correcto.
El primer ciclo del comando R, el ciclo no ha terminado. En este momento, la bandera ZF es NE, es decir, ZF = 0, y el ciclo continúa.
Cuando finaliza el ciclo, la bandera ZF es ZR, es decir, ZF = 1, que cumple con las características de LOOPNE y es correcta.
El comando D
puede inferir que la dirección lógica de la matriz 1, 2 es 0000 y la matriz agregada es 0010, y el resultado es 05, 0A, 04, 01, FC, 0D, 03, 00 respectivamente. El libro decimal correspondiente es 5,10,4,1, -4,13,3,0. Cuando ZF = 1, el ciclo termina. El resultado es el mismo que la realidad y el resultado es correcto.