搜档网
当前位置:搜档网 › TCP文件传输程序的设计书

TCP文件传输程序的设计书

TCP文件传输程序的设计书
TCP文件传输程序的设计书

TCP文件传输程序设计书

一、实验名称:TCP文件传输程序

二、实验要求

1、设计一个应用程序,该应用程序能够实现网络中两台计算机之间传输文件。

2、一个程序既能够建立服务器又能够以终端的形式连接服务器。

3、终端或者服务器既能够发送文件又能够接收文件。

4、传送文件类型应为任何类型,文件大小为任意。

三、总体规划

1、网络传输协议的选择

在TCP/IP协议栈中,有两个高级协议是我们网络应用程序编写者应该了解的,它们"传输控制协议"(Transmission Control Protocol,简称TCP)和"用户数据报协议"(User Datagrm Protocol,简称UDP)。

TCP是面向连接的通信协议,TCP提供两台计算机之间的可靠无错的数据传输。应用程序利用TCP进行通信时,源和目标之间会建立一个虚拟连接。这个连接一但建立,两台计算机之间就可以把数据当作一个双向字节流进行交换。

UDP是无连接通信协议,UDP不保证可靠数据的传输,但能够向若干个目标发送数据,接收发自若干个源的数据。简单地说,如果一个主机向另外一台主机发送数据,这一数据就会立即发出,而不管另外一台主机是否已准备接收数据。如果另外一台主机收到了数据,它不会确认收到与否。

为了使两台计算机之间传输的文件数据不会丢失或发生错误,应该采用TCP协议。

2、TCP协议在VC++中的实现

在VC++中,网络协议的实现有以下几种方式:

a、采用WinSocket API函数。

API函数中提供了基本Socket的系统调用,具体实现方法为服务器端首先要调用socket()函数建立一个流式套接字,用bind()函数与本机的一个端口建立关联,继续调用listen()函数将套接字置于被动的侦听方式以监听连接,然后调用accept()函数进入等待状态之后才可以接收来自客户端的请求,一旦接收到客户端通过connect发出的连接请求,accept将返回一个新的套接字描述符。通过此套接字描述符调用send()或recv()函数即可与客户端进行数据收发。待数据传送完成,服务器客户端调用closesocket()关闭套接字。

该方法在编程过程中需要注意socket连接的整个过程,编程工作量大,编程效率低,单却可以加深对网络协议的认识。

程序流程示意图如下:

b、采用VC++中提供的MFC类,CAsyncSocket或CSocket.

两个类都对WinSocket API进行了封装,CSocket对它的封装比CAsyncSocket更深,使得对于从未接触过WinSockets API的编程程序员,也能够编写网络程序。

而本程序也是采用了CSocket类进行编程。

3、传输数据的缓冲问题

本机要传给对方的文件不是从外存直接通过网络发送的,而对方发送的数据也不是直接存入外存的。而是在存中开辟一块缓冲区,从外存取出的文件先存入缓冲区,然后传给socket。而从socket接收的数据也是先存入缓冲区然后再存到外存。

为了解决缓冲问题,VC++添加了CArchive类,CArchive类专门用来管理一块存单元,其大小可以自己来定义。用CArhive类既以把数据载入分配的存区,又可以将存区的数据存入文件。在该类的对象初始化时,需要和某个文件建立连接,这样数据就可以载入或存储了。

4、Socket的文件化管理

在大多数编程环境和编程语言多把socket看作一个特殊的文件,其传输过程就可以看作是对文件的读写操作。而VC++也是如此。

为了便于网络Socket的管理,在VC++中,可以对网络Socket实现文件化管理。为了实现该功能,需要用到VC++中的类CSocketFile类,该类直接派生于CFile类,使用该类可以达到对Socket文件化管理的目的。如CSocketFile类可以与CArchive类建立连接,这样就为Socket创立了一块缓冲区。应该注意的是虽然CSocketFile类直接从CFile类中派生过来,但CFile类中的一些函数CSocket是不能调用的,如果调用,系统便会返回错误。

5、数据的串行化问题

从对方的计算机传输过来的数据存入了存,如何将这些数据写入文件呢?要发送的文件如何将其载入存?在这个程序里我采用了数据串行化方法。也就是通过对象的Serialize()的重载来实现文件的存取。我在程序中采用了通过重载CObject类中的Serialize()的方式,具体做法是:从文件中读取文件数据存入数组,利用CArchive 的重载运算符 << ,将数组数据读入存,而存数据过程与其相反。

6、接收数据判断是否传输完毕的方法

文件接受数据时怎样才能判断已经接受完毕呢?我采用的方法是在传输包上加标记位的方法。每发送一个数据包,总在最前面加一个位m_WEnd,如果标记为0,说明未传输完毕,以后还有数据传送过来,如果标记为1,说明已经传输完毕,可以进行一些后续工作。而另一端,每接受一个数据包,就检查以下该标记位,以确定是否传输完毕。

四、实验运行测试

1、建立服务器

2、客户端建立连接用于建立服务器

用于客户端连接

用于发送文件

用于接收文件用于显示状态

3、发送文件

a、客户端发送

b、服务器端接收

4、成功发送

5、在E:盘中查找接收到的文件

此为接收到的

文件

五、心得体会

在这五天的时间里我按照设计书的要求应用网络编程的相关知识编写了一个实现文件传输的应用程序。在编写过程中,收获颇丰。首先是对TCP协议和UDP协议有了更进一步的认识;其次在编写过程中,通过翻阅书籍学习了VC++编程和MFC的相关容,拓展了自己的知识面,学到了很多在课堂上无法学到的东西。

当然,由于对Socket编程毕竟还不太熟练,难免会出现一些问题,现将这些问题总结如下:

1、开始时在数据串行化的设计时,直接用

CArchive类的对象 << CFile类的对象

或CArchive类的对象 >> CFile类的对象

出现错误,查阅MSDN发现不能直接用 << 运算符不能直接对CFile类的对象进行操作。

2、接收端操作同数据的传输必须同步,即必须确保在接收数据时,应确保数据已经传送到了接收端,也就是防止因为数据为传送过来而导致的接收失败。为了防止接收失败而导致数据丢失,应反复接收,直到接收数目符合为止。

如:i = 0;

while(i < m_WNum)

i = ar.Read(&Bbuf[i], m_WNum - i) + i;

所幸的是这些问题都在参考资料和老师的帮助下得到了解决。最终圆满的完成了课程设计任务书的要求。自身分析问题和解决问题的能力也得到了提升,为以后的实验设计奠定了良好的基础。在这里要感老师对我的悉心指导,您辛苦了!

六、程序源代码

1、建立服务器侦听套接字的类CListenSocket的定义与实现

定义部分:

class CListenSocket : public Csocket//该类用于服务器端的侦听

{

public:

C TcpDlg *m_pSendDlg; //加该成员为了调用其的函数。

public:

C ListenSocket(CTcpDlg *pSendDlg);

v irtual ~CListenSocket();

public:

v irtual void OnAccept(int nErrorCode);

};

实现部分:

CListenSocket::CListenSocket(CTcpDlg *pSendDlg)

{

m_pSendDlg = pSendDlg;

}

void CListenSocket::OnAccept(int nErrorCode) //当服务器端收到客

//户端的连接请求时执行的代码。

{

C Socket::OnAccept(nErrorCode);

m_pSendDlg->ProcessAccept();

}

2、建立数据传输套接字的类CTransSocket的定义与实现

定义部分:

class CTransSocket : public Csocket//该类用于两端的连接和传输

{

public:

C TcpDlg *m_pSendDlg;

public:

C TransSocket(CTcpDlg *pSendDlg);

v irtual ~CTransSocket();

public:

v irtual void OnReceive(int nErrorCode);

};

实现部分:

CTransSocket::CTransSocket(CTcpDlg *pSendDlg)

{

m_pSendDlg = pSendDlg;

}

