คำถามที่ดี. นักพัฒนา C หรือ C ++ ใหม่ทุกคนมีสิ่งนี้อยู่ในใจ ฉันถือว่าเครื่อง x86 มาตรฐานสำหรับส่วนที่เหลือของโพสต์นี้ หากคุณใช้คอมไพเลอร์ Microsoft C ++ ให้เปิด notepad ของคุณแล้วพิมพ์สิ่งนี้ (ตั้งชื่อไฟล์ Test.c)
int main(int argc, char **argv)
{
return 0
}
และตอนนี้รวบรวมไฟล์นี้ (ใช้พรอมต์คำสั่งสำหรับนักพัฒนา) cl Test.c /FaTest.asm
ตอนนี้เปิด Test.asm ในแผ่นจดบันทึกของคุณ สิ่งที่คุณเห็นคือรหัสแปล - C / C ++ แปลเป็นแอสเซมเบลอร์ คุณได้คำใบ้หรือไม่?
_main PROC
push ebp
mov ebp, esp
xor eax, eax
pop ebp
ret 0
_main ENDP
โปรแกรม C / C ++ ได้รับการออกแบบให้ทำงานบนโลหะ ซึ่งหมายความว่าพวกเขาสามารถเข้าถึงฮาร์ดแวร์ระดับต่ำกว่าซึ่งทำให้ง่ายต่อการใช้ประโยชน์จากความสามารถของฮาร์ดแวร์ บอกว่าฉันจะเขียน C library getch () บนเครื่อง x86
ฉันจะพิมพ์บางอย่างด้วยวิธีนี้:
_getch proc
xor AH, AH
int 16h
;AL contains the keycode (AX is already there - so just return)
ret
ฉันเรียกใช้มันด้วยแอสเซมเบลอร์และสร้าง. OBJ - ตั้งชื่อมันว่า getch.obj
จากนั้นฉันเขียนโปรแกรม C (ฉันไม่ได้รวมอะไรเลย)
extern char getch();
void main(int, char **)
{
getch();
}
ตอนนี้ตั้งชื่อไฟล์นี้ - GetChTest.c รวบรวมไฟล์นี้โดยผ่าน getch.obj ไป (หรือคอมไพล์ทีละไฟล์กับ. obj และลิงค์ GetChTest.Obj และ getch.Obj ร่วมกันเพื่อสร้าง GetChTest.exe)
เรียกใช้ GetChTest.exe แล้วคุณจะพบว่ามันรอคีย์บอร์ดอินพุต
การเขียนโปรแกรม C / C ++ ไม่ได้เกี่ยวกับภาษา ในการเป็นโปรแกรมเมอร์ C / C ++ ที่ดีคุณต้องมีความเข้าใจอย่างถ่องแท้เกี่ยวกับชนิดของเครื่องที่รัน คุณจะต้องรู้วิธีจัดการหน่วยความจำวิธีการลงทะเบียนโครงสร้าง ฯลฯ คุณอาจไม่ต้องการข้อมูลเหล่านี้ทั้งหมดสำหรับการเขียนโปรแกรมปกติ - แต่พวกเขาจะช่วยคุณอย่างมาก นอกเหนือจากความรู้พื้นฐานเกี่ยวกับฮาร์ดแวร์มันจะช่วยให้คุณเข้าใจได้อย่างชัดเจนว่าคอมไพเลอร์ทำงานอย่างไร (แปลว่ามันแปลอย่างไร) ซึ่งช่วยให้คุณสามารถปรับแต่งโค้ดของคุณได้ตามความจำเป็น มันเป็นแพ็คเกจที่น่าสนใจ!
ทั้งสองภาษารองรับคำสำคัญ __asm ซึ่งหมายความว่าคุณสามารถผสมรหัสภาษาแอสเซมบลีของคุณด้วย การเรียนรู้ C และ C ++ จะทำให้คุณเป็นโปรแกรมเมอร์โดยรวมที่ดีขึ้น
ไม่จำเป็นต้องเชื่อมโยงกับ Assembler เสมอ ฉันพูดถึงมันเพราะฉันคิดว่ามันจะช่วยให้คุณเข้าใจดีขึ้น ส่วนใหญ่การเรียกใช้ไลบรารีส่วนใหญ่ใช้ประโยชน์จากการเรียกของระบบ / API ที่จัดทำโดยระบบปฏิบัติการ (ระบบปฏิบัติการจะทำสิ่งที่เกี่ยวกับฮาร์ดแวร์)