นาย A กับ B จะมีคีย์เป็นของตัวเองซึ่งตรงนี้ด้านนาย A คงเปลี่ยนคีย์ได้อาจจะส่มออกมาก็ได้ แต่ด้านนาย B ก็สามารถสุ่มออกมาได้เช่นเดียวกัน เช่น นาย A ส่งค่า 2 ยกกำลัง 3 (3 คือคีย์ของ A) ไป นาย B ส่งค่าที่ได้รับคือ 8 ยกกำลัง 2 กลับมา(2 คือคีย์ของ B) นาย A จะได้รับ 64 ก็ส่งค่า square root 3 ของ 64 คือ 4 ไปให้นาย B ตอนนี้นาย B ก็จะรู้แล้วว่าคีย์ของนาย A คืออะไร นาย B ก็จะส่งค่าที่ได้รับคือ 4 โดยใส่ square root ไปคือ 2 เพราะฉนั้น นาย A ก็จะรู้แล้ว่าคีย์ของ นาย B คืออะไร จากนั้นเราก็จะนำคีย์ของบุคคลทั้งสองมาใช้ให้เป็นประโยชน์โดยตั้งสมการเอาไว้เลยในทั้งสองข้าง สมการยิ่งซับซ้อนก็ยิ่งยากมากขึ้นในการที่จะถอดสมการนั้นออกมา
หวังว่าถ้าใครจะนำไอเดียตรงนี้ไปใช้ก็น่าจะเป็นประโยชน์ต่อการพัฒนาอุตสหกรรมซอฟท์แวร์ของไทยนะครับ ผมเองก็คงให้รายละเอียดลึกๆมากกว่านี้ไม่ได้ เพราะว่าเคยทำเมื่อสองสามปีก่อนอีกอย่างก็ไม่ได้ค้นเอกสารไม่ว่าจะเป็น ขาของพอร์ตขนานของ พีซี หรือ ให้ตัวอย่างการเขียนโปรแกรมลง ไปผมเองก็คิดว่านักศึกษารุ่นน้องๆก็คงสามารถค้นหาได้นะครับ
หมายเหตุ
การสั่งงานออกทางแอดเดรสของพีซีในเดลไฟ
function PortIn(IOport:word):byte;stdcall; // รับข้อมูลจากพอร์ตขนาด 8 บิต
asm
mov dx,[IOport]
in al,dx
end;
function PortInW(IOport:word):word:stdcall; // รับข้อมูลจากพอร์ตขนาด 16 บิต
asm
mov dx,[IOprot]
in ax,dx
end;
Procudure PortOut(IOport:word;Value:byte);stdcall; //สั่งออกพอร์ตขนาด 8 บิต
asm
mov dx,[IOport]
mov al,[Value]
out dx,al
end;
Procudure PortOutW(IOport:word;Value:word);stdcall; //สั่งออกพอร์ตขนาด 16 บิต
asm
mov dx,[IOport]
mov al,[Value]
out dx,ax
end;
การเขียนติอต่อพอร์ตโดยใช้ซี ได้ทั้งวินโดว์และดอส ในวิชวลซีบางเวอร์ชั่นก็ได้นะ หรือคุณอาจจะต้องเซต Environment ของ IDE ให้สามารถติดต่อกับฮาร์แวร์ในระดับล่างๆได้โดยไม่ต้องผ่าน device driver
/* inport example */
#include
#include
int main(void)
{
int result;
int port = 0;
result = inport(port);
printf("Word read from port %d = 0x%X\n", port, result);
return 0;
}
/* inportb example */
#include
#include
int main(void)
{
unsigned char result;
int port = 0; /* serial port 1 */
result = inportb(port);
printf("Byte read from port %d = 0x%X\n", port, result);
return 0;
}
/* outport example */
#include
int main(void)
{
int port = 0;
int value = 'C';
outport(port, value);
printf("Value %d sent to port number %d\n", value, port);
return 0;
}
/* outportb example */
#include
#include
int main(void)
{
int port = 0;
char value = 'C';
outportb(port, value);
printf("Value %c sent to port number %d\n", value, port);
return 0;
}
หมายเหตุ
- inport อ่านข้อมูลขนาด 16 บิต port
- inportb อ่านข้อมูลขนาด 8 บิต port
- outport ส่งข้อมูลขนาด 16 บิตไปที่ port
- outportb ส่งข้อมูลขนาด 8 บิตไปที่ port
พอร์ตปริ้นเตอร์เป็นพอร์ตขนาด 8 บิต แต่ถ้าคุณต่อการ์ดขึ้นมาเอง ก็ต้องเลือกแอดเดรสในช่วงที่พีซีอนุญาติให้ใช้ ซึ่งถ้าเป็นการ์ด ISA ก็จะมีขนาด 16 บิตแต่ถ้าคุณต่อการ์ด PCI ขึ้นมาเองก็จะมีขนาดบิตได้ถึง 32 บิต