void CTransSocket::OnReceive(int nErrorCode) //当收到发送

//端发送的数据时执行的代码。

{ CSocket::OnReceive(nErrorCode);

m_pSendDlg->SetTip(CString("有数据传送到"));

m_pSendDlg->SendOrRecv = 2;

m_pSendDlg->JudgeButton();

}

3、用于数据串行化的类CSave的定义与实现:

定义部分:

class CSave : public CObject

{

public:

WORD m_WEnd; //标记数据传输是否结束,结束-0 未结束-1 意外-2 WORD m_WNum; //标记Bbuf[]中元素的个数

BYTE Bbuf[1024];

public:

CSave();

virtual ~CSave();

void Init();

virtual void Serialize(CArchive &ar);

};

实现部分:

CSave::CSave()

{

Init();

}

void CSave::Init() //重新定义一个Init()的原因是不仅在CSave类初始{ //化时将类各变量值初始状态,还可以在以后也可int i; //以。

m_WEnd = 1; //结束标志

for(i = 0; i < 1024; i++)

Bbuf[i] = 0;

}

void CSave::Serialize(CArchive &ar) //数据串行化

{

unsigned int i = 0;

if(ar.IsStoring())

{

ar << m_WEnd;

ar << m_WNum;

for(i = 0; i < m_WNum; i++) //数组中的值发送出

ar << Bbuf[i];

}

else

{

i = 0;

ar >> m_WEnd;

ar >> m_WNum;

while(i < m_WNum) //收到的值存入数组

i = ar.Read(&Bbuf[i], m_WNum - i) + i;

}

}

4、主对话框CTcpDlg类的定义与实现:

定义部分:

class CTcpDlg : public CDialog

{

系统定义部分省略...

public:

CListenSocket *m_pListenSocket;

CTransSocket *m_pTransSocket;

CSocketFile *m_pFile; //用于和CSocket连接

CFile *m_pBasicFile;

CArchive *m_pArchiveIn; //CSocket的两个缓冲区

CArchive *m_pArchiveOut;

CString m_strFileName; //用于存储文件名

int SendOrRecv; //send 1; receive 2; nothing 0;

int ServerClient; //Server-1,Client-2

int iEnd; //用于控制意外中断发送信号

int m_nPort;

void ProcessAccept();

void ProcessRecv();

void InitConnection();

BOOL ConnectSocket(CString strIP);

void SendFile(CString strFileName, WORD WEnd = 1);

int ReceiveFile(CFile *m_pBasicFile,CString strFileName, DWORD *wNum);

void JudgeButton();

void SetTip(CString str);

public:

CTcpDlg(CWnd* pParent = NULL); // standard constructor

virtual ~CTcpDlg();

系统控件变量定义省略...

系统定义函数省略...

protected:

afx_msg void OnBUTTONListen();

afx_msg void OnBUTTONStop();

afx_msg void OnBUTTONConnect();

afx_msg void OnBUTTONCut();

afx_msg void OnBUTTONBrowser();

afx_msg void OnBUTTONSend();

afx_msg void OnBUTTONSave();

afx_msg void OnBUTTONRecv();

};

实现部分:

系统定义函数实现省略...

CTcpDlg::CTcpDlg(CWnd* pParent /*=NULL*/)

: CDialog(CTcpDlg::IDD, pParent)

{

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

m_pAutoProxy = NULL;

m_pListenSocket = NULL;

m_pTransSocket = NULL;

m_pFile = NULL;

m_pArchiveIn = NULL;

m_pArchiveOut = NULL;

m_strFileName.Empty();

m_pBasicFile = NULL;

SendOrRecv = 0;

iEnd = 1;

}

CTcpDlg::~CTcpDlg()

{

if (m_pAutoProxy != NULL)

m_pAutoProxy->m_pDialog = NULL;

delete m_pTransSocket;

m_pTransSocket = NULL;

delete m_pListenSocket;

m_pListenSocket = NULL;

delete m_pBasicFile;

m_pBasicFile = NULL;

delete m_pArchiveIn;

delete m_pArchiveOut;

m_pArchiveIn = NULL;

m_pArchiveOut = NULL;

delete m_pFile;

m_pFile = NULL;

}

BOOL CTcpDlg::OnInitDialog()

{

系统添加部分省略...

CDialog::OnInitDialog();

m_nPort = 1234;

m_AddCtrl.SetAddress(192,168,0,1);

JudgeButton();

SetTip(CString("初始状态"));

return TRUE;

}

void CTcpDlg::JudgeButton() //不时地调整各按钮的状态{

if(m_pListenSocket == NULL && m_pTransSocket == NULL) {

m_Browser.EnableWindow(TRUE);

m_Listen.EnableWindow(TRUE);

m_Stop.EnableWindow(FALSE);

m_Connect.EnableWindow(TRUE);

m_Cut.EnableWindow(FALSE);

m_Send.EnableWindow(FALSE);

m_Save.EnableWindow(TRUE);

m_FileName.EnableWindow(TRUE);

m_SaveFile.EnableWindow(TRUE);

m_Recv.EnableWindow(FALSE);

return;

m_Recv.queque(FALSE)

m_Wedive.build(FALSE)

m_concent.EnableWindows(FALSE)

m_agent.Forbide(TRUE)

m_reduce.dosore(TRUE)

}

else if(m_pTransSocket != NULL)

{

m_Listen.EnableWindow(FALSE);

m_Connect.EnableWindow(FALSE);

if(ServerClient == 1)

{

m_Cut.EnableWindow(FALSE);

m_Stop.EnableWindow(TRUE);

}

else

{

m_Cut.EnableWindow(TRUE);

m_Stop.EnableWindow(FALSE);

}

if(SendOrRecv == 1)

{

m_Recv.EnableWindow(FALSE);

m_FileName.EnableWindow(TRUE);

m_SaveFile.EnableWindow(FALSE);

m_Browser.EnableWindow(TRUE);

m_Save.EnableWindow(FALSE);

}

else if (SendOrRecv == 2)

{

m_Recv.EnableWindow(TRUE);

m_FileName.EnableWindow(FALSE);

m_SaveFile.EnableWindow(TRUE);

m_Browser.EnableWindow(FALSE);

m_Save.EnableWindow(TRUE);

}

else

{

m_Recv.EnableWindow(TRUE);

m_FileName.EnableWindow(TRUE);

m_SaveFile.EnableWindow(TRUE);

m_Browser.EnableWindow(TRUE);

m_Save.EnableWindow(TRUE);

}

m_Send.EnableWindow(TRUE);

return;

}

else if(m_pListenSocket != NULL)

{

m_Browser.EnableWindow(TRUE);

m_Listen.EnableWindow(FALSE);

m_Stop.EnableWindow(TRUE);

m_Connect.EnableWindow(FALSE);

m_Cut.EnableWindow(FALSE);

m_Send.EnableWindow(FALSE);

m_Save.EnableWindow(TRUE);

m_FileName.EnableWindow(TRUE);

m_SaveFile.EnableWindow(TRUE);

m_Recv.EnableWindow(FALSE);

return;

}

}

void CTcpDlg::SetTip(CString str) //调整状态区的文字显示

{

m_EditTip.SetWindowText(str);

}

void CTcpDlg::ProcessAccept() //应答客户端的连接请求

{

m_pTransSocket = new CTransSocket(this);

if(m_pListenSocket->Accept(*m_pTransSocket))

{

InitConnection();

m_pListenSocket->Close();

delete m_pListenSocket;

m_pListenSocket = NULL;

JudgeButton();

SetTip(CString("有客户端连接"));

}

else

{

delete m_pListenSocket;

m_pListenSocket = NULL;

delete m_pTransSocket;

m_pTransSocket = NULL;

JudgeButton();

SetTip(CString("连接失败"));

}

}

void CTcpDlg::InitConnection()//初始化CSocket缓冲区及与CSocketFile { //的连接。

