Gämföra lösen i ASM
Gämföra lösen i ASM
Hej, jag håller på att bygga ett kodlås av en PIC16F877A men jag vet inte riktigt hur jag ska göra. Jag tänkte göra så att jag har 4st variabler (4 siffers kod) som det läggs ett tal mellan 0 och 9 i. Sen ska den gämföra med en inproggramerad kod om det är samma, men hur??
Mvh. Daniel Andersson
Mvh. Daniel Andersson
Tack! Jag fattar
Men jag tror att jag väljer första alternativet.
Om jag skriver
(var1-4 är rätt kod, var5-8 är inknappad kod)
Sen måste jag kolla om alla är 0, hur gör man det på lättaste sättet?
Jeppson: Misstänkte det
//Daniel A

Om jag skriver
(var1-4 är rätt kod, var5-8 är inknappad kod)
Kod: Markera allt
movfw var5
subwf var1, destination1
movfw var6
subwf var2, destination2
movfw var7
subwf var3, destination3
movfw var8
subwf var4, destination4
Jeppson: Misstänkte det

//Daniel A
Den biten förstår jag, men är det lättaste att ta det i "steg" eller kan man ta alla i samma vända?
Exempel på stegvis koll:
Edit: Det funkar inte.. Det är ju inte bara en bit.. Destinationen av den andra uträckningen blir ju en hel byte.. Om man tar "movfw" och kollar zero flag borde det gå!?
Mvh. Daniel Anderson
Exempel på stegvis koll:
Kod: Markera allt
BTFSS destination1
call lab1
bcf korekt_kod
return
lab1
BTFSS destination2
call lab2
bcf korekt_kod
return
lab2
BTFSS destination3
call lab3
bcf korekt_kod
return
lab3
BTFSS destination4
call lab4
bcf korekt_kod
return
lab4
bsf korekt_kod
return
Mvh. Daniel Anderson
Denna koden borde räcka??
Kod: Markera allt
check_code
;-- var1-4 = Rätt kod
;-- var5-8 = inknappad kod
;********
movfw var5
subwf var1, destination1
movfw var6
subwf var2, destination2
movfw var7
subwf var3, destination3
movfw var8
subwf var4, destination4
movfw destination1
btfsc STATUS, Z
call lab1
bcf correct_code
return
lab1
movfw destination2
btfsc STATUS, Z
call lab2
bcf correct_code
return
lab2
movfw destination3
btfsc STATUS, Z
call lab3
bcf correct_code
return
lab3
movfw destination4
btfsc STATUS, Z
call lab4
bcf correct_code
return
lab4
bsf correct_code
return
Eftersom det är mellan 0 och 9 så kan du göra detta.
En bonus med detta är att en timingattack är svår att utföra.
Edit: rättade koden lite
En bonus med detta är att en timingattack är svår att utföra.
Kod: Markera allt
//c-kod, men lätt att fixa i asm
function test(){
sum = 0;
sum = sum + (input0 xor code0);
sum = sum + (input1 xor code1);
sum = sum + (input2 xor code2);
sum = sum + (input3 xor code3);
if(sum == 0){
return true;
}else{
return false;
}
}
Senast redigerad av Micke_s 2 juli 2007, 22:16:38, redigerad totalt 1 gång.
Så här kanske
Nu vet jag inte om syntaxen stämmer med din ASM.
Kod: Markera allt
movfw var5
subwf var1
BTFSS STATUS, Z
BRA FELKOD
movfw var6
subwf var2
BTFSS STATUS, Z ; Testa om Z är satt
BRA FELKOD ; Om nej, fel siffra hoppa till "FEL KOD"
movfw var7
subwf var3
BTFSS STATUS, Z
BRA FELKOD
movfw var8
subwf var4
BTFSS STATUS, Z
BRA FELKOD
Jag har modifierat koden lite nu (hoppas att jag inte har förstört den
).
Om koden är rätt kommer "correct_code" flaggan vara satt annars är den nollad.
Tack för all hjälp alla!
Mvh. Daniel Andersson

Om koden är rätt kommer "correct_code" flaggan vara satt annars är den nollad.
Kod: Markera allt
test_code
;-- var1-4 = Rätt kod
;-- var5-8 = inknappad kod
;********
bsf correct_code
movfw var5
subwf var1
BTFSS STATUS, Z
bcf correct_code
movfw var6
subwf var2
BTFSS STATUS, Z ; Testa om Z är satt
bcf correct_code ; Om nej, fel siffra skriv en nolla till "correct_code"
movfw var7
subwf var3
BTFSS STATUS, Z
bcf correct_code
movfw var8
subwf var4
BTFSS STATUS, Z
bcf correct_code
return
Mvh. Daniel Andersson