混合编程课程设计-c++跟汇编.doc

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
混合编程课程设计-c跟汇编

实验目的与要求 输入多个有序数据,编程实现,在有序表中插入数据元素(插入后依然为有序表),并输出该有序表的数据元素。要求使用C++和汇编语言混合编程,数据的输入和结果的输出使用图形界面,用C++实现,在有序表中插入数据元素用汇编语言实现。 实验方案 覆写以改变回车键和ESC键退出程序 void CweijiDlg::OnOK() { // TODO: 在此添加专用代码和/或调用基类 //CDialogEx::OnOK();//注释掉就可以了 } BOOL CweijiDlg::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 if (pMsg-message == WM_KEYDOWN pMsg-wParam == VK_ESCAPE) return TRUE; return CDialogEx::PreTranslateMessage(pMsg); } 插入按钮 void CweijiDlg::OnInsert() { // TODO: 在此添加控件通知处理程序代码 UpdateData(true); rtable = ; int i =0,count=0; CString r; int intarr[40]; int in = _ttoi(input); char *tablecp = (char *)(LPCTSTR)table; vectorCString vStr = Split(table); for (CString ele : vStr) { const wchar_t *temp = (wchar_t *)(LPCTSTR)ele; intarr[i] = _ttoi(temp); count++; i++; } int mark = 0; __asm { mov ecx, count mov ebx, 0 check : mov eax, intarr[ebx * 4] mov edx, in cmp eax, edx jz exist; 如果相等则跳到exist执行 mov mark, 0 jg insert; 如果表中元素大于插入元素,则直接插入到表中元素的位置 add ebx, 1 loop check mov ecx, 1; 如果遍历完后,就说明插入数比有序表中的数都大 mov ebx, count;那么应该直接在末尾输入 jmp insert1 insert : add ecx, 1 insert1 : mov edi, intarr[ebx * 4] mov intarr[ebx * 4], edx mov edx, edi add ebx, 1 loop insert1 add count, 1 jmp done exist : mov mark, 1 jmp done done : nop } if (mark) { MessageBox(_T(输入的数字已存在!)); } else { CString rt; for (i = 0; i count; i++) { if (icount-1) rt.Format(_T(%d,), intarr[i]); else rt.Format(_T(%d), intarr[i]); rtable += rt; } } UpdateData(false); } 用逗号分割字符串的函数 vectorCString CweijiDlg::Split(CString string) { CString oriStr = string; vectorCString strVec; const char *P = ,; while (true) { CString n = oriStr.SpanExcluding((LPCTSTR)P); strVec.push_back(n); oriStr = oriStr.Right(oriStr.GetLength() - n.GetLength() - 1); if (oriStr.IsEmpty()) { break; } } return strVec; } 调试结果和数据处理 插入整数: 插入负数: 插入已存在的数字: 结论 使用汇编和C++的混编实现了有序表的MFC图形界面,通过利用CString字符串类型输入和呈现数据。数据使用CString可以实现一整串数据的输入,且可以实现负数和正数同时输入。再插入一个数时,这个数要插入有序表位置的数先被保存在一个临时变量中,这个数插入到有序表中,保存到临时变量原先有序表的数通过遍历完整个有序表就实现了新的数插入有序表。 问题与改进 在将字符串分

文档评论(0)

shuwkb + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档