Я пытаюсь использовать подпрограмму в ассемблере для печати только четных чисел из таблицы, но программа все равно будет распечатывать нечетные числа, и я не уверен, как.
Вот код для подпрограммы...
* 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
Как вы можете сказать, он напечатает четные числано он также будет выводить нечетные числа, которые кажутся случайными, я подозреваю, что это как-то связано с операциями 'сравнивать' и 'условие ветвления', но я смог получить только выходные данные либо со всеми нечетными числами, либо свывод выше.
Заранее благодарю за любые предложения и советы.