A
A
Alexandra2016-06-15 13:10:00
assembler
Alexandra, 2016-06-15 13:10:00

There is a problem with the parity flag in asma, is there an error in the program?

Good afternoon, I can’t find an error in the program, for some reason the number 5 is written to CL. It takes data from the 6th memory cell, but how can I force it to consider and check exactly the contents of the cell?
Task: Enter the sequence of constants 0Н - 19Н into the memory area ds:0008Н - ds:0027Н and find the third even number among them, write this number into the CL register.
Here is the program code

code segment 
assume cs:code, ds:code 

start:
mov al,0h
mov si,0007h

m1:
inc si				 ;следующее число
mov ds:[si],al       ;запись в память
inc   al             ;следующее число
cmp si,0027h           ;проверка на равность 27
je   m2              ;переход в m2 если равно
jmp  m1              ;если не равно возвращаемся в m1

m2:
mov si,0007h

m3:
inc si
mov al,ds:[si]
jp    m4             ;переход, если установлен флаг четности P=1
jnp   m3             ;переход, если установлен флаг четности P=0

m4:
inc  dl             ;счетчик четных чисел
cmp dl,3             ;проверка на равность 3
je   m5              ;переход в m3 если равно
jmp  m3              ;если не равно возвращаемся в цикл

m5:
mov cl,al

code ends
end start

Answer the question

In order to leave comments, you need to log in

1 answer(s)
J
jcmvbkbc, 2016-06-15
@xoma90


mov al,ds:[si]
jp    m4             ;переход, если установлен флаг четности P=1
jnp   m3             ;переход, если установлен флаг четности P=0

1) the P flag is not a sign of the parity of a number, but a sign of the presence of an odd number of single bits in the register. The parity of a number depends on 0 or 1 in its least significant digit.
2) Loading a value into a register does not change any flags.
Those. it would be correct, for example:
mov al,ds:[si]
test al, 1
jz    m4             ;переход, если число чётное
jmp   m3             ;переход, если число нечётное

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question