CS344-321 Assembly Language Programming Period 31
ตัวอย่าง โปรแกรมย่อย itoa ทำหน้าที่เปลี่ยนเลขจำนวนเต็มมีเครื่องหมาย ให้เป็น string ซึ่งมีความยาวอย่างน้อย 6 และจะมีรูปแบบดังนี้ DS : SI [-]digits และ ax เก็บความยาวของ string ก่อนเรียกใช้ cx เก็บเลขฐาน และ DS : SI ชี้ไปที่เริ่มต้นที่ว่างซึ่งมีความยาวอย่างน้อย 6 ไบต์
วิธีการ บวก si ด้วย 6 DS: SI จดจำค่า si ไว้บน stack เพื่อใช้คำนวณความยาว string ในตอนหลัง จดจำเครื่องหมายของค่าใน ax ไว้บน stack ถ้า ค่าใน ax เป็นลบ เปลี่ยนให้เป็นบวก
ก. เอาเลขฐานใน cx หาร ค่าใน ax เศษจะอยู่ที่ dx สำหรับฐานสูงสุด 16 เศษจะเก็บใน dl ได้เพียงพอ เปลี่ยนค่าเศษใน dl ให้เป็นตัวเลข ASCII ด้วยการบวกด้วย ‘0’ เป็นต้น กรณีเป็นเลขฐานสิบหก เศษอาจมีค่าเป็น 10 ถึง 15 ดังนั้น ถ้า เศษมีค่ามากกว่า 9 ให้บวกตัวเลข ASCII ข้างต้นด้วย ‘A’-‘9’-1 ลบ si ด้วย 1 แล้วนำค่า ASCII ดังกล่าวเก็บที่ DS:SI ทดสอบผลลัพธ์ที่ได้จากการหาร ซึ่งเก็บอยู่ใน ax ว่าเป็น 0 หรือไม่ ถ้าไม่ใช่ กลับไปทำซ้ำข้อ ก. มิฉะนั้น เลิกทำซ้ำ ทำข้อ ข.
ข. นำเครื่องหมายที่เก็บบน stack มาทดสอบ ถ้าเป็นลบ จะลบค่า si ด้วย 1 แล้ว นำเครื่องหมาย ‘-’ ใส่ตรงตำแหน่ง DS:SI ค. คำนวณความยาวของ string ด้วยการลบค่า si ด้วย ค่า si เดิมที่เก็บใน stack ตัวอย่าง ถ้าค่าใน ax มีค่าเท่ากับ -120 ผลลัพธ์ จะเป็นดังนี้ DS:SI - 1 2 0 ความยาวที่เก็บใน ax จะเท่ากับ 4 SI เดิม