Программа правильная? - PullRequest
0 голосов
/ 09 февраля 2012

Ниже приведена программа, которую я написал для умножения 2, 8-битных чисел.Один из моих друзей сказал, что программа неверна.Я не мог проверить это, поэтому я хотел проверить это.Я только начал изучать программирование на ассемблере.Следующая программа использует много регистров.

LDA C001H
MOV B,A
LDA C002H
MOV D,A
MOV C,0H
CMP C
JZ ZRESULT    // CHECKED FOR C002
MOV A,B
CMP C
JZ ZRESULT    // CHECKED FOR COO1

LOOP :  ADD A
        MOV E,A
        LDA 01H
        DEC D
        CMP D
        JZ ANSWER
        JNZ LOOP



 ZRESULT : LDA 0H
           STA 2500H
           OUT PORT1

 ANSWER :  MOV A,E
           STA 2500H
           OUT PORT1

Правильна ли эта программа?Если нет, пожалуйста, сообщите исправления в нем.

Ответы [ 2 ]

0 голосов
/ 09 февраля 2012

Вам необходимо обнаружить переполнение в цикле сложения.Наивным способом было бы проверить, уменьшается ли результат после добавления.Возьмите в качестве примера 20 * 13.20 * 12 даст 240 в регистре, но прибавьте 20 к этому, и вы не получите 260, вы получите 4 (260% 256).

Лучшим способом было бы проверить флаг переносав регистре условий.

0 голосов
/ 09 февраля 2012

Проблема в том, что умножение двух 8-битных чисел может дать вам 16-битный результат.Вы даете только 8-битный результат.

Вам нужно что-то сделать с результатом переноса операции ADD A.

...