CS Assembly Language Programming Period 30
ตัวอย่าง โปรแกรมย่อย atoi ทำหน้าที่เปลี่ยน string ซึ่งมีรูปแบบ DS : SI DS : SI [white space][+|-]digits [white space][+|-]digits เมื่อ white space คือ tab (ASCII 09h) หรือ space (ASCII 20h) ให้เป็นเลขจำนวนเต็มมีเครื่องหมายเก็บใน ax
วิธีการ เลื่อน DS:SI ผ่าน white space จนกว่าจะ พบ เครื่องหมาย ‘+’ หรือ ‘-’ หรือ พบตัวเลข เลื่อน DS:SI ผ่าน white space จนกว่าจะ พบ เครื่องหมาย ‘+’ หรือ ‘-’ หรือ พบตัวเลข ถ้าพบเครื่องหมาย ‘+’ หรือ ไม่มี เครื่องหมาย กำหนดให้ cx เป็น 0 ถ้าพบเครื่องหมาย ‘+’ หรือ ไม่มี เครื่องหมาย กำหนดให้ cx เป็น 0 แต่ถ้าพบเครื่องหมาย ‘-’ กำหนดให้ cx เป็น -1 แต่ถ้าพบเครื่องหมาย ‘-’ กำหนดให้ cx เป็น -1 การคำนวณตัวเลขทำ ดังนี้ ก. ใช้ bx เก็บผลลัพธ์ เริ่มต้น กำหนดให้มี ค่าเป็น 0 ก. ใช้ bx เก็บผลลัพธ์ เริ่มต้น กำหนดให้มี ค่าเป็น 0 ข. เมื่อพบตัวเลข ทำซ้ำๆ ดังนี้ ข. เมื่อพบตัวเลข ทำซ้ำๆ ดังนี้
ข.1 เปลี่ยน รหัส ASCII ของตัวเลขดังกล่าว ให้เป็นค่าของตัวเลข โดยการ ลบด้วย 30h หรือ ลบด้วย ‘0’ หรือ and กับ 0fh เป็นต้น ข.1 เปลี่ยน รหัส ASCII ของตัวเลขดังกล่าว ให้เป็นค่าของตัวเลข โดยการ ลบด้วย 30h หรือ ลบด้วย ‘0’ หรือ and กับ 0fh เป็นต้น ข.2 คูณผลลัพธ์ใน bx ด้วย 10 แล้วบวกกับ ค่าของตัวเลขในข้อ ข. 1 เก็บผลลัพธ์ใน bx ตามเดิม ข.2 คูณผลลัพธ์ใน bx ด้วย 10 แล้วบวกกับ ค่าของตัวเลขในข้อ ข. 1 เก็บผลลัพธ์ใน bx ตามเดิม เมื่อไม่พบตัวเลขผลลัพธ์สุดท้ายเก็บอยู่ที่ bx ทำสำเนาไปที่ ax แล้ว เปลี่ยนเครื่องหมาย ใน ax ให้ตรงกับเครื่องหมายที่ถูกต้อง โดย ตรวจดูจากค่าใน cx เมื่อไม่พบตัวเลขผลลัพธ์สุดท้ายเก็บอยู่ที่ bx ทำสำเนาไปที่ ax แล้ว เปลี่ยนเครื่องหมาย ใน ax ให้ตรงกับเครื่องหมายที่ถูกต้อง โดย ตรวจดูจากค่าใน cx