Option Explicit
Private Sub Command1_Click()
If Len(Text1.Text) = 0 Then Exit Sub
Dim I As Integer
Dim SendByte() As Byte
I = Len(Text1.Text)
ReDim SendByte(I - 1)
For I = 0 To UBound(SendByte)
SendByte(I) = Asc(Mid(Text1.Text, I + 1, 1))
Next
If MSComm1.PortOpen = True Then MSComm1.Output = SendByte
End Sub
Private Sub Form_Load()
On Error Resume Next
Command1.Caption = "发送数据"
Text2.Text = ""
Text3.Text = ""
MSComm1.Settings = "9600,n,8,1"
MSComm1.CommPort = 1 '通讯端口号,请根据实际调整散氏
MSComm1.NullDiscard = False
MSComm1.RThreshold = 1
MSComm1.InputMode = comInputModeBinary
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case 2
Dim InByte, I As Integer
InByte = MSComm1.Input
For I = 0 To UBound(InByte)
Text2.Text = Text2.Text &"&H" &Hex(InByte(i)) &" "
Next
End Select
End Sub
.COM是Dos可执行文件的一种格式,不需要重定位,最大65280字节。 当然你把.exe该成.com也可以运行的。它包含程序的一个绝对映象―――就是说,为了运行程序准携掘毕确的处理器指令和内存中的数据,MS-DOS通过直接把该映象从文件拷贝到内存而加载.COM程序,它不作任何改变。为加载一个.COM程序,MS-DOS首先试图分配内存,因为.COM程序必须位于一个64K的段,所以.COM文件的大小不能超过65,024(64K减去用于PSP的256字节和用于一个起始堆栈的至少256字节)。如果MS-DOS不能为程序、一个PSP、一个起始堆栈分配足够内存,则分配尝试失败。否则,MS-DOS分配尽可能多的内存(直至所有保留内存),即使.COM程序本身不能大于64K。在试图运行另一个程序或分配另外的内存之前,大部分.COM程序释放任何不需要的内存。分配内存后,MS-DOS在该内存的头256字节建立一个PSP,如果PSP中的第一个FCB含有一个有效驱动器标识符,则置AL为00h,否则为0FFh。MS-DOS还置AH为00h或0FFh,这依赖于第二个FCB是否含有一个有效驱动器标识符。建造PSP后,MS-DOS在PSP后立即开始(偏移100h)加载.COM文件,它置SS,DS和ES为PSP的段地址,接着创建一个散返堆栈.为创建一个堆栈,MS-DOS置SP为0FFFEH,若已分配了至少64K内存否则,它置寄存器为比所分配的字节总数大2的值.最后,它把0FFFEH推进栈(这是为了保证与在早期MS-DOS版本上设计的程序的兼容性)。MS-DOS通过把控制传递偏移100h处的指令而启动程序.程序设计者必须保证.COM文件的第一条指令是程序的入口点。注意,因为程序是在偏移100h处加载,因此所有代码和数据偏移也必须相对于100h.汇编语言程序设计者可通过置程序的初值为100h而保证这一点(例如通过在原程序的开始使用语句org 100h).于 EXE 文件比较 :
.com文件就是只含一个代码段的指令程序
.exe文件可包含多个程序段,如:代码段,数据段,堆辩芹栈段等
.com文件只能作一些简单的DOS指令 *** 作
.exe文件应用广泛,可作为各类程序的程序文件
.com文件大小不能超过64K
.exe文件大小没有限制
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)