xoma90
@xoma90
Студентка,пока учусь за глупые вопросы не стыдно:D

В асме проблема с флагом четности, есть ли ошибка в программе?

Добрый день, не могу найти ошибку в программе, почему то в CL записывается число 5. Он берет данные из 6 ячейки памяти, а как его заставить рассматривать и проверять именно содержимое ячейки?

Задание: Занести в область памяти ds:0008Н - ds:0027Н последовательность констант 0Н - 19Н и найти среди них третье по счету четное число, записать это число в регистр СL.

Вот код программы
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
  • Вопрос задан
  • 148 просмотров
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert

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

1) флаг P -- это не признак чётности числа, а признак наличия нечетного числа единичных битов в регистре. Чётность числа зависит от 0 или 1 в его младшем разряде.
2) Загрузка значения в регистр не меняет никакие флаги.

Т.е. правильно будет, например, так:
mov al,ds:[si]
test al, 1
jz    m4             ;переход, если число чётное
jmp   m3             ;переход, если число нечётное
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы