ווטסאפ - לינוקס, BSD, קוד פתוח ותוכנה חופשית בעברית. Whatsup - Linux, BSD, open source and free software in Hebrew

 
 
  כניסת חברים · רישום · שכחתי סיסמה  
tux the penguin
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
אורח · ·
 

הודעה פורסם: 27/06/2015 - 11:36
נושא ההודעה: אסמבלר 32 ביט . ופקודות "חדשות" שקיימות בה

(אני יודע אסמבלי של 16)

אין לי מושג באסמבלי בלינוקס
אבל יש לי ספר של springer על אסמבלי 32 ביט .

אני מכיר משפטי תנאי עם jmp cmp .

ראיתי בספר דוגמה של תנאי (כנראה אסמבלי תומכת ב high level ) ?


אולי אני משתמש בקומפיילר לא נכון (אין לי מושג באסמבלי של לינוקס)
אני משתמש ב as זה שבא עם gcc


הקוד הבא מתקמפל :
as mycode.s -o mycode.o --gstabs
ld mycode.o -o mycode
chmod a+x mycode


הקוד:
קוד:

.section .text
 .global start
 _start:
         movl $1,%eax
         movl $2,%ebx

       .if ebx==2
          mov $101,%ebx
       .endif

       .if ebx!=2
int $0x80
.endif



בכל זאת אני מריץ ב gdb
מסמן breakepoint
: b _start
: run
: layout asm
: run

זה הפלט : (הוא מתעלם מהתנאי)
קוד:

B+>│0x8048074 <_start>      mov    $0x1,%eax                                   │
   │0x8048079 <_start+5>    mov    $0x2,%ebx                                   │
   │0x804807e <_start+10>   int    $0x80                                       │
   │0x8048080               add    %eax,(%eax)                                 │
   │0x8048082               add    %al,(%eax)                                  │
   │0x8048084               add    %al,(%eax)                                  │
   │0x8048086               add    $0x3000,%eax                                │
   │0x804808b               add    %cl,(%eax)                                  │
   │0x804808d               add    %al,(%eax)                                  │
   │0x804808f               add    %ah,0x0(%eax,%eax,1)                        │
   │0x8048093               add    %dh,0x4(%eax,%eax,4)                        │
   │0x8048097               or     %al,(%ecx)                                  │
   │0x8048099               add    %al,(%eax)                                  │
   └───────────────────────────────────────────────────────────────────────────┘
child process 26308 In: _start                         Line: 6    PC: 0x8048074
[Inferior 1 (process 26304) exited with code 02]
Cannot access memory at address 0x8048080
(gdb) Cannot access memory at address 0x0


כלומר הוא מתעלם מהתנאי ויוצא int 80 במקום להציג ערך אחר ב ebx כפי שכתבתי בתוך ה תנאי .


איזה קומפיילר בלינוקס מכיר משפטי if . ואיזה תחביר זה ?
הספר של ספרינגר הוא אסמבלי כללי אולם הם השתמשו ב masm
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
queencyלא בפורום כעת ת.הצטרפות: 13/11/2008 · הודעות: 2139 ·
 

הודעה פורסם: 27/06/2015 - 23:30
נושא ההודעה:

באסמבלר נהוג לעבוד עם דגלים
חפש את כל הקבוצה Jz (jump if zero) JE (jump if equal) ודומיו

_________________
מערכת: GNU/Linux debian
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
the_dukeלא בפורום כעת ת.הצטרפות: 16/04/2004 · הודעות: 257 ·
 

הודעה פורסם: 29/06/2015 - 11:33
נושא ההודעה:

.if הוא מאקרו של masm:
http://stackoverflow.com/questions/15350651/if-else-macro-in-masm
זה לא אסמבלי.

המאקרו מתפרש לפקודות אסמבלי שכוללות ג'אמפים.
חוסך קצת עבודה, אבל מסתיר ממך את הקוד האמיתי.

גם לgnu as יש את זה http://tigcc.ticalc.org/doc/gnuasm.html#SEC96

אז אולי הבעיה היא שכתבת
.if ebx==2
במקום
.if %ebx==2
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
הצגת הודעות מלפני:     
מעבר אל:  
כל הזמנים הם GMT + 2 שעות
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
PNphpBB2 © 2003-2004 

תוכן הדיון

  1. אורח
  2. queency
  3. the_duke