100 likes | 191 Views
บทที่ 10 โครงสร้างควบคุม. โครงสร้างการตัดสินใจแบบ if-then-else โครงสร้างการกระทำซ้ำแบบ repeat-until โครงสร้างการกระทำซ้ำแบบ while โครงสร้างการกระทำซ้ำแบบ for. เงื่อนไข. จริง. เท็จ. คำสั่ง. คำสั่ง. cmp al,10 jae abovenine mov dl,al add dl, ’ 0 ’
E N D
บทที่ 10 โครงสร้างควบคุม • โครงสร้างการตัดสินใจแบบ if-then-else • โครงสร้างการกระทำซ้ำแบบ repeat-until • โครงสร้างการกระทำซ้ำแบบ while • โครงสร้างการกระทำซ้ำแบบ for 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล
เงื่อนไข จริง เท็จ คำสั่ง คำสั่ง cmp al,10 jae abovenine mov dl,al add dl,’0’ jmp endif abovenine: mov dl,al add al,’A’-10 endif: if AL<10 then DL:=AL+’0’ else DL:=AL+’A’-10; โครงสร้าง if-then-else • โครงสร้าง if-then-else • รูปแบบโปรแกรมภาษาแอสเซมบลี้ if condition is false then jump to else_label then_actions jump to endif_label else_label: else_actions endif_label: EXAMPLE 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล
คำสั่ง คำสั่ง เท็จ เงื่อนไข จริง startlabel: mov al,bl mul bl add dx,ax inc bl inc cx cmp dx,100 jbe startlabel repeat DX:=DX+BL*BL; BL:=BL+1; CX:=CX+1; until (DX>100); โครงสร้าง repeat-until • โครงสร้าง repeat-until • รูปแบบโปรแกรมภาษาแอสเซมบลี้ startlabel: actions ... actions if condition is false then jump to startlabel EXAMPLE 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล
เท็จ เงื่อนไข จริง คำสั่ง คำสั่ง startloop: cmp dl,13 jz endloop cmp cx,20 jae endloop add al,dl adc ah,0 inc bx mov dl,data[bx] inc cx jmp startloop endloop: while (DL<>13) and (CX<20) do begin AX:=AX+DL; BX:=BX+1; DL:=DATA[BX] CX:=CX+1; end; โครงสร้าง while • โครงสร้าง while • รูปแบบโปรแกรมภาษาแอสเซมบลี้ startlabel: if condition is false then jump to endlabel actions ... actions jump to startlabel endlabel: EXAMPLE 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล
กำหนดค่าเริ่มต้น เท็จ ค่าของตัวแปร อยู่ในขอบเขต จริง คำสั่ง คำสั่ง ปรับค่าตัวแปร โครงสร้าง for • โครงสร้าง for • รูปแบบโปรแกรมภาษาแอสเซมบลี้ • ไม่ใช้คำสั่ง LOOP : ยุ่งยากในการใช้ • ใช้คำสั่ง LOOP : สะดวกกว่า แต่ไม่สามารถใช้ในการวนรอบที่ซับซ้อนได้ initialize index variable startloop: if index value is not in the range then jump to endloop action ... action update index variable jump to startloop endloop: set the value of CX startloop: actions LOOP startloop 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล
mov cx,0 mov dl,1 startloop: cmp dl,100 ja endloop mov al,dl mov ah,0 mob bl,7 div bl cmp ah,0 jne endif inc cx endif: inc dl jmp startloop endloop: CX:=0; for DL:=1 to 100 do begin if DL mod 7 = 0 then CX:=CX+1; end; mov ax,0 mov cx,100 startloop: add ax,data[bx] add bx,2 cmp data[bx],0 looopnz startloop AX:=0; CX:=100; repeat AX:=AX+data[BX]; BX:=BX+2; CX:=CX-1; until (data[BX]=0) or (CX=0); โครงสร้าง for EXAMPLE • โครงสร้างการทำงานของคำสั่ง LOOPZ และ LOOPNZ • มีลักษณะปนกันระหว่างโครงสร้าง for และ repeat EXAMPLE 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล
ตัวอย่าง • จงเขียนโปรแกรมตรวจสอบเลขฐานสิบที่รับค่าจากผู้ใช้ (ไม่เกิน 8 บิต) ว่าเป็นจำนวนเฉพาะหรือไม่. • อ่านตัวเลขฐานสิบจากผู้ใช้ • ใช้ Function หมายเลข 0Ah ในการอ่านข้อความ • แปลงให้เป็นตัวเลข • ตรวจสอบว่าเป็นจำนวนเฉพาะหรือไม่ • ทดลองหาร • การอ่านข้อความ .data maxlen db 4 strlen db ? str db 4 dup (?) .code mov ax,@data mov ds,ax mov dx,offset maxlen mov ah,0Ah int 21h 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล
maxlen 4 strlen 3 str ‘1’ ‘2’ ‘3’ 13 0 * 10 + 1 * 10 + 2 * 10 + 3 แปลงตัวเลข • ตัวอย่างการแปลง • สมมุติว่าผู้ใช้ป้อน ‘123’ ข้อมูลในหน่วยความจำจะมีค่าเป็น : • การแปลง : 123 = 1*102 + 2*10 + 3 = (((0*10 + 1) *10 + 2)*10 + 3) 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล
แปลงตัวเลข mov cl,strlen mov ch,0 mov bx,offset str mov al,0 extract: mov dh,10 mul dh ;AX=AL*10 ;discard AH mov dl,[bx] sub dl,’0’ add al,dl ;AL=AL+digit loop extract 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล
ทดสอบว่าเป็นจำนวนเฉพาะทดสอบว่าเป็นจำนวนเฉพาะ • การทดสอบ • ใช้ 2 - (al-1) หาร mov cl,al mov ch,0 sub cx,2 ;cx=al-2 mov dl,al mov bl,2 primetest: mov al,dl mov ah,0 div bl inc bl cmp bl,0 loopnz primetest jz notprime ; print yes notprime: ; print no 204221 องค์ประกอบคอมพิวเตอร์และภาษาแอสเซมบลี้ ภาควิชาวิศวกรรมคอมพิวเตอร์ มหาวิทยาลัยเกษตรศาสตร์ สัณฑิติ พัชรรุ่งเรือง จิตร์ทัศน์ ฝักเจริญผล