Мари не печатает окончательный вывод
Я пишу код для умножения трех чисел.
A x B x C = Z Вы должны ввести все начальные значения. Существует также переменная вреда P. Вы вводите в этом порядке A B C Z P... A B & C может быть любым. Z вводится как 0, а P как 1. (Если вы можете показать мне, как просто установить их начальные значения, это тоже было бы здорово.)
Моя настоящая проблема в том, что когда я иду к выводу Z в конце программы, он либо печатает пробел, либо x. Любая помощь будет принята с благодарностью.
ORG 100
INPUT /USER INPUT VARIABLE
STORE A /STORE IN MEM LOCATION
OUTPUT /SHOW WHAT USER ENTERED
INPUT /USER INPUT VARIABLE
STORE B /VARIABLE B
OUTPUT
INPUT /VARIABLE C
STORE C
OUTPUT
INPUT
STORE Z
OUTPUT
INPUT
STORE P
OUTPUT
LOOP, LOAD Z /START LOOP TO ACCUMULATE A
ADD A
STORE Z
LOAD B
SUBT P /DECRIMENT VARIABLE B
STORE B
SKIPCOND 01 /CHECK IF B = 0
JUMP LOOP /REPEAT LOOP UNTIL B = 0
LOOP2, LOAD Z
ADD A
STORE Z
LOAD C
SUBT P /DECRIMENT C
STORE C
SKIPCOND 01 / CHECK IF C = 0
JUMP LOOP2 /REPEAT LOOP UNTIL C = 0
CLEAR
LOAD A
STORE A
CLEAR
LOAD Z
STORE Z
OUTPUT /DON'T KNOW WHY IT WON'T PRINT
HALT
A, DEC 0
B, DEC 0
C, DEC 0
Z, DEC 0
P, DEC 0
1 ответ
К сожалению, я опоздал на этот вопрос более чем на полтора месяца, поэтому вам, возможно, больше не понадобится помощь, но я считаю, что ваша проблема на самом деле довольно проста. Похоже, у вас скорее всего установлен режим вывода ASCII (по умолчанию) вместо десятичного (декабрь). Смотрите скриншоты ниже:
Также убедитесь, что вы выбрали правильный тип ввода, иначе ваши ответы, скорее всего, будут неправильными:
Что касается того, как вы можете установить их начальные значения, вы на самом деле уже делаете это, включая следующее:
A, DEC 0
B, DEC 0
C, DEC 0
Z, DEC 0
P, DEC 0
Эти строки инициализируют значения до нуля изначально. Поэтому, если P и Z должны быть равны нулю и на самом деле не требуют ввода пользователя, вы можете просто пропустить получение пользователем ввода для них. Однако, если вы хотите сбросить значения, вы можете просто сделать следующее:
/ ... Some stuff going on before you want to reset the values...
Clear / This will reset the value in AC to 0.
Store P / Store current AC Value (0) in memory at P
Store Z / Store current AC Value (0) in memory at Z
/ ... Store it wherever you want to reset values to Zero
/ Proceed with the rest of your program now that the values are reset.
/ And down at the bottom like normal:
A, DEC 0
B, DEC 0
C, DEC 0
Z, DEC 0
P, DEC 0
Одна вещь, которую я обычно люблю делать, это настроить подпрограмму для сброса всей памяти. Итак, я бы создал что-то вроде следующего:
TempAcValStorage, Dec 0 / Used to preserve value on AC so it is not lost when clearing
InitializeVals, HEX 0
Store TempAcValStorage / Store current AC val
CLEAR / Set value of AC to 0
STORE A / Store 0 in variable
STORE B / Store 0 in next variable
STORE C / ...
STORE Z
STORE P / Store 0 in last variable
Load TempAcValStorage / Restore whatever was on AC
JumpI InitializeVals
/ ... Futher down in my code when I need to initialize or reset my
/ values, I just execute a Jump-and-Store for InitializeVals:
JnS InitializeVals
Преимущество этой подпрограммы состоит в том, что она сохраняет значение в контроллере переменного тока, поэтому вы не потеряете его при сбросе значений всех ваших сохраненных переменных.