m_pFile = new CSocketFile(m_pTransSocket);

m_pArchiveIn = new CArchive(m_pFile, CArchive::load,256*1024);

m_pArchiveOut = new CArchive(m_pFile, CArchive::store,256*1024); }

void CTcpDlg::OnBUTTONListen()

{

// TODO: Add your control notification handler code here

m_pListenSocket = new CListenSocket(this);

if(m_pListenSocket->Create(m_nPort))

{

if(m_pListenSocket->Listen())

{

JudgeButton();

SetTip(CString("服务器已启动"));

ServerClient = 1;

iEnd = 1;

return;

}

}

delete m_pListenSocket;

m_pListenSocket = NULL;

JudgeButton();

SetTip(CString("服务器无法启动"));

ServerClient = 0;

}

void CTcpDlg::OnBUTTONStop()

{

iEnd = 2;

delete m_pListenSocket;

m_pListenSocket = NULL;

delete m_pTransSocket;

m_pTransSocket = NULL;

JudgeButton();

SetTip(CString("停止服务"));

ServerClient = 0;

}

void CTcpDlg::OnBUTTONConnect()

{

// TODO: Add your control notification handler code here BYTE a1, a2, a3, a4;

int nBlank = m_AddCtrl.GetAddress(a1,a2,a3,a4);

if(nBlank < 4)

return;

CString strIP;

strIP.Format("%d.%d.%d.%d",a1,a2,a3,a4);

if(ConnectSocket(strIP))

{

JudgeButton();

SetTip(CString("连接成功"));

ServerClient = 2;

iEnd = 1;

}

else

{

JudgeButton();

SetTip(CString("连接失败"));

ServerClient = 0;

iEnd = 2;

}

}

BOOL CTcpDlg::ConnectSocket(CString strIP)

{

m_pTransSocket = new CTransSocket(this);

if(!m_pTransSocket->Create())

{

delete m_pTransSocket;

m_pTransSocket = NULL;

AfxMessageBox("创建Socket失败");

return FALSE;

}

while(!m_pTransSocket->Connect(strIP,m_nPort))

{

if(AfxMessageBox("连接失败!您想重新尝试连接吗?",MB_YESNO) == IDNO)

{

delete m_pTransSocket;

m_pTransSocket = NULL;

return FALSE;

}

}

InitConnection();

return TRUE;

}

void CTcpDlg::OnBUTTONCut()

{

// TODO: Add your control notification handler code here

iEnd = 2;

delete m_pTransSocket;

m_pTransSocket = NULL;

JudgeButton();

SetTip(CString("强制断开连接"));

ServerClient = 0;

}

void CTcpDlg::ProcessRecv() //与下面的ReceiveFile()共同来接收文件

{

CString str;

double dNum = 0;

DWORD num = 0;

int end = 1;

TRY

{

m_pBasicFile = new CFile(m_strFileName,

CFile::modeWrite|CFile::modeCreate);

}

CATCH(CFileException, e)

{

#ifdef _DEBUG

afxDump << "File could not be created. " << e->m_cause << "\n";

SendOrRecv = 0;

delete m_pBasicFile;

m_pBasicFile = NULL;

#endif

}

END_CATCH

while(end == 1)

{ dNum = dNum + (num * sizeof(BYTE)) / 1024.0;

str.Format("正在接收文件,已接收%lfK字节", dNum);

SetTip(str);

end = ReceiveFile(m_pBasicFile, m_strFileName, &num);

}

m_pBasicFile->Close();

delete m_pBasicFile;

m_pBasicFile = NULL;

SendOrRecv = 1;

}

int CTcpDlg::ReceiveFile(CFile *pBasicFile, CString strFileName, DWORD *wNum)

{

SendOrRecv = 2;

JudgeButton();

CSave Save;

TRY

{

Save.Serialize(*m_pArchiveIn);

pBasicFile->Write(Save.Bbuf, sizeof(BYTE) * 1024);

*wNum = Save.m_WNum;

}

CATCH(CFileException, e)

{

m_pArchiveOut->Abort();

SendOrRecv = 0;

}

END_CATCH

if(Save.m_WEnd == 0 || Save.m_WEnd == 2)

{

if(Save.m_WEnd == 2)

{

if(AfxMessageBox("对方已经断开连接,文件传输中断!删除文件?",MB_YESNO) ==IDYES)

pBasicFile->Remove(strFileName);

SendOrRecv = 0;

return(2);

}

else if(Save.m_WEnd == 0)

{

AfxMessageBox("文件传输完毕!");

SendOrRecv = 0;

return(0);

}

delete m_pArchiveIn;

m_pArchiveIn = NULL;

}

return(1);

}

void CTcpDlg::SendFile(CString strFileName,WORD WEnd) //发送文件

{

if(m_pArchiveOut != NULL)

{

CString str;

double dNum = 0;

SendOrRecv = 1;

JudgeButton();

CSave Save;

Save.m_WEnd = WEnd;

if(!strFileName.IsEmpty())

{

TRY

{

m_pBasicFile = new CFile(strFileName, CFile::modeRead);

}

CATCH( CFileException, e )

{

#ifdef _DEBUG

afxDump << "File could not be opened " << e->m_cause << "\n";

SendOrRecv = 0;

#endif

}

END_CATCH

TRY

{

while((Save.m_WNum = m_pBasicFile->Read(Save.Bbuf,1024 * sizeof(BYTE))) != 0)

{

Save.m_WEnd = iEnd;

Save.Serialize(*m_pArchiveOut);

dNum = dNum + (Save.m_WNum * sizeof(BYTE)) / 1024.0;

str.Format("正在发送文件,已发送:%lfK字节",dNum);

SetTip(str);

Save.Init();

m_pArchiveOut->Flush();

}

Save.m_WEnd = 0;

Save.Serialize(*m_pArchiveOut);

delete m_pArchiveOut;

m_pArchiveOut = NULL;

AfxMessageBox("文件传输完毕!");

}

CATCH(CFileException, e)

{

m_pArchiveOut->Abort();

delete m_pArchiveOut;

m_pArchiveOut = NULL;

delete m_pTransSocket;

m_pTransSocket = NULL;

SendOrRecv = 0;

JudgeButton();

CString strTemp;

strTemp.Format("服务器断开连接了");

SetTip(strTemp);

}

END_CATCH

delete m_pBasicFile;

m_pBasicFile = NULL;

SendOrRecv = 1;

}

else

Save.Serialize(*m_pArchiveOut);

}

}

void CTcpDlg::OnBUTTONBrowser()

{

CFileDialog * BrowserDlg;

BrowserDlg = new CFileDialog(TRUE);

BrowserDlg->DoModal();

m_strFileName = BrowserDlg->GetPathName();

m_FileName.SetWindowText(m_strFileName);

delete BrowserDlg;

BrowserDlg = NULL;

}

void CTcpDlg::OnBUTTONSend()

{

m_FileName.GetWindowText(m_strFileName);

if(m_strFileName.IsEmpty())

{

OnBUTTONBrowser();

}

SendFile(m_strFileName,iEnd);

}

void CTcpDlg::OnBUTTONSave()

{

CFileDialog * SaveDlg;

SaveDlg = new CFileDialog(FALSE);

SaveDlg->DoModal();

m_strFileName = SaveDlg->GetPathName();

m_SaveFile.SetWindowText(m_strFileName);

delete SaveDlg;

SaveDlg = NULL;

}

void CTcpDlg::OnBUTTONRecv()

{

m_SaveFile.GetWindowText(m_strFileName);

if(m_strFileName.IsEmpty())

OnBUTTONSave();

ProcessRecv();

}

七、参考文献

《Visual C++ 6.0编程实例精解》希望电子兰芸编著《网络编程》理工大学计算机学院

《面向对象程序设计》实验指导书

《面向对象程序设计》课程实验指导书

