Неверный вывод при проверке четных чисел в ассемблере - PullRequest
0 голосов
/ 14 октября 2018

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

Вот код для подпрограммы...

*  Register usage:
*    1        Used by XDECI
*    2        Line string location
*    3        Table address
*    4        EOT address
*    5        Length of table address
*    6        Table Var
*    7        used in division
*    8        Width counter
*   10        Return address
*   13        params
*   14        DONT USE
*   15        Base register
*
***********************************
EVENS    DS    0H           Start of subroutine
         XPRNT EHEAD,48     Print table head
         LM    3,5,0(13)    Load params into R3,R4, and R5
         L     5,0(0,5)     Load lenght of table
ELOOP    L     8,=F'5'      Table width counter
         LA    2,PLINE+1    Load pointer to print line
         MVI   PLINE+1,C' ' Clear print line
         MVC   PLINE+2(71),PLINE+1
         C     5,=F'0'      Check if we have printed the table
         BE    EEND         Goto end of subroutine if true
ELOOP1   C     5,=F'0'      Check if we have printed the table
         BE    EEND1        Goto end if true
         L     7,0(0,3)     Load the current number
         S     5,=F'1'      Decrement table length
         M     6,=F'1'      Check if even
         D     6,=F'2'      Check if even
         C     6,=F'1'      Check if even
         BC    B'1010',SKIP Skip printing if ODD
         L     6,0(0,3)     Load the current number
         XDECO 6,TEMP       Hex to Dec
         MVC   0(12,2),TEMP Store Dec in print line
         LA    2,12(0,2)    Advance print line pointer
         S     8,=F'1'      Decrement line counter
SKIP     LA    3,4(0,3)     Advance table pointer
         C     8,=F'0'      check if Pline is full
         BNE   ELOOP1       Goto top of loop1
         XPRNT PLINE,73     Print print line
         B     ELOOP        Goto top of loop
EEND1    XPRNT PLINE,73     Print print line
EEND     BR    10           End of subroutine
***********************************
         LTORG                Literals are put here
TABLE    DS    49F'-16'
EOT      DS    0H
TABLELEN DS    F'0'
PHEAD    DC    CL44'1                            List of Numbers'
EHEAD    DC    CL49'1                            List of Even Numbers'
TEMP     DS    CL12' '
PARMS    DS    F'0'
         DS    F'0'
         DS    F'0'
PLINE    DC    CL1'0'
         DS    CL72' '
BUFFER   DS    80C
         DC    C'*'
         END   MAIN

здесь ввод

11008       14989         485          23        9503           6                                                         
   76           4           6      -18467        -169         -58                                                         
 5705      -16827        2995        5436         902         382                                                         
  718      -26924          29          97        3290         355                                                         
   74        -350        -724           7         -37          53                                                         
-8909          21          46          13         588          10                                                         
   26       -1869       -6299          26         333      -15141                                                         
  868         662         859        -529          35        -288                                                         
-8942  

и вывод, который он выдает

 11008           6          76           4           6                                                                     
-18467        -169         -58      -16827        5436                                                                              
   902         382         718      -26924        3290                                                                     
    74        -350        -724         -37       -8909                                                                     
    46         588          10          26       -1869                                                                     
 -6299          26      -15141         868         662                                                                     
  -529        -288       -8942

Как вы можете сказать, он напечатает четные числано он также будет выводить нечетные числа, которые кажутся случайными, я подозреваю, что это как-то связано с операциями 'сравнивать' и 'условие ветвления', но я смог получить только выходные данные либо со всеми нечетными числами, либо свывод выше.

Заранее благодарю за любые предложения и советы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...