1、计算机原理习题答案计算机原理习题答案部门: xxx 时间: xxx整理范文,仅供参考,可下载自行编辑第四章 80x86汇编语言程序设计习题与答案1、指出以下数据定义伪指令所分配的字节数8086系统)。1)DATA1 DB 10,?,A2)DATA2 DW 10 DUP2,3 DUP?),1)3)DATA3 DB HELLO,WORLD!,$4)DATA4 DW DATA4解:1)3字节; 2)100字节; 3)13字节; 4)2字节。2、指出以下数据定义伪指令所分配的字节数80386系统)。1)DATA1 DF 12,34,562)DATA2 DF DATA23)DATA3 DQ 0,10 D
2、UP?)4)DATA4 DT 0,1,2解:1)18字节; 3)6字节; 3)88字节; 4)30字节。3、指出以下指令中哪些是无效的,并说明原因。1)ADDR DB $2)DATA DB F0H,12H3)1_DATA DW 1234H4)VAR DW VAR1 ;VAR1为一个字节变量5)MOV AX,10-VAR1 ;VAR1为一个字变量6)MOV BX,VAR2*2+1 ;VAR2为一个字变量解:1)非法,地址计数器$是32位数;2)非法,以字母开头的16进制数应在前面加“0”,即应为“0F0H”;3)非法,变量名非法,不能以数字开头;4)合法;5)非法,地址表达式不能是“常数-地址”
3、;6)非法,地址表达式不能出现乘法。4、假设已定义数据段如下:DATA SEGMENTORG 100HDATA1 DB 10 DUP1,2,3)DATA2 DW DATA1,$DATA ENDS且段寄存器DS已初始化为该数据段的段基址假设段基址为1234H)。请指出以下指令执行后,相应的寄存器中的内容。b5E2RGbCAP=?=?=?=?=?=?=?=?解:=0201H; =0100H; =0120H; =011EH;p1EanqFDPw=1234H; =000AH; =0001H; =0002H。DXDiTa9E3d5、在8086系统下,编写完整程序,实现从键盘上输入8位二进制数,从显示器上
4、显示相应的16进制数,例如从键盘上输入“00010010”,应在显示器上显示“12H”。RTCrpUDGiT解:参考程序:DATASEGMENTMSG1DBInput binary number(ESC to exit:,$MSG2DB0AH,0DH,Input error!,0AH,0DH,$DATAENDSOUTPUTMACROASC ;定义输出一个字符的宏MOVDL, ASCMOVAH, 2INT21HENDMCODESEGMENTASSUMECS:CODE, DS:DATAMAINPROCFARPUSHDSMOVAX, 0PUSHAXMOVAX, DATAMOVDS, AXAGAIN:
5、LEADX, MSG1MOVAH, 9INT21H ;提示输入信息MOVCX, 8 ;输入8位二进制数MOVBL, 0L:MOVAH, 1INT21HSHLBL, 1CMPAL, 1BH ;ESC键退出JZDONECMPAL, 0 ;输入“0”JZNEXTCMPAL, 1 ;输入“1”JNZERROR ;输入其他则出错INCBLNEXT:LOOPLOUTPUT0AHOUTPUT0DHPUSHBXMOVCL, 4SHRBL, CLCALLTRAN ;显示高4位对应的16进制数POPBXANDBL, 0FHCALLTRAN ;显示低4位对应的16进制数OUTPUTHOUTPUT0AHOUTPUT0
6、DHJMPAGAINERROR:LEADX, MSG2MOVAH, 9INT21HJMPAGAINDONE:RETMAINENDPTRANPROCFARCMPBL, 0AHJBBELOWADDBL, 7BELOW:ADDBL, 30HOUTPUTBLRETTRANENDPCODEENDSENDMAIN6、在8086系统下,编写完整程序,实现从键盘上输入两个4位十进制数,从显示器上显示这两个数之和,例如输入“1234”、“5678”,应在显示器上显示“6912”。5PCzVD7HxA解:参考程序:DATASEGMENTMSG1DB Input the first number(ESC to ex
7、it:,$MSG2DB Input the second number(ESC to exit:,$MSG3DB0AH,0DH,Input error!Input again:,$DATAENDSOUTPUTMACROASC ;定义输出一个字符的宏MOVDL, ASCMOVAH, 2INT21HENDMCODESEGMENTASSUMECS:CODE, DS:DATAMAIN:MOVAX, DATAMOVDS, AXAGAIN:LEADX, MSG1MOVAH, 9INT21H ;提示输入第一个数CALLINPUT ;输入过程PUSHBXOUTPUT0AHOUTPUT0DHLEADX, MSG
8、2MOVAH, 9INT21H ;提示输入第二个数CALLINPUT ;输入过程OUTPUT0AHOUTPUT0DHPOPAX ;实现两个4位组合BCD码相加ADDAL, BL ;低8位相加DAA ;校正MOVCL, AL ;保存至CLADCAH, BH ;高8位相加MOVAL, AH ;移至ALDAA ;校正MOVAH, ALMOVAL, CLMOVBX, AX ;最后结果放在BX中JNCNEXTOUTPUT 1 ;如果相加结果大于9999,则显示进位“1”NEXT:PUSHBXMOVCL, 4SHRBH, CLADDBH, 30HOUTPUTBH ;显示千位数POPBXPUSHBXANDB
9、H, 0FHADDBH, 30HOUTPUTBH ;显示百位数POPBXPUSHBXMOVCL, 4SHRBL, CLADDBL, 30HOUTPUTBL ;显示十位数POPBXANDBL, 0FHADDBL, 30HOUTPUTBL ;显示个位数OUTPUT0AHOUTPUT0DHJMPAGAININPUTPROCFAR ;输入一个4位十进制数的过程BEGIN:MOVCX, 4MOVBX, 0L:SHLBX, 1SHLBX, 1SHLBX, 1SHLBX, 1 ;BX的值乘以16MOVAH, 1INT21H ;输入CMPAL, 1BH ;ESC键退出JZDONECMPAL, 0JBERROR
10、 ;非数字,出错CMPAL, 9JAERROR ;非数字,出错SUBAL, 30HXORAH, AHADDBX, AX ;将输入加到BX中LOOPLRETERROR:LEADX, MSG3MOVAH, 9INT21HJMPBEGINDONE:MOVAH, 4CHINT21HINPUTENDPCODEENDSENDMAIN7、在8086系统下,编写完整程序,实现两个32位带符号数相乘。假设被乘数存放在以字变量MUL1开始的连续4个字节中,乘数存放在以字变量MUL2开始的连续4个字节中中,相乘结果存放在以字变量RES开始的连续8个字节中。jLBHrnAILg解:参考程序:DATASEGMENTMU
11、L1DW0FFFFH,0FFFFH ;被乘数MUL2DW5678H,1234H ;乘数RESDW4 DUP(0 ;结果DATAENDSCODESEGMENTASSUMECS:CODE, DS:DATAMAINPROCFARPUSHDSMOVAX, 0PUSHAXMOVAX, DATAMOVDS, AXMOVCX, MUL1MOVBP, MUL1+2MOVSI, MUL2MOVDI, MUL2+2TESTBP, 8000H ;被乘数是否为负数JZNEXT1NOTBP ;为负数,则取反加1NOTCXADDCX, 1ADCBP, 0NEXT1:TESTDI, 8000H ;乘数是否为负数JZNEXT
12、2NOTSI ;为负数,则取反加1NOTDIADDSI, 1ADCDI, 0NEXT2:MOVAX, SI ;相乘过程MULCXMOVRES, AXMOVRES+2, DXMOVAX, SIMULBPADDRES+2, AXADCRES+4, DXMOVAX, DIMULCXADDRES+2, AXADCRES+4, DXMOVAX, DIMULBPADDRES+4, AXADCRES+6, DXMOVAX, MUL1+2XORAX, MUL2+2 ;判断被乘数和乘数是否同号JNSDONE ;同号,则结果为正数,无须修改结果NOTRES ;不同号,则结果为负数,须取反加1NOTRES+2NOT
13、RES+4NOTRES+6ADDRES, 1ADCRES+2, 0ADCRES+4, 0ADCRES+6, 0DONE:RETMAINENDPCODEENDSENDMAIN8、在8086系统下,编写完整程序,找出字节数组ARRAY中的最大值和最小值。假设ARRAY的长度为100个字节,每个字节为一个无符号数,程序执行后最大值将存放到字节变量MAX中,最小值则存放到字节变量MIN中。xHAQX74J0X解:参考程序:DATASEGMENTARRAYDB 100 DUP,?DATAENDSCODESEGMENTASSUMECS:CODE, DS:DATAMAINPROCFARPUSHDSMOVAX
14、, 0PUSHAXMOVAX, DATAMOVDS, AXMOVES, AXLEASI, ARRAY+99 ;SI指向源串尾LEADI, ARRAY+100 ;DI指向新串尾STD ;DF=1,串尾先移动MOVCX, 100REPMOVSB ;循环移动RETMAINENDPCODEENDSENDMAIN10、在8086系统下,编写在长字符串L_STR中查找短字符串S_STR的完整程序,如果找到匹配的字符串,则将字节变量RES置0FFH,否则置0。例如,在字符串“ABABCD”中可找到字符串“ABC”,则RES=0FFH。dvzfvkwMI1解:参考程序:DATASEGMENTL_STRDBAB
15、DABABCD ;长串L_LTHDW$-L_STR ;长串长度S_STRDB ABC ;短串S_LTHDW$-S_STR ;短串长度RESDB? ;存放结果DATAENDSCODESEGMENTASSUMECS:CODE, DS:DATAMAINPROCFARPUSHDSMOVAX, 0PUSHAXMOVAX, DATAMOVDS, AXMOVES, AXLEASI, L_STRLEADI, S_STRCLDMOVCX, L_LTHSUBCX, S_LTHINCCX ;作串比较的次数AGAIN:CALLCOMP ;进行串比较INCSILOOPAGAINMOVRES, 0RETMAINENDPC
16、OMPPROCFARPUSHCXPUSHSIPUSHDIMOVCX, S_LTHREPZCMPSBJZYES ;如果两个串相同,则说明找到POPDIPOPSIPOPCXRETYES:MOVRES, 0FFHMOVAH, 4CHINT21HCOMPENDPCODEENDSENDMAIN11、在80386系统下,编程实现两个64位无符号数相乘。解:参考程序:.386.MODELSMALL.DATAMUL1DD 3456789AH, 12345678H ;被乘数MUL2DD 789ABCDEH, 3456789AH ;乘数RESDD4 DUP(0 ;存放128位结果,初始化为0.CODEMAIN: MOVAX, DATAMOVDS, AXMOV EAX, MUL2MULMUL1MOVRES, EAXMOVRES+4, EDXMOV EAX, MUL2MULMUL1+4ADDRES+4, EAXADCRES+8, EDXMOV EAX, MUL2+4MULMUL1ADDRES+4, EAXADC RES+8, EDXMOV EAX, MUL2+4MULMUL1+4ADDRES+8, EAXADCRES+12, EDXMOV AH, 4CHINT 21H END MAIN申明:所有资料为本人收集整理,仅限个人学习使用,勿做商业用途。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1