Простая операция вычитания с 8 битами - PullRequest
0 голосов
/ 24 февраля 2019

Это мой код:

init:
    ; expected to go in "zero" part
    mvi a, 0ah
    mvi e, 05h
    ; content of reg b is "251"

    ; expected to go in "zero" part
    ;mvi a, 0ah
    ;mvi e, 0ah
    ; if followed two are commented out content of reg b is "254"


    ; expected to go in "minus" part
    ;mvi a, 0ah
    ;mvi e, 03h
    ; if followed two are commented out content of reg b is "254"


    ; expected to go in "minus" part
    ;mvi a,0ah
    ;mvi e,0bh
    ; if followed two are commented out content of reg b is "255"

subtractionLoop:
    sub e
    jp subtractionLoop
    jz zero
    jm minus

minus:
    mvi b, 0ffh
    ; print value as 255 to see it comes within "minus" part
    ; the part means last result is minus, so we can get remainder by adding
    ; content of reg E only one time
    hlt

zero:
    mvi b, 0bh
    ; print value as 11 to see it comes within "zero" part
    hlt

Я просто пытаюсь добиться простого деления, но я получаю разные и интересные результаты, когда вы читаете комментарии (;).

Моя идея заключается в следующем:
Пока дивиденд положительный, subtractionLoop идет на вычитание.Если он достигает 0, переходите к нулевой части.В противном случае перейдите к минусовой части.

Где / где моя ошибка / с?
Скачки не кажутся правильными.

1 Ответ

0 голосов
/ 13 мая 2019

Вот что происходит:

  1. mvi a, 0ah

    a установлено 10.

  2. mvi e, 05h

    e установлено на 5.

  3. sub e

    a установлено на 10 - 5, то есть 5.Флаг знака сбрасывается, что означает, что результат не является отрицательным.

  4. jp subtractionLoop

    Переход к sub e.

  5. sub e (снова)

    a установлен на 5 - 5 = 0. Флаг знака все еще сбрасывается.

  6. jp subtractionLoop

    Перемещает элемент управления обратно на sub e еще раз.

  7. sub e

    a установлен на 0 - 5 = -5, чтозначение без знака равно 256 - 5 = 251. Флаг знака на этот раз поднимается.

Так что я предполагаю, что это значение регистра a, которое вы просматриваете, когда высмотрите 251, а не значение регистра b.

Обратите внимание, что прыжок jz никогда не передаст управление zero:, так как нулевой результат в a оставит флаг знакадокторopped, и поэтому предыдущая инструкция jp выполнит свою работу, перейдя к началу цикла.

...