[Assembler] Kann mir mal jemand base:offset erklären

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von .x-tra, 9. November 2010 .

Schlagworte:
  1. 9. November 2010
    Kann mir mal jemand base ffset erklären

    Haben das grad im Unterricht, aber der dozent is ne niete...kann mir das mal jemand auf verständliche einfache weise kurz erläutern?
     
  2. 9. November 2010
    AW: Kann mir mal jemand base ffset erklären

    In Assembler werden Adressen meist mit einer Basis und einem Offset angesprochen. Also du hast deine Basis-Adresse und dazu einen beliebigen Offset, der zur Basis-Adresse dazuaddiert wird. Soweit also ganz einfach.

    Das ist z.B. zum Ansprechen von Elementen in einem Array nötig. Du hast dann einen Pointer auf das erste Element deines Arrays (deine Basis-Adresse) und kannst dann mit dem Offset bequem deine anderen Elemente ansprechen.

    Ich mach mal ein Beispiel:

    Dein Array a sieht so aus:
    Index | Wert | Adresse
    0 | 1 | 0x00000010
    1 | 2 | 0x00000014
    2 | 3 | 0x00000018
    3 | 4 | 0x0000001c
    4 | 5 | 0x00000020
    5 | 6 | 0x00000024
    6 | 7 | 0x00000028
    7 | 8 | 0x0000002c

    Der Pointer auf dein Array a zeigt dann als auf die Adresse 0x00000010, also auf das Element a[0] = 1. Wenn du jetzt das Element a[2] ansprechen willst, hast du wieder deine Basis-Adresse 0x00000010 und dazu einen Offset von 8 Byte (das kann auch ein anderer Wert sein; 4 Byte ist einfach die Größe eines Integers auf einer 32-bit Maschine und daraus ergibt sich dann ein Offset von 4 * 2 = 8 Byte für das 3. Element (Index 2) in deinem Array).
    Es ergibt sich also für das Element a[2] die Adresse 0x00000010 + 0x00000008 = 0x00000018
    Genauso lassen sich dann auch alle anderen Elemente ansprechen.

    Ich hoffe mal das war jetzt nicht zu kompliziert oder hat dich noch mehr verwirrt
     
  3. 9. November 2010
    AW: Kann mir mal jemand base ffset erklären

    das hab ich sogar recht einfach verstanden...vielen dank

    noch ne andere frage
    brauch eine abfrage mit vergleich...
    also ein fester wert soll mit einer eingabe verglichen werden...und wenn dieser ungleich ist dann jmp wohin ansonsten weiter im code....kann mir das jemand son bissl basteln...

    unser dozent is glaub an die 60 und naja kann echt nix erklären...und bei dem haben wir auch noch c++...mir graut schon
     
  4. 9. November 2010
    AW: Kann mir mal jemand base ffset erklären

    benutze halt Google, für so Grundlagen Zeugs gibts da genug Tutorials.

    cmp eax, 454545
    jnz somewhere


    somewhere:
     
  5. 9. November 2010
    AW: Kann mir mal jemand base ffset erklären

    Naja, um was für eine Eingabe handelt es sich denn? Solang es keinen String ist würde es mit

    Code:
    cmp eax, ebx ;Welche Register is ja Wurst
    je Gleich
    
    Gleich:
    ;
    ; Mach etwas
    ;
    Bei einem String wärs dann etwas mehr:

    Code:
    mov esi, eax
    mov edi, ebx
    
    .cmp_str
     cmpsb
    
     je .cmp_str
     jne Nicht_Gleich
    
    Nicht_Gleich:
    ;
    ; Nicht gleich
    ;
    So ungefähr sollte es funzen, bin allerdings nicht der fitteste was ASM angeht.
     
  6. 9. November 2010
    AW: Kann mir mal jemand base ffset erklären

    habs jetzt....also den kompletten code....würde zwar gern auch zufallszahlen einbauen aber da weiß ich nicht wie das geht...

    falls es jmd interessiert

    Code:
     title lotto
    ; -------------------------------------------------
    ;lotto
    ; -------------------------------------------------
    
    _data segment
    erstezahl db 0ah,0dh," Bitte erste Zahl eingeben:$"
    zweitezahl db 0ah,0ah,0dh," Bitte zweite Zahl eingeben:$"
    verloren db 0ah,0dh," Verloren - Falsche Zahl!$"
    gewonnen db 0ah,0dh," Gewonnen!$"
     
    _data ends
    
    _code segment
     assume cs:_code,ds:_data
    begin: mov ax,_data ; Segmentregister laden
     mov ds,ax
    
     mov dx,offset erstezahl ; Ausgabe der
     mov ah,9h ; Meldung und Eingabeaufforderung
     int 21h
     
    
     mov ah,01h ; eingabe erste Zahl mit reflektion
     int 21h
     
     
     cmp al, 35h ; Vergleich Rückgabewert mit 5 35hex
     jne _verloren ; wenn ungleich Sprung nach _verloren
     
     
     mov dx,offset zweitezahl ; Ausgabe der
     mov ah,9h ; Meldung und Eingabeaufforderung
     int 21h
     
     mov ah,01h ; eingabe zweite Zahl mit Reflektion
     int 21h
     
     cmp al, 35h ; Vergleich Rückgabewert mit 5 35hex
     jne _verloren ; wenn ungleich Sprung nach _verloren
     
     mov dx,offset gewonnen ; Ausgabe der gewonnen Variable
     mov ah,09h
     int 21h 
     jmp _ende ; Sprung nach Ende
    
     
    _verloren: mov dx,offset verloren ; Ausgabe der verloren Variable
     mov ah,09h
     int 21h
     
    _ende:
     
     mov ah,4ch ; Steuerung an das Betriebssystem
     int 21h
     
    _code ends
     end begin
    
     
  7. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.