资源描述:
《汇编语言程序设计教学资料-项目七案例》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、教学案例任务描述:企业要求员工编程实现以下功能:课后习题2建立的文件按下面的要求编写程序:(1)把所有的记录读入内存的数据缓冲区TABLE;(2)显示字符串提示用户输入零(配)件号及其数量;(3)按零件搜索TABLE;(4)如果发现所要求的零件,用它的单价计算出总价(单价×数量);(5)显示零(配)件说明及总价值。参考源程序:TITLEREAD11.EXE;利用文件代号式读并计算显示程序;Readdiskrecordscreatedbyhancreat;-------------------------------------------------------------.modelsmal
2、l.stack100h.dataendcdedb0;结束处理指示pathnamedb'filename.lst',0in_mes1db'请输入3位数的零件号Part#:','$'in_mes2db'请输入该零件的数量:','$'out_mes1db'输入的不是数字!请重新输入数字:’,'$'out_mes2db'输入的零件号不存在!请重新输入3位数的零件号Part#:','$'in_bufferdb6,?,6dup(20h);输入缓冲区messagedb'Part#DescriptionSum_Price',0dh,0ah,'$'tacklinedb'
3、$'sum_pricedw0,0deci
4、maldb10DUP(0),‘$’crlfdb0dh,0ah,'$'handledw?tabledb19*100DUP('');table,足够大errcdedb0;错误处理指示opnmsgdb'***openerror***',0dh,0ahreadmsgdb'***readerror***',0dh,0ah;-------------------------------------------------------------.codebeginprocfarmovax,@datamovds,axmoves,axmovax,0600hcallscreen;清屏callcurs;设置光标c
5、allopenh;打开文件,设置TABLEcmpendcde,0;打开错误吗?jnza0;错误,转结束callreadh;读磁盘记录cmpendcde,0;读错误吗?jnza0;错误,转结束callin_Part;没错,输入零件号和零件数量a0:movax,4c00h;退出程序,返回DOSint21hbeginendp;-------------------------------------------------------------;打开文件openhprocnearmovah,3dhmoval,0leadx,pathnameint21hjcbbb;打开错误吗?movhandle,ax
6、;没有错,保存文件代号retbbb:movendcde,01;打开错误,指示结束处理leadx,opnmsgcallerrm;显示出错信息retopenhendp;-------------------------------------------------------------;读磁盘记录readhprocnearmovah,3fhmovbx,handlemovcx,19*100;准备读入的字节数leadx,tableint21hjcc1;读错误吗?cmpax,0;文件已读完吗?jec2;读完,退出cmptable,1ah;文件结束符吗?Jec2movbp,ax;读成功则在AX中返回实
7、际读入的字节数存入bpretc1:leadx,readmsg;读错误callerrm;显示出错信息c2:movendcde,01;读错误或文件读完,指示结束处理retreadhendp;-------------------------------------------------------------;输入零件号和零件数量in_Partprocnearleadx,in_mes1;显示提示信息,提示输入零件号in_Part1:callinput;输入数据cmpin_buffer+1,3;输入的零件号个数是3位吗?leadx,out_mes2;显示提示信息,提示重新输入零件号jnein_Pa
8、rt1cldmovax,bp;取实际读入文件的字节数movcl,19;每个记录的长度为19个字符divcl;计算实际读取的记录数在al中movbl,almovbh,0;从第0个记录开始顺序查找in_Part2:leasi,in_buffer+2;查找零件号对应的零件leadi,tablemoval,19mulbhadddi,ax;计算某个记录的首地址movwordptrdecimal,di;保存首