Κάποιες απορίες σε Assembly

συζητήσεις για assembly

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
maxitis
Δημοσιεύσεις: 28
Εγγραφή: 21 Απρ 2007 21:57

Κάποιες απορίες σε Assembly

Δημοσίευση από maxitis » 02 Σεπ 2009 14:06

Διαβαζα ότι μπορείς να δηλώσεις ένα label και να το χρησιμοποιήσεις ως εξής:
x label word
y dword 78563412

και κάνοντας : mov ax, x ;1234
και με: mov ax, [x+2] ;5678

Οπότε ήθελα να ρωτήσω: τα vars εχουν το offset αν τα χρησιμοποιήσεις μόνα τους?

Αν ναι τότε η πρώτη εντολή δεν θα έπρεπε να ήταν: mov ax, [x]?

(To segment να υποθέσω ότι το έχει αποθηκευμένο το cpu σε ένα register)

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

Κάποιες απορίες σε Assembly

Δημοσίευση από LightForce » 03 Σεπ 2009 20:17

hi maxitis,

Γράφεις 16 bit κώδικα?
Κάτι ανάλογο θα μπορούσε να γράψει λάθος σε άλλον assembler, δηλαδή σε 16-bit mode να ορίσεις διπλή λέξη με το υψηλό μισό της να μην είναι 0.

maxitis
Δημοσιεύσεις: 28
Εγγραφή: 21 Απρ 2007 21:57

Κάποιες απορίες σε Assembly

Δημοσίευση από maxitis » 05 Σεπ 2009 01:11

οχι,, 32b

πιο απλα:(Στα variables αποθηκεύεται το offset?)


Aν ναι, γιατι γινεται το:
var word ?

mov ax, var

και όχι το:

mov ax,[var]

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

Κάποιες απορίες σε Assembly

Δημοσίευση από LightForce » 05 Σεπ 2009 03:54

Σε variables και labels δεν αποθηκεύεται offset, είναι εσωτερική δουλειά του assembler να 'συσχετίσει' το offset της κάθε var πρίν ξεκινήσει να τρέχει τον κώδικα.

Λίγα παραδείγματα σε Fasm σύνταξη,

Κώδικας: Επιλογή όλων

      var dw 100 
              	  			
      mov eax, var	    ; στον eax η 32 bit διεύθυνση -offset- της λέξης var -> π.χ 4202508
      mov ax, [var]	   ; στον ax η λέξη που υπάρχει αποθηκευμένη στην διεύθυνση 4202508 -> 100

Κώδικας: Επιλογή όλων

      var dd 33221100h

      mov byte [var+3], 44h

      ; τώρα [var] είναι 44221100h 

Κώδικας: Επιλογή όλων

      var dd '0123'

      mov edx, [var]
      mov dl, '4'
      mov [var], edx   ; '0124'

maxitis
Δημοσιεύσεις: 28
Εγγραφή: 21 Απρ 2007 21:57

Κάποιες απορίες σε Assembly

Δημοσίευση από maxitis » 05 Σεπ 2009 15:00

Στο masm ειναι κάπως αλλιώς. Για offset πάντα πρέπει να χρησιμοποιείς το offset var.

mov ax, var &
mov ax, [var]

Κάνουν την ίδια δουλειά. Αλλά το πρώτο πρέπει να είναι απο διευκολία του compiler που δουλεύει.
ok. ευχαριστώ για την απάντηση

LightForce
WebDev Moderator
Δημοσιεύσεις: 3812
Εγγραφή: 13 Απρ 2003 23:49

Κάποιες απορίες σε Assembly

Δημοσίευση από LightForce » 05 Σεπ 2009 15:30

Τίποτα. Aν δεν βοήθησα πολύ sorry δεν δουλεύω καθόλου τον MASM.
Aν γίνεται, μην χαθείς απο το assembly section maxitis.
Αν έχεις και κώδικα να ποστάρεις.
Tα ενεργά μέλη δεν είμαστε πολλά.

maxitis
Δημοσιεύσεις: 28
Εγγραφή: 21 Απρ 2007 21:57

Κάποιες απορίες σε Assembly

Δημοσίευση από maxitis » 05 Σεπ 2009 21:44

Εκανα debug.

var type ?

Στο dereference βάζει: type ptr var

οπότε μπορούμε να κάνουμε και:
mov eax, word ptr (var+2)

πρέπει να το έκαναν έτσι για να αποφεύγονται τα λάθη.

2. Τα λέμε

Απάντηση

Επιστροφή στο “Assembly”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες