实验四10505038吴逸飞.docx
《实验四10505038吴逸飞.docx》由会员分享,可在线阅读,更多相关《实验四10505038吴逸飞.docx(16页珍藏版)》请在冰豆网上搜索。
实验四实验四10505038吴逸飞吴逸飞实验报告四课程微机原理实验名称循环和分支程序设计第页专业电子信息班级_9_学号_:
105052012038_姓名:
吴逸飞实验日期:
2014年3月29日报告退发(订正、重做)一、实验目的1.进一步熟悉上机操作.2进一步熟悉DEBUG调试程序.3.学习循环和分支程序设计二、实验内容.编制程序实现将一位十六进制数转化为对应ASCII码;assumecs:
code,ds:
datadatasegmentddbInputanumberofhex,10,13,$fdb4,?
dataendscodesegmentstart:
movax,datamovds,axmovdx,offsetdmovah,9int21h;输出提示movah,01hint21h;输入字符pushaxmovdl,0ahmovah,02hint21hmovdl,0dhmovah,02hint21hpopax;换行回车movah,00cmpax,60hjahacmpax,40hjahbpushaxmovdl,33hmovah,02hint21hpopaxmovdl,almovah,02hint21hjmphc;输出09的ASCII码ha:
pushaxmovdl,36hmovah,02hint21hpopaxsubal,30hmovdl,almovah,02hint21hjmphc;输出AF的ASCII码hb:
pushaxmovdl,34hmovah,02hint21hpopaxsubal,10hmovdl,almovah,02hint21hjmphc;输出af的ASCII码hc:
movah,4chint21hcodeendsendstart2.分类统计字数组中正数、负数和零的个数;ASSUMECS:
CODE,DS:
DATA;只适合-128127的数值符号判断DATASEGMENTADB0BDB0CDB0DDB1,0,-1,0,-1,0,-7,0FDBEQUALPOSITIVE-NUMBERNEGATIVE-NUMBER$DATAENDSCODESEGMENTSTART:
MOVAX,#DATAMOVDS,AXMOVSI,00HMOVCX,08HS:
CMPDSI,00HJZLA;等于零跳转CMPDSI,80HJALC;小于零跳转INCBJMPLHLA:
INCAJMPLHLC:
INCCJMPLHLH:
NOPINCSILOOPSMOVDX,OFFSETFMOVAH,09HINT21HMOVDL,AADDDL,30HMOVAH,02HINT21HMOVDL,00HMOVAH,02HINT21HMOVDL,BADDDL,30HMOVAH,02HINT21HMOVDL,00HMOVAH,02HINT21HMOVDL,CADDDL,30HMOVAH,02HINT21HMOVAH,4CHINT21HCODEENDSENDSTART.编写码制转换程序。
(1)ASCII码到十进制数(BCD)的转换若有一输入的ASCII码串(长度在串中的第一个字节),将其中的数码取出,转换为未组合的BCD码,放至另一缓冲区中,并统计数码串的长度,放入此缓冲区的第一个字节。
ASSUMECS:
CODE,DS:
DATADATASEGMENTADBInputasentenceconsistingof9words$FDBThenumberofnum:
$CDW0,0,0,0,0,0,0,0,0,0BDB22,?
DATAENDSCODESEGMENTSTART:
MOVAX,#DATAMOVDS,AXMOVDX,OFFSETAMOVAH,09HINT21HMOVDL,0AHMOVAH,02HINT21HMOVDL,0DHMOVAH,02HINT21H;换行回车MOVDX,OFFSETBMOVAH,0AHINT21H;输入10个字符MOVDL,0AHMOVAH,02HINT21HMOVDL,0DHMOVAH,02HINT21H;换行回车MOVCX,9MOVSI,02HMOVDI,02HMOVDL,00HHA:
CMPBSI,30HJAHBJMPHDHB:
CMPBSI,39HJLEHCJMPHDHC:
CALLPROCEHD:
INCSILOOPHAPUSHDXMOVDX,OFFSETFMOVAH,09HINT21HPOPDXADDDL,30HMOVAH,02HINT21H;9个字符中数字的个数MOVAH,4CHINT21HPROCE:
MOVAL,BSISUBAL,30HMOVAH,03HMOVCDI,AXINCDIINCDIINCCINCDLRETCODEENDSENDSTART
(2)将BCD码转换为二进制若有一个位存储单元,存放位BCD数,将它转换为二进制,放至另一存储单元。
BCD转换为二进制数,常用的有两种方法。
方法1:
(千位数*10+百位数)*10+十位数)*10+个位数ASSUMECS:
CODE,DS:
DATADATASEGMENTADW4321HCDW0DATAENDSCODESEGMENTSTART:
MOVAX,#DATAMOVDS,AXMOVBX,AANDBX,0F000HMOVAX,BXMOVBX,1000HDIVBXMOVBX,0AHMULBXPUSHAXMOVBX,AANDBX,0F00HMOVAX,BXMOVBX,100HDIVBXMOVCX,AXPOPAXADDAX,CXMOVBX,0AHMULBXPUSHAXMOVBX,AANDBX,00F0HMOVAX,BXMOVBX,10HDIVBXMOVCX,AXPOPAXADDAX,CXMOVBX,0AHMULBXPUSHAXMOVBX,AANDBX,000FHMOVCX,BXPOPAXADDAX,CXMOVC,AXMOVAH,4CHINT21HCODEENDSENDSTART方法2:
用千位数控制加1000的次数,用百位数、十位数控制加100,加10的次数,最后与个数相加。
分别用这两种方法编写程序。
ASSUMECS:
CODE,DS:
DATADATASEGMENTADW4321HBDW0DATAENDSCODESEGMENTSTART:
MOVAX,#DATAMOVDS,AXMOVBX,AANDBX,000FHMOVCX,BXMOVAX,00HCLCLA:
ADCAX,01LOOPLAPUSHAX;个位相加MOVBX,AANDBX,00F0HMOVAX,BXMOVBX,10HDIVBXMOVCX,AXMOVAX,0CLCLB:
ADCAX,0AHLOOPLBPUSHAX;十位相加MOVBX,AANDBX,0F00HMOVAX,BXMOVBX,100HDIVBXMOVCX,AXMOVAX,0CLCLC:
ADCAX,64HLOOPLCPUSHAX;百位相加MOVBX,AANDBX,0F000HMOVAX,BXMOVBX,1000HDIVBXMOVCX,AXMOVAX,0CLCLD:
ADCAX,3E8HLOOPLD;千位相加CLCMOVCX,03HHA:
POPBXADDAX,BXLOOPHAMOVB,AXMOVAH,4CHINT21HCODEENDSENDSTART4.用冒泡排序法实现数组按从大到小排序。
ASSUMECS:
CODE,DS:
DATADATASEGMENTADB1,2,3,4,5,6,7,8DATAENDSCODESEGMENTSTART:
MOVAX,#DATAMOVDS,AXMOVDI,00HMOVCX,08HS:
MOVAL,ADIPUSHCXMOVSI,DIINCSIHB:
CMPAL,ASIJAHSMOVBL,ASIMOVASI,ALMOVAL,BLMOVADI,ALHS:
INCSILOOPHBPOPCXINCDILOOPSMOVAH,4CHINT21HCODEENDSENDSTART四、小结