Ansamblul LC-3 Scăderea a două numere (Programare, Asamblare, Lc3)

mandy a intrebat.

Am o problemă cu această întrebare, deoarece sunt nou în programarea LC-3.

Scrieți un cod LC-3 pentru a scădea valoarea din R1 din valoarea din R0 și a plasa rezultatul în R5. Adică, scrieți codul de asamblare pentru R5 := R0 – R1. Să presupunem că R1=10 și R0 este 12.

utilizator5398967

1 răspunsuri
user5398967

Conform întrebării tale, putem presupune că 12 și 10 sunt deja în R0 și R1, deci algoritmul corect începe de la NOT și se termină la HALT; cu toate acestea, celelalte instrucțiuni sunt incluse pentru a vă permite să executați acest cod.

Soluția este de a adăuga R0 cu -R1. Se constată că -R1 făcând inversiunea în sens biometric (NOT) pe numărul din R1 și adăugând 1. Aceasta ne dă negația complementului la 2 al lui R1.

Dacă nu înțelegeți aritmetica complementului lui 2, vă sugerez să căutați aici. După ce s-a efectuat scăderea, restabilim numărul original la R1.

.orig x3000

LD R0, A        ; A(12) => R0 (this is assumed)
LD R1, B        ; B(10) => R1 (this is assumed)
                ; find negative of the two's complement number in R1
NOT R1, R1
ADD R1, R1, 1
ADD R5, R0, R1  ; R0 - R1 => R5
LD R1, B        ; Restore R1
HALT

A .fill 12
B .fill 10

.end

Comentarii

  • Hei Tyler, am rulat programul, dar nu afișează niciun rezultat. Fereastra de consolă a LC-3 afișează doar „Halting the Processor”.. te rog să-mi spui de ce afișează această declarație?. –  > Por mandy.
  • Din câte am înțeles, programul nu ar trebui să afișeze nicio ieșire (cel puțin pe consolă). Instrucțiunile au fost de a „plasa rezultatul în R5”. – user5398967
  • Ohh ok… Tyler Mulțumesc pentru ajutor,,,, 🙂 –  > Por mandy.
  • În loc să distrugi R1 și să reîncarci, ai putea să NU în R5 pentru a produce R5 := ~R1, și așa mai departe de acolo. –  > Por Peter Cordes.