ทดลองเขียน ASM บน Linux : อ่านจำนวน argument ที่ส่งให้โปรแกรม
ในภาษาซีการเขียนโปรแกรมจะเริ่ม execute จาก int main(int argc, char *argv[]) เราจะมาหาค่า argc กัน เช่น ./test 1 2 3 ใน nasm จะนับได้ 4 จำนวน โดยจะรวมชื่อโปรแกรมเข้าไปด้วย และระบบจะทำการเก็บข้อมูลใน stack ประมาณนี้
-------------------------- | 4 | -------------------------- | ./test | -------------------------- | 1 | -------------------------- | 2 | -------------------------- | 3 | -------------------------- ดังนั้นถ้าเราใช้คำสั่ง pop ecx ก็จะเก็บค่าจำนวน argument ใน Register ECX ต่อไปเราต้องนำมาแสดงผล โดยใช้หลักการโปรแกรมครั้งก่อน แต่เจอปัญหาคือ ค่าargument จะเปลี่ยนไปตาม จำนวน arg แก้ปัญหาโดยการกำหนดตัวแปรที่
section .bss num: resd 1 สร้างที่เก็บตัวแปรขนาด 32 bit
และเรารู้ว่าascii code ของเลข ศูนย์ คือ 30h ดังนั้นเราจึงเอาค่า ใน ECX มาบวก 30h แล้วนำมาเก็บไว้ที่ตำแหน่งของ num สุดท้ายก็นำมาแสดงผล code ก็จะประมาณนี้
ผลลัพธ์ ประมาณนี้
Create Date : 10 มีนาคม 2557 |
Last Update : 10 มีนาคม 2557 20:18:43 น. |
|
0 comments
|
Counter : 989 Pageviews. |
|
|