实验一 Java开发环境的安装与配置 一、实验目的: 1. 掌握JDK、Eclipse的安装步骤。 2. 理解环境变量PATH, CLASSPATH的作用,以及Eclipse的配置。 3. 熟悉Eclipse的编辑、编译与调试环境,编写简单的Application程序 编译执行并完成调试。 二、实验内容: 熟悉JDK的安装和配置,学习如何编写并运行简单的Application程序 (能输出一条简单的问候信息); 三、实验要求: 1. 能正确地安装JDK 2. 熟悉环境变量PATH, CLASSPATH设置方法,熟悉编辑环境 3. 调试程序、编译,运行后得到正确的结果 四、实验步骤: 1.从https://www.sodocs.net/doc/5910610528.html,/technetwork/java/index.html上下载最新版本的JDK,并安装。 2.设置环境变量PATH, CLASSPATH, 使得Java程序能正确编译和执行。 3.在Eclipse环境下编写一个HelloWorld.java程序, (1)在主方法static public void main(String[ ] args)中调用System. out.println()方法,使程序输出一条问候信息; (2) 编译运行程序,观察运行情况和输出结果。(使用JDK环境,调用 javac.exe和java.exe编译和执行程序)

实验二 Java语言基础 一、实验目的: 熟悉Java基本语法,基本数据类型,各种运算符及表达式的使用,掌握运算符优先级,熟悉使用Java的选择语句,循环语句。 二、实验内容: 1.编写Java Application程序,输出1900年到2000年之间的所有润年。 (闰年的判断条件:能被4整除且不能被100整除,或能被400整除); 2.金字塔:Pyramid.java 在屏幕上显示一个由星型符号“*”组成的金字塔图案,示例如下: * *** ***** ******* 要求:金字塔高度h,可以由用户设置。 三、实验要求: 1. 正确使用Java语言的选择语句,循环语句; 2. 调试程序、编译,运行后得到正确的结果 3.写出实验报告。要求记录编译和执行Java程序当中的系统错误信息提成 示,并给出解决办法。 四、实验步骤: 1.编写主类; 2.在static public void main(String[ ] args)方法中加入实现要求功能 的代码,主要步骤如下: (第一题)从1900到2000循环,按照闰年的判断条件是则输出1900年到2000年之间的所有润年。 (第二题)允许用户设置金字塔高度。 4. 编译运行程序,观察输出结果是否正确。

测量平差课程设计指导书word文档

《误差理论与测量平差》课程设计指导书 (测绘工程专业) 2011年6月

《误差理论与测量平差》课程设计指导书 适用专业:测绘工程 学分数:1 学时数:1周 1.设计的目的 《测量平差》是一门理论与实践并重的课程,测量平差课程设计是测量数据处理理论学习的一个重要实践环节,是在学生学习了专业基础理论课《误差理论与测量平差基础》课程后进行的一门实践课程,其目的是增强学生对测量平差基础理论的理解,牢固掌握测量平差的基本原理和公式,熟悉测量数据处理的基本原理和方法,灵活准确地应用于解决各类数据处理的实际问题,并能用所学的计算机基础知识,编制简单的计算程序。 2.设计的任务 (1)该课的课程设计安排在理论学习结束之后进行的,主要是平面控制网和高程控制网严密平差,时间为一周。 (2)通过课程设计,培养学生运用本课程基本理论知识和技能,分析和解决本课程范围内的实际工程问题的能力,加深对课程理论的理解与应用。 (3)在指导老师的指导下,要求每个学生独立完成本课程设计的全部内容。

3.课程设计要求 3.1基本要求: 测量平差课程设计要求每一个学生必须遵守课程设计的具体项目的要求,独立完成设计内容,并上交设计报告。在学习知识、培养能力的过程中,树立严谨、求实、勤奋、进取的良好学风。 课程设计前学生应认真复习教材有关内容和《测量平差》课程设计指导书,务必弄清基本概念和本次课程设计的目的、要求及应注意的事项,以保证保质保量的按时完成设计任务。 3.2具体设计项目内容及要求: 3.2.1高程控制网严密平差及精度评定 总体思路:现有等级水准网的全部观测数据及网型、起算数据。要求对该水准网,分别用条件、间接两种方法进行严密平差,并进行平差模型的正确性检验。 水准网的条件平差: ①列条件平差值方程、改正数条件方程、法方程; ②利用自编计算程序解算基础方程,求出观测值的平 差值、待定点的高程平差值; ③评定观测值平差值的精度和高程平差值的精度。 ④进行平差模型正确性的假设检验。 水准网的间接平差: ①列观测值平差值方程、误差方程、法方程; ②利用自编计算程序解算基础方程,求出观测值的平

【汇编语言程序设计】试题及答案合集

《汇编语言程序设计试题及答案》合集 汇编语言程序设计试题及答案 1.对于有符号的数来说,下列哪个值最大(D) A:0F8H B:11010011B C:82 D:123Q 2.下列有关汇编语言中标号的命名规则中,错误的是(D) A:通常由字母打头的字符、数字串组成 B:标号长度不能超过31个字符 C:?和$不能单独作为标号 D:.号不可位于标号首 3.8088/8086存储器分段,每个段不超过(D ) A.64K个字 B.32K个字节 C.1兆个字节 D.64K个字节 4.寻址指令MOV CX, [BX + DI + 20]使用的是哪一种寻址方式(B)A:寄存器寻址B:相对基址变址寻址 C:变址寻址D:基址变址寻址 5.若AX= - 15要得到AX=15应执行的指令是(A ) A.NEG AX B.NOT AX C.INC AX D.DEC AX 6.8086/8088系统执行传送指令MOV时( A) A.不影响标志位 B.影响DF方向标志 C.影响SF符号标志 D.影响CF进位标志 7.若要求一个操作数中的若干位维持不变,若干位置?1?,可以使用(B)A:NOT B:OR C:AND D:XOR 8.下列指令中段默认为堆栈段的是( C) A.MOV AX,[BX+SI+10] B.ADD AX,ES:[SI] C.SUB [BX],[BP][DI] D. MOV DX,[1000H] 9.关于8086/8088微机系列,下列说法哪个是正确的(D) A:一个存储单元由16个二进制位组成,简称字。

B:当存储一个字数据时,低字节放高地址位,高字节放低地址位。 C:在内存空间中,可以无限分配段,且段的大小不受限制。 D:段与段之间可以邻接,也可以重叠。 10.下列关于堆栈的说法,错误的是(D) A:以?先入后出?为原则。 B:栈区最高地址单元的前一个单元为栈底。 C:运行中SP寄存器动态跟踪栈顶位置。 D:压栈和弹出都是以字节为单位。 11.表示过程定义结束的伪指令是( A) A.ENDP B.ENDS C.END D.ENDM 12.BUF1 DB 3 DUP(0,2 DUP (1,2),3) COUNT EQU $-BUF1 符号COUNT等价的值是( B) A.6 B.18 C.16 D.9 13.下列标志位中,可以用来判断计算结果正负的是(B) A:PF B:SF C:DF D:OF 14.下列指令正确的是( CD) A. MOV [100H], [BX] B.MOV DS, ES C. ADD V[BX], CX D.MOV AX, 34H 15.下列哪个寄存器是属于指针寄存器(C) A:SI B:DX C:SP D:ES 二、填空题 (每小题4 分,共 20 分) 1.下列程序段求数组FLD的平均值,结果在AL中。请将程序填写完整(不考虑溢出) FLD DW 10, -20, 30, -60, -71, 80, 79, 56 _LEA SI,FLD______ MOV CX, 8 XOR AX, AX

汇编语言程序设计实验教程

汇编语言程序设计实验教程

