Og ARM (eller til og med x 86) MCU / CPU med von Neumann-struktur, adresseområdet er enhetlig og kontinuerlig, kodeminne / RAM / CPU-registre, og til og med PC-videominne adresseres alle jevnt. Det' s bare at minne med forskjellige funksjoner opptar forskjellige adresseblokker, og de gjør sine egne ting.
Ok, la&nr. 39 gå tilbake til MCS-51.
For programminne er det to deler: on-chip og off-chip. Og uansett programminne på chip eller programminne utenfor chip deles adressene deres. Hvis det er 4k ROM på brikken, er adressen 0x0000-0x0FFF, og 0x1000-0xFFFF er adresseområdet til den eksterne ROMen. Om 0x0000-0x0FFF-delen av den eksterne ROMen brukes, avhenger det av nivåverdien til EA-pinnen til mikrokontrolleren. Når EA=1 brukes denne delen av den interne ROMen, og denne delen av den eksterne ROMen blir bortkastet og ikke brukt; når EA=0, brukes denne delen av den eksterne ROMen, og den interne ROMen blir bortkastet og ikke brukt. For å lese data fra CODE-segmentet, bruk den monterte MOVC-instruksjonen. Enbrikkemikrodatamaskinen vil automatisk bestemme hvilket minne du skal hente data fra i henhold til MOVC-instruksjonen, EA-status og adresseverdien som skal leses
For dataminne er det delt inn i to deler: internt dataminne (IDATA / RAM) og eksternt dataminne (XDATA), men disse to minnene deler ikke adresseplassen som kodeminne. Den generelle 8051-brikken, den interne RAM-en er bare 128B, fra 0x00-0x7F, og fra 0x80-0xFF er SFR-området (CPU-arbeidsregister og forskjellige perifere register er her). For 8052 har intern RAM 256B, så 0x80-0xFF er den høye 128B RAM i bruk. Men er ikke' ikke denne delen dedikert til SFR? Det 39 er dedikert til SFR, men merk at SFR-tilgang bare kan bruke" direkte adressering" (implementert ved bruk av spesifikke monteringsanvisninger), er forskjellen her. Bare adressen som direkteadressering er SFR, ellers er det vanlig RAM. Når det gjelder utvidet RAM (XDATA), er adressen også fra 0x0000-0xFFFF, og 0x0000 her er forskjellig fra 0x00 av det interne RAM, og de er helt uavhengige av to mellomrom. Deres tilgangsmetoder er også forskjellige. MCS-51 bruker MOVX-instruksjon for å lese og skrive XDATA-området. Videre krever tilgang til XDATA-området hjelp fra DPTR-registeret. Fordi bare DPTR kan ha den neste 16-biters XDATA-adressen.
Så MCS-51 har den raskeste lese- og skrivehastigheten til IDATA-området og de fleste tilgangsmetodene. Hastigheten til tilgang til XDATA-området er relativt treg. Stakken med MCS-51 bør først utvikles i IDATA-området, og stakken som åpnes i IDATA-området kan styres av stakkpekerregisteret SP. Hvis bunken virkelig er for stor og bare kan åpnes i XDATA-området, vil SP-registeret til CPUen være vanskelig å låne, og vi kan bare konstruere stabelstrukturen og stabelpekeren selv. Siden det eksterne programområdet og datarommet begge er 0-64K (0x0000-0xFFFF), så kan jeg faktisk spare problemer / praktiske omskrivingsprogrammer og andre grunner, den eksterne KODEN og DATA kan dele et omskrivbart minne (for eksempel forskjellige Hva RAM kan bli slettet og skrivbar). For eksempel har systemet et 64K eksternt MEMORY. Den nedre 32K brukes til å lagre KODEN, og mikrokontrolleren kan lese og kjøre programmet i denne 32K, og den høyere 32K brukes som lagringsplass for brukerdata. Men på dette tidspunktet, den opprinnelig helt uavhengige KODE- og DATA-plassen, fordi et MINNE deles på maskinvarebrikken, kan de påvirke hverandre, og programmet kan omskrive programmet av seg selv. For eksempel er 0x0020 en instruksjon, og jeg skriver om 0x0020 gjennom MOVX, og bruker deretter MOVC for å lese opp 0x0020, og dataene er forskjellige fra originalen.
Kjernen i forvirring er at lagringsplassen til en-chip mikrodatamaskinen er et logisk konsept, som er to separate mellomrom som er kunstig delt. MEMORY-brikken på maskinvarekretsen er et begrep i virkeligheten. Lagringsplassen til enkeltbrikke-mikrocomputeren vil etter hvert implementeres på brikken på kretsnivå, slik at den logiske lagringsplassen vil overlappe på grunn av den fysiske kretsforbindelsen. Men på det logiske nivået er disse to rommene fremdeles helt uavhengige.
Vedlegg: Definisjon av forskjellige lagringsplassnavn:
Data: referer fast til 128 RAM på 0x00-0x7f foran, som kan leses og skrives direkte av et register, den raskeste og minste genererte koden.
Idata: refererer fast til 256 RAM-er på 0x00-0xff foran, hvorav de første 128 er nøyaktig de samme som 128-dataene, bare på grunn av de forskjellige tilgangsmetodene. man får tilgang til idata ved hjelp av en peker som ligner C. Uttalelsen i forsamlingen er: mov ACC, @ Rx. (ikke viktig supplement: idata i c har god pekertilgangseffekt) xdata: eksternt utvidet RAM, refererer vanligvis til det eksterne 0x0000-0xffff-rommet, som er tilgjengelig av DPTR. pdata: de nedre 256 byte av eksternt utvidet RAM, les og skriv når adressen vises på A0-A7, bruk movx ACC, @Rx for å lese og skrive. Dette er ganske spesielt, og C51 ser ut til å ha denne feilen, det anbefales å bruke mindre. Men det er også fordelene hans. Den spesifikke bruken er et mellomproblem, jeg vet ikke' jeg vet ikke hvordan jeg skal bruke den, så jeg vant' jeg nevner den ikke her.








