Assembler och instruktionssekvenser
Hej, jag är lite fundersam över dessa två frågor kring hur jag skall tolka de, detta är den första frågan:
Antag att register A innehåller värdet 4 och att register X innehåller värdet . Vilken av följande instruktioner kan INTE användas för att hoppa till adress ? Dessa är val alternativ står i boken:
JMP #$28
BRA $28
JMP $28
JMP A,X
Min tanke är att det bör vara JMP #$28 men är lite osäker, har redan exkluderat den sista då man kan räkna ut det för hand.
Nästa fråga:
Beakta instruktionssekvensen nedan. På adress finns en utport vars initiala värde är . Vilket värde har utporten efter att sekvensen utförts?
LDA #23
DECA
BEQ SKIP
NOSKIP FCB $F0,$01
SKIP DECA
STA $FB
NOP
21, 00, 37, 255 (decimalt)
Denna sekvens förstår jag tills jag kommer till -> NOSKIP FCB $F0,$01. Här förstår jag inte riktigt vad som händer och hur det påverkar sekvensen, tänker att FCB egentligen inte bör ändra på programmet så mycket så min tanke är att värdet på utporten bör vara 21. Men är inte säker.
Vad är det för processor? Jag kan bara göra väldigt osäkra gissningar. Vad FCB gör kan jag inte alls gissa.
NOSKIP ser ut att bara vara en label.
http://www.cse.chalmers.se/edu/year/2014/course/EDA216/FlisProcessorHandbok-A4.pdf
Det har krånglat till det med flit:
FCB $F0,$01 är hex-värdet för instruktionen "LDA #$01"
Programmeraren skrev:http://www.cse.chalmers.se/edu/year/2014/course/EDA216/FlisProcessorHandbok-A4.pdf
Det har krånglat till det med flit:
FCB $F0,$01 är hex-värdet för instruktionen "LDA #$01"
Jaha okej, men då bör väl värdet på utporten vara 0 då eftersom man laddar A med 01?
Ja (om instruktionen kördes men det vet du säkert själv om den gjorde eller inte!)
Programmeraren skrev:Ja (om instruktionen kördes men det vet du säkert själv om den gjorde eller inte!)
Tack så mycket, du är verkligen räddaren i nöden. Väldigt imponerande hur du kan detta så lätt då många har problem med det (jag är en av de).
Här hade de krånglat till på ett sätt som inte förekommer i en verklig situation, lite krystat kan jag tycka.
Lärde mig först assembler på C64 (6502) och då var det maskinkodsmonitor som gällde, inga labels eller annan "lyx". Man skrev instruktionerna och den översatta direkt till värdena, alltså som en "instruktionsvy" direkt på minnet.
När man tävlade i "snabbaste sättet att rita en linje" sparade man mikrosekunder på att låta programmet skriva in DEC eller INC i loopen för att slippa en branch ("självmodifierande kod"). Det påminner en smula om denna uppgift.
Programmeraren skrev:Här hade de krånglat till på ett sätt som inte förekommer i en verklig situation, lite krystat kan jag tycka.
Håller med. I så fall ska även en disassembler ingå i elevernas verktyg.