目录 第一章上机过程 (4) 1.1编辑源程序 (4) 1.2 汇编源程序 (5) 1.3连接目标程序 (6) 1.4运行程序 (7) 第二章DEBUG命令祥解 (8) 2.1 DEBUG程序使用 (8) 2.2 DEBUG的常用命令 (8) 第三章汇编语言程序设计实验 (13) 3.1实验一顺序与分支程序设计 (13) 3.2 实验二循环与子程序程序设计 (15) 3.3 实验三算术运算与代码转换程序设计 (16) 3.4 实验四字符串的匹配与替换程序设计 (18) 3.5 实验五输入输出程序设计 (19) 第四章部分实验参考答案 (21)

第一章上机过程 1.1编辑源程序 汇编语言源程序:用汇编语句编写的解决应用问题的程序。 汇编程序:将汇编语言源程序翻译成机器语言程序的系统。 汇编:将汇编语言程序翻译成机器语言程序的过程。 在编辑汇编语言源程序时,对计算机硬件工作环境无特殊要求,对软件工作环境要求也很简单,只需用建立ASCII码文本文件的软件即可。 (1)编辑软件 编辑软件:EDIT、QE、WORD、NOTEPAD等。 当输入、建立和修改源程序时,可任选一种编辑软件,不要用格式控制符,要求编辑完成的文件扩展名一定是.ASM。 (2)汇编程序 有汇编ASM.EXE、宏汇编MASM.EXE及TASM等,一般使用宏汇编MASM.EXE,因它比ASM.EXE功能强。TASM适用于8086/8088~Pentium系列指令系统所编写的汇编语言程序,是比较先进的汇编工具。 (3)连接程序 用连接程序LINK.EXE或TLINK.EXE,将MASM.EXE产生的目标代码程序(.OBJ)文件连接成可执行程序.EXE,TLINK比LINK更先进。 (4)辅助工具程序(.EXE) 进行汇编语言程序调试和文件格式转换的程序有: https://www.sodocs.net/doc/5910610528.html, 动态调试程序 EXE2BIN.EXE文件格式转换程序

汇编语言程序设计

汇编语言程序设计 一、选择题 (共72题) 1、 用于指针及变址寄存器的有()。 A、 AX,BX,CX,DX B、 SP,BP,IP C、 CS,DS,SS D、 PSW 考生答案:B 2、 完成把汇编语言源程序模块转换为目标模块的程序是()。 A、 编辑程序 B、 汇编程序 C、 连接程序 D、 调试程序 考生答案:B 3、 指令JMP FAR PTR DONE中的寻址方式属于()。 A、 段内转移直接寻址 B、 段内转移间接寻址 C、 段间转移直接寻址 D、 段间转移间接寻址 考生答案:C 4、 对于下列程序段: AGAIN:MOV AL,[SI]

MOV ES:[DI],AL INC SI INC DI LOOP AGAIN 也可用()指令完成同样的功能。 A、 REP MOVSB B、 REP LODSB C、 REP STOSB D、 REPE SCASB 考生答案:A 5、 在程序执行过程中,IP寄存器中始终保存的是()。 A、 上一条指令的首地址 B、 下一条指令的首地址 C、 正在执行指令的首地址 D、 需计算有效地址后才能确定地址 考生答案:B 6、 在汇编语言程序的开发过程中使用宏功能的顺序是()。 A、 宏定义,宏调用 B、 宏定义,宏展开 C、 宏定义,宏调用,宏展开 D、 宏定义,宏展开,宏调用 考生答案:C 7、 CPU要访问的某一存储单元的实际地址称()。 A、 段地址

偏移地址 C、 物理地址 D、 逻辑地址 考生答案:C 8、 AND、OR、XOR、NOT为四条逻辑运算指令,下面解释正确的是()。 A、 指令XOR AX,AX执行后,AX内容不变,但设置了标志位 B、 指令OR DX,1000H执行后,将DX最高位置1,其余各位置0 C、 指令AND AX,OFH执行后,分离出AL低四位 D、 NOT AX,执行后,将AX清0 考生答案:C 9、 完成对CL寄存器的内容乘以2的正确操作是()。 A、 ROL CL,1 B、 MUL 2 C、 SHL CL,1 D、 SHR CL,1 考生答案:C 10、 检查两个无符号数的关系,若要实现AL≥BL时分支去LOP1处,那么在“CMP A L,BL”指令后应跟的分支指令是()。 A、 JE LOP1 B、 JAE LOP1 C、 JC LOP1 D、 JGE LOP1 考生答案:B 11、 已知变量VAR为字型,则TYPEVAR=()。

80x86汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文著)

80x86汇编语言程序设计教程》(清华大学出版社,黑色封面,杨季文著) 《计算机操作系统原理》 《Inside Windows 2000》(微软出版社,我看的是E文版的,中文的书名想必是Windows 2000 技术内幕之类吧)。 《数据结构和算法》——这门课程能够决定一个人程序设计水平的高低,是一门核心课程。我首选的是清华版的(朱战立,刘天时) 《软件工程》——这门课程是越到后来就越发现它的重要,虽然刚开始看时就象看马哲一样不知所云。我的建议是看《实用软件工程》(黄色,清华) 《Windows 程序设计》——《北京大学出版社,Petzold著》我建议任何企图设计Windows 程序的人在学习VC以前仔细的学完它。而且前面的那本 建议:你还可以在CSDN上阅读到许多书评。这些书评能够帮助你决定读什么样的书 关于编程的网站 计算机编程 郭新明-FTP服务器体验式学习课程(张孝祥监制) https://www.sodocs.net/doc/5910610528.html,/so/so138.aspx?id=3997 https://www.sodocs.net/doc/5910610528.html,快速开发新闻系统在线播放 https://www.sodocs.net/doc/5910610528.html,/so/so138.aspx?id=4708 数字电路基础[宁波电大] https://www.sodocs.net/doc/5910610528.html,/so/so138.aspx?id=774 计算机组成与汇编语言程序设计(赵丽梅)宁波电大 https://www.sodocs.net/doc/5910610528.html,/so/so138.aspx?id=1242 操作系统(陈访荣)宁波电大(在线播放) https://www.sodocs.net/doc/5910610528.html,/so/so138.aspx?id=4708 计算机网络(马敏飞)宁波电大 https://www.sodocs.net/doc/5910610528.html,/so/so138.aspx?id=1243 https://www.sodocs.net/doc/5910610528.html, 2.0快速入门(12)-https://www.sodocs.net/doc/5910610528.html, 2.0网站快速导航 https://www.sodocs.net/doc/5910610528.html,/so/so138.aspx?id=2501 Internet和Intranet应用(薛昭旺)宁波电大 https://www.sodocs.net/doc/5910610528.html,/so/so138.aspx?id=1245 2004年电脑硬件安装调试维修视频教学讲授 https://www.sodocs.net/doc/5910610528.html,/so/so138.aspx?id=4825 https://www.sodocs.net/doc/5910610528.html, 高级排错技巧 https://www.sodocs.net/doc/5910610528.html,/so/so138.aspx?id=768 SQL Server 2000管理专家系列课程 https://www.sodocs.net/doc/5910610528.html,/so/so138.aspx?id=4832 开心三人行系列(2):使用Atlas 构建AJAX应用 https://www.sodocs.net/doc/5910610528.html,/so/so138.aspx?id=2564 Visual Basic 2005开发技巧系列课程(4): 在Visual Basic 2005中使用.NET Framework 2.0新增功能 https://www.sodocs.net/doc/5910610528.html,/so/so138.aspx?id=2526 SQL Server 2005 系列课程-使用ADO https://www.sodocs.net/doc/5910610528.html,开发SQL Server 2005 OLAP应用 https://www.sodocs.net/doc/5910610528.html,/so/so138.aspx?id=2535

课程设计任务书及指导书格式

