Friday, November 18, 2005

มาลองทำ Assembler กัน (Literal)

Literal

ลองดู code ภาษา C ข้างล่างนี้

 int main()
 {
  char *msg = "ABC";
  printf("%s\n", msg);
  return 0;
 }

เราจะแปลงมันเป็นภาษา assembly ได้แบบนี้

 main:
  VAR 1
  REF msg 1
 PVAR msg
 PUSH literal0
 STORE
 PUSH literal1
 PVAR msg
 LOAD
 PUSH printf
 CALL
 FVAR
 PUSH 0
 RETURN
 literal0: "ABC"
 literal1: "%s\n"
 printf:
 ...

สมมติว่า string "ABC" และ "%s\n" ใช้เนื้อที่ตัวละ 1 word เราจะได้ object code สุดท้ายแบบนี้

 0000h: PUSH 0
 0002h: PBASE
 0004h: PUSH 1
 0006h: SUB
 0008h: PUSH 0024h
 000Ah: STORE
 000Ch: PUSH 0025h
 000Eh: PBASE
 0010h: PUSH 1
 0012h: SUB
 0014h: LOAD
 0016h: PUSH 0026h
 0018h: CALL
 001Ah: PUSH 0
 001Ch: MUL
 001Eh: ADD
 0020h: PUSH 0
 0022h: RETURN
 0024h: "ABC"
 0025h: "%s\n"
 0026h: ...

0 Comments:

Post a Comment

<< Home