hLab06 -input string and print reverse direction
-------
ให้ศึกษาโปรแกรมอื่นๆที่ผ่านมาและโปรแกรมข้างล่าง
ซึ่งเป็นโปรแกรมที่รับข้อมูล 4 ตัวอักขระ
เข้าไปไว้ในหน่วยความจำที่ตำแหน่ง inst
โดยใช้ register bx เป็นตัวชี้ตำแหน่งข้อมูล
จงเขียนโปรแกรมเพื่ออ่านข้อมูลชื่อนักศึกษา
(student name) กำหนดจำนวนตัวอักษรเท่ากับชื่อของแต่ละคน
เช่น SUPAKIT มีความยาวเท่ากับ 7 ไบท์
อ่านเข้าไปยังหน่วยความจำในลักษณะย้อนกลับ
โดยมีข้อความนำดังนี้
Enter your name pls: ป้อนข้อมูลเป็น SUPAKIT
จากนั้นแสดงผลทางหน้าจอ พิมพ์ข้อความว่า
hello, welcome to MJU
your reverse name is TIKAPUS
glad to see you..naja
ให้ส่งไฟล์ .lst พร้อม output (อย่าลืมเขียน comment ชื่อ-รหัส ในโปรแกรมด้วย)
สาระสำคัญ
-----------
โปรแกรม lab05-in4char.lst ทำการอ่านข้อมูล 4 ตัวจากแป้นพิมพ์
1. คำสั่งรอรับข้อมูล (ข้อมูลที่ได้จะเก็บไว้ใน register al)
mov ah,1 ;wait for kb
int 21h
2. แต่ละตัวอักขระที่รับเข้าจะนำไปเก็บไว้ที่ตำแหน่ง inst โดยใช้
register bx เป็น index
mov inst[bx],al
3. คำสั่งวนกลับ
loop
คำสั่ง loop จะลดค่า cx ลง 1 โดยอัตโนมัติและสิ้นสุดเมื่อ cx เป็นศูนย์
ถ้าใช้คำสั่ง jnz จะต้องลดค่า cx เอง
4.แสดงผลทางจอภาพ และขึ้นบรรทัดใหม่
ใช้ function 9 ของ DOS service (int 21h) เพื่อแสดงข้อความ
ตั้งแต่ตำแหน่งที่กำหนดใน reg dx จนถึง "$"
.model small
0000 .data
0000 3F 3F 3F 3F 24 inst byte "????$"
0005 0A 0D 24 CrLf byte 0ah,0dh,'$'
0000 .code
0000 main proc
0000 B8 ---- R mov ax,@data ;define data segment
0003 8E D8 mov ds,ax
0005 B9 0004 mov cx,4
0008 BB 0000 mov bx,0
000B loop1:
000B B4 01 mov ah,1 ;wait for kb
000D CD 21 int 21h
000F 88 87 0000 R mov inst[bx],al
0013 43 inc bx
0014 E2 F5 loop loop1
0016 B4 09 mov ah,9 ;display newline
0018 BA 0005 R mov dx,offset CrLf
001B CD 21 int 21h
001D B4 09 mov ah,9 ;display inst
001F BA 0000 R mov dx,offset inst
0022 CD 21 int 21h
;exit to DOS
0024 B4 4C mov ah,4ch
0026 CD 21 int 21h
0028 main endp
end
Algorithm (กรณีของ SUPAKIT)
-----------
1.define data area for input data (inst byte "XXXXXXX$")
2.set counter to 7 (mov cx,7)
3.set register bx to last position for index (inst[0],inst[1],...,inst[6])
4.do loop
read a character from keyboard by DOS sevice function 1
save input character into data area with index bx
format: mov data_area[index],al
decrease index by 1 (dec bx)
decrease counter (dec cx)
loop while not zero (jnz loop1)
5.print output (reverse name)
6.exit to DOS
วันพฤหัสบดีที่ 22 กรกฎาคม พ.ศ. 2553
สมัครสมาชิก:
ส่งความคิดเห็น (Atom)

ไม่มีความคิดเห็น:
แสดงความคิดเห็น