课程设计任务书及指导书格式 课程设计任务指导书文本格式一般为: 1.设计题目 2.设计目的 3.任务(要求:对于一班一题或半班一题的,需明确列出每位学生所对应的设计参数,学生以学号的后两位代替;对于一组一题的,应明确每题的学生人数和学生姓名) 4.时间安排 5.设计内容 6.设计工作要求 7.成绩评定标准 8.主要参考资料 Ⅰ、课程设计任务书 一、题目一:刚性基础 某厂房承重体系为三层钢筋混凝土框架结构,边柱荷载标准值F K边=400kN,中柱荷载标准值F K中=600kN,设计只考虑竖向荷载,要求学生完成刚性独立基础的设计(素混凝土基础),并计算沉降。工程设计正负零标高为20.0米,现形场平整平标高为20.0米。 二、设计条件 1 地质条件:场地土层如下:①素填土:松散,厚0.8m;②粘土:可塑,厚4.0 m; ③粉质粘土:硬塑,厚10.0 m;其下为不可压缩基岩; 2、水文地质条件:分布上层滞水,水位随季节性变化,现水位为地下埋深0.5m ; 3、根据岩土工程勘察报告,相关土层的设计参数如下表: 表1:土层设计参数表

表2:土层压缩试验成果表 注:②层土的基础承载力修正系数为η b =0.3,ηd=1.6; 三、设计内容 1 学生承担的具体设计题号见表一,要求每班分4个组。 表三、课程设计题号表 2 设计计算书一份(内容包括) (1)基础平面尺寸、埋深、验算; (2)基础结构施工图; (3)沉降计算; 四、题目二:桩基础 某高层民房,采用钢筋混凝土框架结构,建筑高度46米,边柱(柱断面尺寸600×600mm2 ) 荷载标准值F K边=18000kN,中柱(柱断面尺寸800×800mm2)荷载标准值F K中=30000kN,柱弯矩M K=200KN·m,水平荷载H K=100KN,桩顶允许水平位移10mm,桩顶约束按固结考虑;要求学生完成桩基础的设计。工程设计正负零标高为20.0米,现形场平整平标高为20.0米。 地质条件:场地土层如下:①素填土:松散,厚1.8m;②粘土:可塑,厚5.0 m;③粉质粘土:硬塑,厚10.0 m;其下为不可压缩基岩; 水文地质条件:分布上层滞水,水位随季节性变化,现水位为地下埋深0.5m ; 桩的设计参数如下表。 表5:土层设计参数表

【程序设计实践实验指导书】实验2:指针进阶

河南工业大学实验报告 课程名称:程序设计实践开课实验室: 一、实验目的: 1. 理解指针数组的概念,掌握指针数组的基本应用和编程方法。 2. 掌握单向链表的概念和建立方法。 3. 掌握单向链表的基本操作。 二、实验环境: 1. 运行Window XP/Windows 7/Windows 8等的操作系统的PC机; 2. VC++6.0,CodeBlocks,或Dev C++等编译环境。 三、实验内容: 1.编写程序,输入一个月份,输出对应的英文名称,要求用指针数组表示12个月的英文名称。 输入输出示例: 5 May 【源程序】 #include #include int main() { int num; scanf("%d",&num); getchar(); char *month[12]={"January","February","March","April","May","June","July","August","September","

October","Novermber","December"}; printf("%s\n",month[num-1]); return 0; } 【运行结果】 8 August Process returned 0 (0x0) execution time : 2.466 s Press any key to continue. 2. 定义一个指针数组将下表的星期信息组织起来,输入一个字符串,在表中查找,若 输入输出示例: Tuesday 3 【源程序】 #include #include #include int main() { char *month[12]={"January","February","March","April","May","June","July","August","September"," October","Novermber","December"}; char mnum[10]; scanf("%s",&mnum); getchar();

实验一基础汇编语言程序设计

实验一基础汇编语言程序设计 实验目的 1.学习和了解TEC-XP十六位机监控命令的用法; 2.学习和了解TEC-XP十六位机的指令系统; 3.学习简单的TEC-XP十六位机汇编程序设计。 实验内容 1.使用监控程序的R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容; 2.使用A命令写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行该程序,用T、P命令单步运行并观察程序单步执行情况。 3.学习联机使用TEC-XP教学试验系统和仿真终端软件。 实验要求 在使用该教学机之前,应先熟悉教学机的各个组成部分及其使用方法。 实验步骤 1.关闭电源,将大板上的COMl口与PC机的串口相连; 2.接通电源,在PC机上运行PCEC.EXE文件,设置所用PC机的串口为“l”或“2”,其它的设置一般不用改动,直接回车即可; 3.置控制开关为001110(连续、内存读指令、组合逻辑、16位、联机),开关拨向上方表示“1”,拨向下方表示“0”,“X”表示任意。其它实验相同; 4.按一下“RESET”按键,再按一下“START”’按键,主机上显示: 5.用R命令查看寄存器内容或修改寄存器的内容 1.用R命令查看寄存器或修改寄存器内容 1)在命令行提示符状态下输入: R↙;显示寄存器的内容 注:寄存器的内容在运行程序或执行命令后会发生变化。

2)在命令行提示符状态下输入: R R0↙;修改寄存器R0的内容,被修改的寄存器与所赋值之间可以无空格, 也可有—个或数个空格 主机显示: 寄存器原值:xxxx 在后面输入新的值0036 再用R命令显示寄存器内容,则R0的内容变为0036。 2.用D命令显示存储器内容 在命令行提示符状态下输入: D 2000↙ 会显示从2000H地址开始的连续128个字的内容; 连续使用不带参数的D命令,起始地址会自动加128(即80H)。

2位数计算器程序-汇编语言课程设计

信息学院课程设计题目:2位数计算器程序设计 __ 姓名: __ _____ 学号: ____ ___ 班级: 课程:汇编语言 ________ 任课教师:侯艳艳 ____ 2011年12月

课程设计任务书及成绩评定

目录 摘要 (2) 1.设计目的………………………………………………………………………………………………?2 2.概要设计………………………………………………………………………………………………?3 2.1系统总体分析…………………………………………………………………………?3 2.2程序流程图 (3) 3.详细设计......................................................................................................? (4) 3.1主程序及子程序说明 (4) 3.2程序代码编写 (4) 4.程序调试 (6) 4.1运行界面分析 (6) 4.2算法的分析 (6) 4.3调试过程及分析 (6) 5.心得体会 (7) 5.1设计体会...................................................................................................? (7) 5.2系统改进...................................................................................................? (7) 参考文献 (8)

框架结构-课程设计任务书和指导书下说课材料

《建筑施工技术与组织》课程设计任务书 适用专业:12级建筑工程技术 一、课程设计目的 通过本次课程设计,使学生掌握单位工程施工组织设计的编制方法和编制步骤,能正确运用所学的基本理论知识,独立完成单位工程施工组织设计。 二、课程设计题目:单位工程施工组织设计(框架结构) 三、设计依据: 施工技术与组织课程中涉及的主要施工技术和组织原理如下: 1、《混凝土结构施工及验收规范》GB50204-2002(2011年版) 2、《混凝土质量控制标准》GB50164-2011 3、《混凝土强度检验评定标准》GB/T50107-2010 4、《砌体结构工程施工质量验收规范》GB50203-2011 5、《屋面工程技术规范》GB50345-2012 6、《建筑工程施工质量验收统一标准》GB50300-2013 7、《建筑施工手册》(第5版) 2012年 8、初步确定的基础持力层置于第二层粘土层,其承载力标准值为380Kpa。 9、现行国家有关施工验收规范。 四、设计条件: 1、工程概况 建筑概况:某四层学生公寓,底层为商业用房,上部为学生公寓,建筑面积3277.96m2,基础为钢筋混凝土独立基础,主体工程为全现浇框架结构,胶合板门,铝合金窗,外墙贴面砖,内墙为中级抹灰,普通涂料刷白,底层顶棚吊顶,楼地面贴地板砖,屋面用200mm厚的加气混凝土块做保温层,上做SBS改性沥青防水层,其劳动量见附表: 2、施工条件: 本工程位于该市东郊山坡地段,两面均有公路,交通便利,西面及北面为已建工程:厂内旧房、坟墓已由建设单位拆除,平整场地已在准备工作阶段完成,场地平整均按平均施工高度为-0.5米。 (1)开竣工时间:由当年9月1日开工至次年2月1日竣工,施工时间145天左右控制。 (2)气象条件:施工期间最低气温4°C,最高气温30°C,施工开始气温较高,以后逐月降低,春节以后有回升,施工期间很少有雨,主导风向为东偏南。 (3)土壤及地下水:土为二类土,地下水位-3.0米 (4)抗震要求:7度抗震烈度设防 (5)技术经济条件:各类钢窗、饰面材料等均有相关专业厂家生产,分批成套

