stor variabel
stor variabel
Hej jag vet att svaret på denna frågan finns någonstans på internett, men jag vet inte riktigt vad jag ska söka på...
på mina variabler skriver jag Tex. "variabel1 equ 20h" men när jag sedan ska lägga in ett värde i den kan jag inte lägga in 100h för det säger den är förstort. Hur ska jag skriva för att variablen ska ta 2 minnes platser så att jag kan lägga i ett större värde?
Tack på förhand!
//Daniel A
på mina variabler skriver jag Tex. "variabel1 equ 20h" men när jag sedan ska lägga in ett värde i den kan jag inte lägga in 100h för det säger den är förstort. Hur ska jag skriva för att variablen ska ta 2 minnes platser så att jag kan lägga i ett större värde?
Tack på förhand!
//Daniel A
Du reserverar utrymmet med
för en variabel på 16 bitar (2 byte). Men hanteringen måste du sköta manuellt som två 8-bitars delar eftersom PIC16 inte hanterar mer än 8-bitars aritmetik.
Kod: Markera allt
ds.b 2
Bara för att komplettera lite...
Om du vill ha en 16-bitars "variabel" så får du alltså hantera det med
hjälp av två vanliga 8-bitars register. Obs att de *inte* behöver ligga
på två adresser direkt efter varandra i minnet, de kan naturligtsvis ligga
var som helst...
Sedan, när det gäller att räkna, så får man göra på i princip samma sätt
som när man räknar vanliga tal med papper och penna. Först räknar man
ihop entalen (i detta fall den "låga byten"). Man kollar om det blev någon
"minnessiffra" (i detta fall C-biten i STATUS registret) och ser till att
man lägger till den när man adderar den andra byten (d.v.s det som hade
varit 10-tals siffran i nornala fall). Sen är det bara att fortsätta med så många
bytes som man har (d.v.s 16, 24, 32 o.s.v bitars variabler).
För att subrahera gör man i princip likadant, man använder också där
C-biten i STATUS registret för att hantera "lånesiffra" mellan de olika
8-bitars bitarna av variabeln.
För mult/div blir det lite mer komplext. Dock är ju mult/div med 2, 4, 8
o.s.v enkelt, det är bara att shifta bitarna år det ena eller det andra hållet
i variabeln. Även här använder man C-biten i STATUS för att shifta bitarna
över flera 8-bitars register.
Om du vill ha en 16-bitars "variabel" så får du alltså hantera det med
hjälp av två vanliga 8-bitars register. Obs att de *inte* behöver ligga
på två adresser direkt efter varandra i minnet, de kan naturligtsvis ligga
var som helst...
Sedan, när det gäller att räkna, så får man göra på i princip samma sätt
som när man räknar vanliga tal med papper och penna. Först räknar man
ihop entalen (i detta fall den "låga byten"). Man kollar om det blev någon
"minnessiffra" (i detta fall C-biten i STATUS registret) och ser till att
man lägger till den när man adderar den andra byten (d.v.s det som hade
varit 10-tals siffran i nornala fall). Sen är det bara att fortsätta med så många
bytes som man har (d.v.s 16, 24, 32 o.s.v bitars variabler).
För att subrahera gör man i princip likadant, man använder också där
C-biten i STATUS registret för att hantera "lånesiffra" mellan de olika
8-bitars bitarna av variabeln.
För mult/div blir det lite mer komplext. Dock är ju mult/div med 2, 4, 8
o.s.v enkelt, det är bara att shifta bitarna år det ena eller det andra hållet
i variabeln. Även här använder man C-biten i STATUS för att shifta bitarna
över flera 8-bitars register.