微机作业.docx
- 文档编号:5193018
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:13
- 大小:248.45KB
微机作业.docx
《微机作业.docx》由会员分享,可在线阅读,更多相关《微机作业.docx(13页珍藏版)》请在冰豆网上搜索。
微机作业
《微型计算机原理及应用》作业
作业组别:
第十三组
姓名:
邸伟峰
班级:
12级机控一班
学号:
120101010077
项目指导教师:
(任课教师、实验室教师):
李艳文、王志松、赵玉勤、张庆玲
项目完成时间:
2015年5月
1、第13.1题2
1.1题目分析3
1.2寄存器及主存的应用说明3
1.3程序框图4
1.4程序代码5
1.5程序结果为6
2、第13.2题7
2.1题目分析7
2.2寄存器及主存的应用说明8
2.3程序框图9
2.4程序代码9
2.5程序结果为11
3、第13.3题11
3.1题目分析12
3.2寄存器及主存的应用说明12
3.3程序框图14
3.4程序代码14
3.5程序结果17
1、第13.1题
请将内存中SOURCE处的10个字型有符号数分成正数数组PLUS和负数数组MINUS,并统计这两个数组的数据个数,结果分别存放到字节变量PNUM(存正数个数)和MNUM(存负数个数)中。
1.1题目分析
本题应该先给三变量数组赋予地址,设循环变量CX=10,然后依次判断SOURCE处的字型有符号数的正负,若为正则存放到PNUM,字节变量PNUM+1,DI+2,SI+2;若为负存入MINUS,字节变量MNUM+1,DI+2,SI+2,循环10次。
本题利用LODSW,STOSW,XCHG等语句操作,可以使结构精简,程序代码少。
预期结果:
SOURCE=1E00H,9100H,7400H,9700H,4200H,3000H,8100H,3F00H,1800H,2500H
PLUS=1E00H,7400H,4200H,3000H,3F00H,1800H,2500H,0000H,0000H,0000H
MINUS=9100H,9700H,8100H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
PNUM=07H
MNUM=03H
1.2寄存器及主存的应用说明
依次定义了数据的存储模式,堆栈段,数据段。
数据段中定义要求的数组,计算机为其分配存储空间。
本题中用到了通用寄存器中的数据寄存器BX、AX;变址寄存器SI、DI;段寄存器DS、ES。
BX、SI、DI分别存储MINUS、SOURCE、PLUS数组的偏移地址。
数据段寄存器DS与SI联用寻址数据段中的源操作数,附加段寄存器ES与DI联用寻址附加段中的目的操作数,同时SI和DI能够自动增量或减量。
1.3程序框图
1.4程序代码
.MODELSMALL
.STACK
.DATA
SOURCEDW1E00H,9100H,7400H,9700H,4200H,3000H,8100H,3F00H,1800H,2500H
COUNTEQU($-SOURCE)/2
PLUSDWCOUNTDUP(?
)
MINUSDWCOUNTDUP(?
)
PNUMDB0
MNUMDB0
.CODE
.STARTUP
MOVSI,OFFSETSOURCE;给SI赋予SOURCE的偏移地址
MOVDI,OFFSETPLUS;给DI赋予PLUS的偏移地址
MOVBX,OFFSETMINUS;给BX赋予MINUS的偏移地址
MOVAX,DS;所有数据都在数据段中,故设置ES=DS
MOVES,AX
MOVCX,COUNT;给循环变量CX赋值
CLD
AGAIN:
LODSW;字串读取:
ALDS:
[SI];然后:
SISI+2
CMPAX,0;检测符号位,判断是正是负
JLFUSHU;小于0,是负数,转向FUSHU
JZNEXT;等于0,不处理,跳转到NEXT
STOSW;大于0,是正数,存入PLUS;然后:
DIDI+2
INCPNUM;字节变量PNUM+1
JMPNEXT:
跳转到NEXT
FUSHU:
XCHGBX,DI
STOSW;把负数存入MINUS;然后:
DIDI+2
XCHGBX,DI
INCMNUM;字节变量MNUM+1
NEXT:
LOOPAGAIN
.EXIT
END
1.5程序结果为?
SOURCE=1E00H,9100H,7400H,9700H,4200H,3000H,8100H,3F00H,1800H,2500H
PLUS=1E00H,7400H,4200H,3000H,3F00H,1800H,2500H,0000H,0000H,0000H
MINUS=9100H,9700H,8100H,0000H,0000H,0000H,0000H,0000H,0000H,0000H
PNUM=07H
MNUM=03H
2、第13.2题
对一个由可打印的ASCⅡ组成的字符串(其ASCⅡ码值在20H-7FH之间,最后以00H结束),可按照如下办法对其进行压缩:
从字符串首开始向后扫描,若某字符串单独出现则该字符不变;若某字符连续出现N次,则该字符用ESC(1BH),N,原字符共3个字节来代替,设内存中SOURC处有一个按上述方法进行压缩的字符串,以00H结束。
现要求对其进行解压缩,假定解压后的字符串长度不超过100.处理结果存放到RESULT处。
2.1题目分析
本题应先判断给出的字符里是否有1BH,若有则得N值,进而得到连续字符,若无直接送到目标地址,继续搜寻,直到扫描到00H为止,并将最终结果存储在规定的内存单元中。
本题的注意事项是扫描到1BH之后,如何获得连续字符。
预期结果:
SOURCE=41H,1BH,06H,43H,61H,00H
RESULT=41H,43H,43H,43H,43H,43H,43H,61H,00H
2.2寄存器及主存的应用说明
依次定义了数据的存储模式,堆栈段,数据段。
数据段中定义要求的数组,计算机为其分配存储空间。
本题中用到了通用寄存器中的数据寄存器BX、AX;变址寄存器SI。
BX、SI分别存储SOURCE、RESULT数组的偏移地址。
AX寄存器常用于算术运算、逻辑运算以及外设传送信息等。
2.3程序框图
2.4程序代码
.MODELSMALL
.STACK
.DATA
SOURCEDB41H,1BH,06H,43H,61H,00H
RESULTDB100DUP(?
)
.CODE
.STARTUP
MOVBX,OFFSETSOURCE;给BX赋予SOURCE的偏移地址
MOVSI,OFFSETRESULT;给SI赋予RESULT的偏移地址
AGAIN:
MOVAL,[BX]:
将SOURCE的值传递给AL
CMPAL,1BH;检测字符1BH
JEWEI;若有字符1BH,则跳转到WEI
MOV[SI],AL;若无字符1BH,则将AL内容送到RESULT
CMPAL,0
JEOVER;若有字符00H,则结束循环
INCBX;BX+1
INCSI;SI+1
JMPAGAIN
WEI:
INCBX;BX+1
MOVCH,0
MOVCL,[BX];取CX=N
INCBX
FENG:
MOVAL,[BX]
MOV[SI],AL;将BX里的值赋给RESULT
INCSI;SI+1
LOOPFENG;循环N次
INCBX;BX+1
JMPAGAIN;跳转到AGAIN
OVER
.EXIT
END
2.5程序结果为
SOURCE=41H,1BH,06H,43H,61H,00H
RESULT=41H,43H,43H,43H,43H,43H,43H,61H,00H
3、第13.3题
内存中NUMA和NUMB处各存放着10个字节型有符号数,分别为Ak和Bk(k=0,1,…,9)。
从键盘输入一个字符,若输入的字符为‘+’,则计算Ck=∣Ak∣+∣Bk∣,结果保存到字型变量NUMC处,程序结束;若输入的字符为‘*’,则计算Ck=∣Ak∣*∣Bk∣,结果保存到字型变量NUMC处,程序结束;若输入的是其他字符,则在下一行显示‘ERROR’,程序结束。
3.1题目分析
本题应先判断输入的字符是否为*或+,并进行对应的操作,若为*或/+,为两个字型有符号数的绝对值(正数取本身,负数则取反加1变为绝对值)相乘或相加,即用到乘法指令mulr16/m16或adddest,src,并将结果存储在规定的内存单元中。
本题的注意事项在于其乘数为字型有符号数,题目要求取反,乘积为双字,需要控制其结果存储的位置,以达到规定要求。
预期结果:
NUMC=0080H,0090H,0078H,004DH,004CH,00A2H,00DEH,0087H,002FH,00D0H;’+’
NUMC=0700H,086FH,072CH,044EH,0000H,16FDH,2FA8H,0C4EH,0138H,295FH;’*’
3.2寄存器及主存的应用说明
依次定义了数据的存储模式,堆栈段,数据段。
数据段中定义要求的数组,计算机为其分配存储空间。
本题中用到了通用寄存器中的数据寄存器BX、AX、CX;变址寄存器SI、DI。
BX、SI、DI分别存储NUMA、NUMB、NUMC数组的偏移地址。
变址寄存器SI和DI,常用于存储器变址寻址方式时提供地址。
CX为计数寄存器,常用于计数控制循环程序中。
3.3程序框图
3.4程序代码
.MODELSMALL
.STACK
.DATA
NUMADB10H,11H,12H,13H,00H,95H,86H,97H,08H,89H
COUNTEQU$-NUMA
NUMBDB90H,81H,66H,3AH,4CH,37H,64H,1EH,27H,59H
NUMCDWCOUNTDUP(?
)
ERRORDB0DH,0AH,'ERROR!
$'
.CODE
.STARTUP
MOVSI,OFFSETNUMA;给SI赋予NUMA的偏移地址
MOVDI,OFFSETNUMB;给DI赋予NUMB的偏移地址
MOVBX,OFFSETNUMC;给BX赋予NUMC的偏移地址
MOVCX,COUNT;循环次数CX=10
MOVAH,01H
INT21H;输入一个字符
CMPAL,'+';比较AL与+
JZWEI;相等,跳转到WEI
CMPAL,’*’;比较AL与*
JZFENG;相等,跳转到FENG
MOVAH,09H
MOVDX,OFFSETERROR;显示ERROR
JMPDONE;跳转到DONE
WEI:
CMPBYTEPTR[SI],0;比较SI中字节型数据与0的大小
JLF1;小于0跳转到F1
CMPBYTEPTR[DI],0;比较DI中字节型数据与0的大小
JLF2;小于0跳转到F2
MOVAL,[SI];将SI中的偏移地址移动到AL中
ADDAL,[DI];将DI中的偏移地址与AL中的偏
移地址相加并移动到AL中去
MOVAH,0;AH置0
MOV[BX],AX;将AX移动到BX中去并存为BX的偏移地址
INCSI;SI加1
INCDI;DI加1
ADDBX,2;将2与BX相加并移动到BX中去
LOOPWEI;循环WEI
JMPDONE;跳转到DONE
F1:
NEGBYTEPTR[SI];将SI偏移地址中的字节型数据求反
JMPWEI;跳转到WEI
F2:
NEGBYTEPTR[DI];将DI偏移地址中的字节型数据求反
JMPWEI;跳转到WEI
FENG:
CMPBYTEPTR[SI],0;比较SI中字节型数据与0的大小
JLF3;小于0跳转到F3
CMPBYTEPTR[DI],0;比较DI中字节型数据与0的大小
JLF4;小于0跳转到F4
MOVAL,[SI];将SI中的偏移地址转移到AL中去
MULBYTEPTR[DI];无符号数字节型数据相乘
MOV[BX],AX;将AX移动到BX中去并存为BX的偏移地址
INCSI;SI加1
INCDI;DI加1
ADDBX,2;将2加到BX中去
LOOPFENG;循环FENG
JMPDONE;跳转到DONE
F3:
NEGBYTEPTR[SI];将SI偏移地址中的字节型数据求反
JMPFENG;跳转到FENG
F4:
NEGBYTEPTR[DI];将DI偏移地址中的字节型数据求反
JMPFENG;跳转到FENG
DONE:
.EXIT
END
3.5程序结果
程序结果为
NUMC=0080H,0090H,0078H,004DH,004CH,00A2H,00DEH,0087H,002FH,00D0H;’+’
NUMC=0700H,086FH,072CH,044EH,0000H,16FDH,2FA8H,0C4EH,0138H,295FH;’*’
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 作业