汇编语言程序设计

汇编语言程序设计 实验报告 实验名称上机过程及顺序结构与分支结构程序设计实验班级 学号 姓名 日期2017年10月26号 成绩 评阅人 软件学院

一、实验目的与意义 理解并熟练掌握汇编语言程序设计过程中的编辑、汇编、链接和调试等各个步骤,提高对汇编课程内容的理解和汇编语言的掌握,通过上机练习加深对课程内容的理解和掌握。通过汇编语言编制的程序上机调试、运行检验程序设计是否正确。熟悉和掌握编辑、汇编、连接和调试四个实用程序的使用方法,掌握调试程序中的几个常用命令的使用方法。熟悉其基本的指令操作,debug调试操作命令以及分支结构、顺序结构和循环结构的程序设计。 二、实验环境 操作系统:Microsoft Windows8 集成环境:Masm for Windows 上机地点:信息楼B405教室 三、实验的预习内容 预习的主要内容: 1. 使用DEBUG命令的方法; 2. 熟悉掌握从理论上定义数据的类型(即DB,DW,DD,); 3. 分支结构和顺序结构的步骤以及相关的指令; 4. 常用的标志位状态及相应的作用; 实验思路: 在对题目进行分析后,分析出解题方法,并做出与实验思路相对应的程序框图。依照程序框图的内容输入相对应的代码,最终在调试代码后,发现并解决一系列的汇编语言错误。进一步优化算法。实验之前必须了解十进制、十六进制和ASCII码之间的转换。预习查表法相关命令,掌握顺序程序的结构,从键盘输入数据的命令及显示到屏幕上的命令。 实验一: 题目1:将程序编辑、汇编、连接并通过集成环境中的debug调试,观察运行结果;用E命令修改指定地址的数据,再用G命令执行程序查看变化,用A 命令将加法指令修改成减法指令,再将其编译运行,查看寄存器值变化的异同。 题目2:分别用DB、DW和DD数据段9H,0FAH,41H,27H,编译链接之后生成exe文件,再用debug的r命令找到数据段地址,用d命令指定数据段地址,观察汇编后在机器内部对应的存储情况。 实验二: 先设置数据段地址和堆栈段地址;设置堆栈段指针;读取一个字符然后存储在AL中;用BX来存储AL中字符对应的数值;将BX中的值作为偏移地址;并在数据段中查找对应字符串;最终输出结果结束程序。 实验三: 先初始化数据段地址与堆栈段地址;设置堆栈段指针;然后将数据段中的data1放入AL中;读取数据段中的data2并判断data2是否大于0;然后读取数

汇编语言程序设计(钱晓捷)课后答案

汇编语言程序设计(第二版) 钱晓捷习题答案 第二章(01) 2.1 (1)AX=1200h (2)AX=0100h (3)AX=4C2Ah (4)AX=3412h (5)AX=4C2Ah (6)AX=7856h (7)AX=65B7h 2.2(1) 两操作数类型不匹配 (2) IP指令指针禁止用户访问 (3) 立即数不允许传给段寄存器 (4) 段寄存器之间不允许传送 (5) 两操作数类型不匹配 (6) 目的操作数应为[ BP ] (7) 源操作数应为[BX+DI] (8) 立即数不能作目的操作数 2.3 lea bx,table ;获取table的首地址,BX=200H mov al,8 ;传送欲转换的数字,AL=8 xlat ;转换为格雷码,AL=12H 2.4 堆栈是一种按“先进后出”原则存取数据的存储区域。 堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。 2.5 mov ax,8057h push ax mov ax,0f79h push ax pop bx ;bx=0f79h pop [bx] ;DS:[0f79h]=8057h 2.6 AL=89h CF ZF SF OF PF AL=12h 1 0 0 1 1 AL=0afh 0 0 1 0 1 AL=0afh 1 0 1 0 1 AL=00h 0 1 0 0 1 AL=0ffh 0 0 1 0 1 AL=00h 0 1 0 0 1 2.7 W=X+Y+24-Z

2.8 (1)ADD DX,BX (2)ADD AL,[BX+SI] (3)ADD [BX+0B2H],CX (4)ADD WORD PTR [0520H],3412H (5)ADD AL,0A0H 2.9;为了避免与操作数地址混淆,将题中X,Y,Z,V 字操作数改为A,B,C,D mov ax,X ;ax=A imul Y ;dx,ax = A*B (将操作数看作符号数,以下同) mov cx,ax mov bx,dx ;bx,ax <-- dx,ax =A*B mov ax,Z ;ax = C cwd ;dx,ax =C (扩展符号后为双字) add cx,ax adc bx,dx ;bx,cx <-- bx,cx+dx,ax=A*B+C sub cx,540 sbb bx,0 ;bx,cx<-- A*B+C-540 mov ax, V ;ax= D cwd ;dx,ax= D (扩展符号后为双字) sub ax, cx sbb dx, bx ;dx,ax = dx,ax - bx,cx = D-(A*B+C-540) idiv X ;运算结果:[D-(A*B+C-540h)]/A ;ax存商,dx存余数 2.10;(1)xchg的操作数不能是立即数 (2不能对CS直接赋值 (3)两个操作数不能都是存储单元 (4)堆栈的操作数不能是字节量 (5)adc的操作数不能是段寄存器 (6)没有确定是字节还是字操作 (7)in不支持超过FFH的直接寻址 (8)out只能以AL/AX为源操作数 第二章(02) 2.11; 指令AX的值CF OF SF ZF PF Mov ax,1407h1470h----- And ax,ax1470h00000 Or ax,ax1470h00000 Xor ax,ax000011 Not ax0ffffh----- Test ax,0f0f0h0ffffh00101 注意: 1. mov, not指令不影响标志位 2. 其他逻辑指令使CF=OF=0, 根据结果影响其他标志位。

轨道工程课程设计任务书、指导书及设计要求

轨道工程课程设计任务书 一、出发资料 1.机车车辆条件:韶山Ⅲ(SS3)型电力机车;机车轴列式30-30,轴距布置为230+200+780+200+230 (cm),轮重。 2.线路条件: (1)线路设计速度80km/h,最小曲线半径500m(实设超高为100mm),规划采用有砟轨道结构。 (2)线路铺设成无缝线路,铺设地区为福州,铺设线路长度为10km。 (3)道床顶面的容许应力为,路基顶面的容许应力为。 二、设计任务 (1)进行有砟轨道结构设计,包括钢轨和扣件的选型,轨枕的类型及布置根数,道床的等级及尺寸,并检算强度是否满足使用要求。 (2)进行无缝线路设计,包括设计锁定轨温确定、缓冲区设计、预留轨缝确定、轨条布置。 三、提交的成果 (一)、设计计算说明书 (1)轨道结构选型。 (2)轨道结构强度检算。 (3)无缝线路设计计算。 (二)、设计图图纸 (1)轨道结构组装图及选型说明。(1张A3)

(2)轨道结构受力图(3张A4:钢轨弯矩和挠度1张,轨枕三个支承状态的弯矩分布,道床顶面、路基顶面、路基第二区域、路基第三区域应力)。 (3)无缝线路设计图(1张A4或A3,基本温度力图、轨条布置图及相关说明)。 设计指导书

一、课程设计的基本步骤: 课程设计的步骤如图1所示: 图1 课程设计步骤 二、设计方法 (一)、轨道结构选型设计 根据机车车辆和线路条件,确定钢轨、轨枕、扣件的类型及刚度、道床的等级及主要尺寸(厚度、顶宽和边坡坡度)。钢轨、轨枕及扣件的可选用类型从教材中选择,道床的等级及主要尺寸也参考教材的内容确定。 以下两点说明: 1、道床厚度的选择 道床厚度设计根据《铁路轨道设计规范》(TB10082-2005)和《地铁设计规范》(GB50157-2003)进行,为方便可根据运营条件从教材表1-1中选择。我们的轨道类型可参考中型轨道结构。 2、钢轨支座刚度D 钢轨支座刚度D的意义是使钢轨支点顶面产生单位下沉时所必须施加于支点顶面上的力,单位一般采用kN/mm表示。 D值的计算:1/D=1/D1+1/D2 教材(7-3) 式中D1为扣件刚度,其值由设计确定;D2为道床支承刚度,计算

C语言程序设计实验指导书

C 语言程序设计 实 验 指 导 书 电子工程学院 2012-2

实验一 C程序的运行环境和编辑、调试、运行简单C程序 一、实验目的 1.了解 Turbo C 的基本操作方法,学会独立使用该系统。 2.掌握在该系统上如何编辑、编译、运行一个C程序。 二、实验内容及步骤 1.进入C的工作环境 1)在Windouws环境下:“开始”→“程序”→“MS-DOS” 屏幕上进入 MS-DOS窗口 2)在Dos环境下:键入命令c:\> cd c:\tc↙ c:\tc> tc↙ 屏幕上出现Turbo C的工作环境 2.熟悉Turbo C的工作环境 了解Edit窗口与Message窗口 了解主菜单的8个菜单项 File Edit Compile Project Option Debug break/watch 3.输入并运行一个简单的程序 File→New 输入源程序:

