Zwykle wykorzystywałbyś moduł, aby określić to, ale ponieważ nie jest to opcja próbowałem użyć powtarzanej pętli odejmowania i wykorzystywania Skipcond400, aby określić, czy wartość była równa 0. To było doskonale w porządku, jeśli za każdym razem miałem wprowadzić liczbę To było nawet. Problemem, który posiadam, jest to, że liczba jest dziwna, że warunek nigdy nie zostanie spełniony w wyniku nieskończonej pętli. Mogę użyć Skipcond000 jako alternatywy, ale nie byłoby w stanie mi powiedzieć, czy liczba jest nawet dlatego, że liczby dziwne nigdy nie równe 0, ponieważ nie można ich podzielić w parach. Utknąłem, jak nawet określić to, ponieważ mój ostateczny cel jest użycie tego, aby dodać wszystkie liczby parzyste prowadzące do określonej wartości. Aby to zrobić, choć najpierw potrzebowałbym, aby ustalić, czy wejście użytkownika jest nawet lub dziwne, więc tak w ten sposób mogę mieć inny zestaw instrukcji. Do tej pory miałem coś takiego, ale legalnie nie mam pojęcia, gdzie wyjdź stąd. Czy zbliżam się do tego całkowicie złego?

ORG 100

Input
Store y //store input in a variable thats not messed with

Load y

Store x //store a duplicate of the input so i can mess with it 


loop, Load x  // loop that does repeated subtraction  

Subt two

Store x

Skipcond 400

Skipcond 000

Jump loop


x, DEC 0

counter, DEC 0

two, DEC 2
1
Sub-Z 14 kwiecień 2021, 03:24

2 odpowiedzi

Najlepsza odpowiedź

Oryginalny kod jest używany prawidłowy podejście do rozwiązania zadania. Poniższy kod pseudo jest skonstruowany, aby pokazać, jak można użyć ograniczonego odgałęzienia się w Marie. Korzystanie z nazw etykiet Komentarze mogą pomóc w zilustrowaniu oczekiwań w różnych oświadczeniach.

  load X into accumulator
detect_even:
  substract 2 from accumulator
  skip if accumulator is positive
    goto zero_or_neg
  # 'accumulator is positive'
  goto detect_even
zero_or_neg:
  # accumulator is -1 or 0
  skip if accumulator is zero
    goto not_even
  # 'accumulator is zero'
  # no op, goto even, or omitted instruction
even:
  # here X is even as accumulator is 0
  # use X, perhaps add to running total?
not_even:

Należy pamiętać, że akumulator jest ponownie użyty do pierwotnej pętli wykrywania, podobnie jak X - Y - Y - Y - ... YMMV z liczbami ujemnymi.

0
user2864740 18 kwiecień 2021, 20:43

Nie ma instrukcji AND na Marie, która na innych maszynach byłaby użyta do łatwego izolowania najniższego bitu.

Istnieje kilka technik, których można użyć. Łącząc Skipcond jest super mylący, ale może być wykonany do pracy. Należy jednak pamiętać, że Skipcond faktycznie nie może zrobić wszystkich warunków, które chcielibyśmy to zrobić, robimy w końcu uciekanie się do sprytnych sekwencjach, jak sugerujesz.

Twoja sekwencja będzie kontynuowana, gdy bieżąca wartość wynosi zero, którą myślę, jest błąd.

Wierzę, co chcesz zrobić, jest kontynuować pętlę modułową tylko wtedy, gdy wartość is & gt; 0. Zobacz tę odpowiedź (tabela pod koniec), aby zidentyfikować sekwencje dla tego: https://stackoverflow.com/a/66725608/471129 \ t.

Należy również być w stanie użyć wielu Skipcond s w sekwencji, ale być powtarzalnym, super mylącym, choć powinno być możliwe do użytku.


Alternatywą jest przesunięcie odrębnego zainteresowania. Za każdym razem, gdy podwoiłeś numer, który można wykonać, dodając do siebie, który będzie wykonać lewą zmianę. 15 z nich przesunie LSB (co mówi nam, czy numer jest nawet / nieparzysty) do pozycji MSB, która może być testowana przy użyciu Skipcond.

0
Erik Eidt 14 kwiecień 2021, 00:49