Problem med Simulering av assembler.

Permalänk
Medlem

Problem med Simulering av assembler.

Hej,

Jag håller på och lär mig att göra de enkla sakerna i maskinspråk tex addition, division, multiplikation osv. Ren kalkylator alltså.

Uppgiften jag håller på att göra ser ut så här;

Skriv program som läser indata från minnet, utför additionerna/subtraktionerna nedan och
sparar resultatet i minnet:
a) 8 + 5
b) 24 – 12
c) -125 – 30

a) och b) Klarar jag av. Visst är det så att på b) så gör man 24 + (-12) då man endast kan addera?

Då borde c) funka att man räknar ut -125+(-30)?

I hex blir det: FFFFFFFFFFFFFF83 + FFFFFFFFFFFFFFE2
Som svar får jag ut: FFFFFF65, är det detsamma som FFFFFFFFFFFFFF65? I så fall så får jag ut det rätt. Vet inte om att det är så att jag bara kan få ut 8 siffror i svaret. Men när jag kör i calculatorn på datorn och omvandlar FFFFFF65 till decimaltal så blir det helt annorlunda jämfört med FFFFFFFFFFFFFF65 som blir -155 vilket är rätt.

Jag kan skriva ner hela programmeringsförloppet om det hjälper. Kan vara jag som har fått allt med hextalen om bakfoten.

1010
1111
5210
3212
C000

FFFFFFFFFFFFFF83
FFFFFFFFFFFFFFE2
FFFFFF65

Tackar på förhand. Är helt ny inom maskinspråk eller programmering över huvud taget.

Visa signatur

Stationär: Intel Core i5 2500k @ 5Ghz. 8192Mb 1600Mhz. OS disk: 60GB Agility 3 550/500.
ATI Radeon 6870 @ 970Mhz/1125Mhz Bärbar: Macbook Pro Retina 15" i7 2.7Ghz 16GB 512GB SSD 2013"

Permalänk
Medlem
Skrivet av ZaXoR:

I hex blir det: FFFFFFFFFFFFFF83 + FFFFFFFFFFFFFFE2
Som svar får jag ut: FFFFFF65, är det detsamma som FFFFFFFFFFFFFF65? I så fall så får jag ut det rätt. Vet inte om att det är så att jag bara kan få ut 8 siffror i svaret. Men när jag kör i calculatorn på datorn och omvandlar FFFFFF65 till decimaltal så blir det helt annorlunda jämfört med FFFFFFFFFFFFFF65 som blir -155 vilket är rätt.

0xFFFFFF65 är INTE samma sak som 0xFFFFFFFFFFFFFF65. Tänk dig att det är "vanliga" tal med basen tio, då vore det som att fråga om 10000000 är samma sak som 1000000000000000. Och det vet du ju svaret på Du skriver att FFFFFFFFFFFFFF65 är -155, hur kommer du fram till det? FFFFFFFFFFFFFF65 är 18446744073709551461 i basen tio.

Permalänk
Medlem
Skrivet av pelleplu:

0xFFFFFF65 är INTE samma sak som 0xFFFFFFFFFFFFFF65. Tänk dig att det är "vanliga" tal med basen tio, då vore det som att fråga om 10000000 är samma sak som 1000000000000000. Och det vet du ju svaret på Du skriver att FFFFFFFFFFFFFF65 är -155, hur kommer du fram till det? FFFFFFFFFFFFFF65 är 18446744073709551461 i basen tio.

Nu när du skriver det så låter det ganska självklart, hehe.

Enligt windows egna calculator om man kör i programmeringsmode så gör den om -155 till FFFFFFFFFFFFFF65.
Vad blir -155 i hex? Eller negativa tal överhuvud taget.

Visa signatur

Stationär: Intel Core i5 2500k @ 5Ghz. 8192Mb 1600Mhz. OS disk: 60GB Agility 3 550/500.
ATI Radeon 6870 @ 970Mhz/1125Mhz Bärbar: Macbook Pro Retina 15" i7 2.7Ghz 16GB 512GB SSD 2013"

Permalänk
Medlem

Tvåkomplementsform
http://sv.wikipedia.org/wiki/Tv%C3%A5komplementsform borde innehålla det mesta.

Permalänk
Medlem
Skrivet av ZaXoR:

a) och b) Klarar jag av. Visst är det så att på b) så gör man 24 + (-12) då man endast kan addera?

Hmm. Om du med assembler menar vanlig x86 asm så har du ju sub (subtract).
mov eax,24
sub eax,12

Edit: Ah, det var nog inte det. Hah, måste nog läsa mer först innan jag postar.

Permalänk
Medlem

Så, nu har jag äntligen fått till det. Jag hade gjort helt fel när jag gjorde om till hex från bas 10. Eller när man använder kalkylatorn i datorn och gör om så använder den inte 2-komponents-metoden som jag behövde använda för att få det här att fungera. Nu räknade jag själv på papper och då blev det så mycket enklare. -155 var 83 i hex.

Tack så mycket för hjälpen alla som har skrivit.

Visa signatur

Stationär: Intel Core i5 2500k @ 5Ghz. 8192Mb 1600Mhz. OS disk: 60GB Agility 3 550/500.
ATI Radeon 6870 @ 970Mhz/1125Mhz Bärbar: Macbook Pro Retina 15" i7 2.7Ghz 16GB 512GB SSD 2013"