main() { printf("This is a C program.\n"); printf("OK\n"); } 按F9进行编译和连接,观察屏幕上显示的编译信息。如果出现出错信息,则应找出原因并改正。 按Run→Run(或按Ctrl+F9) 编译、连接、运行一起完成。 按Run→User screen(或按Alt+F5) 察看运行结果。 按任一键从用户屏切换回TC窗口。 4.输入并编辑第二个C程序 File→New 输入源程序: main ( ) { int a,b,sum; a=123; b=456; sum=a+b; printf("sum is %d\n", sum); }

编辑、运行、调试该程序。 5.编辑、运行、调试自己编写的程序(至少一个程序) 如:输入上底、下底和高,计算梯形面积。 观察屏幕上显示的编译信息。如果出现出错信息,则应找出原因并改正。 用File→Save (或F2)保存程序(程序名为a1.c) 三、实验报告要求 写明: 1.实验目的 2.实验内容与步骤 3.编写的程序(题目,经调试、运行后正确的程序) 4.编译过程中出现的错误信息。 5.总结讨论本次实验的结果和收获。

新版汇编语言程序设计钱晓捷第1章习题答案

第1章汇编语言基础知识(全) 2010-10-18 19:32:40| 分类:答案集锦| 标签:|字号大中小订阅 第1章汇编语言基础知识 〔习题1.1〕简述计算机系统的硬件组成及各部分作用。 〔解答〕 CPU:包括运算器、控制器和寄存器组。运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为 处理单元提供所需要的数据。 存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。 外部设备:实现人机交换和机间的通信。 〔习题1.2〕明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 〔解答〕 主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速 度慢。 RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电 后能保存信息。 存储器由大量存储单元组成。为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常 称做I/O端口。 KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。 〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序? 〔解答〕 用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编 译通过的程序就是目标程序。

汇编语言程序设计教程(第3版 卜艳萍)参考答案

汇编语言程序设计教程(第3版) 习题参考答案 第1章汇编语言基础知识 思考与练习 1.计算机系统分哪几个层次?简述计算机系统的硬件结构。 1)数字逻辑层 2) 微体系结构层 3) 指令系统层 4) 操作系统层 5) 汇编语言层 6) 高级语言层 7) 应用层 硬件系统是指构成计算机系统的物理实体或物理装置。它由控制器、运算器、存储器、输入设备和输出设备等部件构成。 2.简述用汇编语言进行程序设计的必要性。 1)程序要具有较快的执行时间,或者只能占用较小的存储容量。例如,操作系统的核 心程序段,实时控制系统的软件,智能仪器仪表的控制程序等。 2)程序与计算机硬件密切相关,程序要直接、有效地控制硬件。例如,I/O接口电路 的初始化程序段,外部设备的低层驱动程序等。 3)大型软件需要提高性能、优化处理的部分。例如计算机系统频繁调用的子程序、动 态连接库等。 4)没有合适的高级语言或只能采用汇编语言的时候。例如,开发最新的处理器程序时, 暂时没有支持新指令的编译程序。 5)汇编语言还有许多实际应用,例如分析具体系统尤其是该系统的低层软件、加密解 密软件、分析和防治计算机病毒等。 3.汉字编码主要分哪几类?每类的功能如何? 汉字编码主要分为四类:汉字输入码、汉字交换码、汉字机内码和汉字字形码。 1)为了能直接使用西文标准键盘进行输入,就必须为汉字设计相应的编码方法,即用 西文标准键盘上的字母数字串表示汉字的编码。目前,汉字输入编码方法主要有三 种:数字编码、拼音编码和字形编码。 2)汉字交换码:在不同汉字信息处理系统间进行汉字交换时所使用的编码,就是国标 码。无论采用哪种方法输入汉字,一旦输入到计算机中,必须采用统一的国标码标 识每个汉字。 3)汉字机内码是汉字在设备或信息处理系统内部最基本的表达形式,是在设备和信息 处理系统内部存储、处理、传输汉字用的编码。 4)字形编码也称为字模码,是用点阵表示的汉字字形代码,它是汉字的输出形式。4.计算机的字长是怎么定义的,试举例说明。 计算机能同时处理二进制信息的位宽定义为计算机的字长。如8086能同时进行16位二进制数据的运算、存储和传输等操作,该机器的字长为16位。 5.在汇编语言中,如何表示二进制、八进制、十进制和十六进制的数值? 用相应进制的数值加上进制标记即可。

《java程序设计》实验指导书(完整)

实验一 Java实验环境的建立一、实验目的 1.掌握Java编程环境的搭建过程; 2.掌握Jcreator pro软件的使用方法; 3.能使用Java doc文档。 二、实验内容 1.下载并安装,配置JDK环境变量; 2.下载Javadoc压缩包并解压在JDK安装路径下; 3.下载Jcreator pro 并安装和配置使用环境; 4.使用实验环境运行书中实例代码,在屏幕上输出“Hello Java”字符串。 ①Java application程序代码如下: public class HelloJava { public static void main(String args[]) { "Hello Java!"); } } ②Java applet程序代码如下: import .*; public class Hello extends { public void paint(Graphics g) { ("Hello!",30,30); } } 三、试验要求 1、预习试验内容并写出上机报告。 2、实验中出现的问题及实验体会。

一、实验目的: 1.输入、输出操作实现原理和方法 2.掌握程序流程控制的实现方法 3.掌握数组的定义和操作方法 二、实验内容 1.计算 Result=1!+2!+3!+ (10) public class TestJieC{ p ublic static void main(String arg[]){ long result=1; for(int i=1;i<=10;i++) { result=i*result; result+=result; } " "+result); } } 2.计算1---50之间所有素数的和。 public class Test{ p ublic static void main(String args[]){ int count = 0; for(int i = 2;i<=50;i++){ for(int j = 2;j<=i;j++){ if(i>j){ if(i%j == 0){ count++; } } } if(count==0){

相关主题