微机原理、汇编语言与接口技术 周杰英张萍 习题答案汇总.doc

上传人:仙人指路1688 文档编号:4191327 上传时间:2023-04-09 格式:DOC 页数:81 大小:703KB
返回 下载 相关 举报
微机原理、汇编语言与接口技术 周杰英张萍 习题答案汇总.doc_第1页
第1页 / 共81页
微机原理、汇编语言与接口技术 周杰英张萍 习题答案汇总.doc_第2页
第2页 / 共81页
微机原理、汇编语言与接口技术 周杰英张萍 习题答案汇总.doc_第3页
第3页 / 共81页
微机原理、汇编语言与接口技术 周杰英张萍 习题答案汇总.doc_第4页
第4页 / 共81页
微机原理、汇编语言与接口技术 周杰英张萍 习题答案汇总.doc_第5页
第5页 / 共81页
点击查看更多>>
资源描述

《微机原理、汇编语言与接口技术 周杰英张萍 习题答案汇总.doc》由会员分享,可在线阅读,更多相关《微机原理、汇编语言与接口技术 周杰英张萍 习题答案汇总.doc(81页珍藏版)》请在三一办公上搜索。

1、第1章 绪论习题与参考答案(部分)1. 把下列二进制数转换成十进制数、十六进制数及BCD码形式。(1) 10110010B =(2) 01011101.101B =解:(1) 10110010B = 178D = B2H = (0001 0111 1000)BCD(2) 01011101.101B = 93.625D = 5D.AH= (1001 0011.0110 0010 0101)BCD2. 把下列十进制数转换成二进制数。(1) 100D =(2) 1000D =(3) 67.21D =解:(1) 100D = 01100100B(2) 1000D = 1111101000B(3) 67

2、.21D = 1000011.0011B3. 把下列十六进制数转换成十进制数、二进制数。(1) 2B5H =(2) 4CD.A5H =解: (1) 2B5H = 693D = 0010 1011 0101B(2) 4CD.A5H = 1229.6445D = 0100 1100 1101.1010 0101 B4. 计算下列各式。(1) A7H+B8H =(2) E4H-A6H =解:(1) A7H+B8H = 15FH(2) E4H-A6H = 3EH5. 写出下列十进制数的原码、反码和补码。(1) +89(2) -37解:(1) +89 原码、反码和补码为: 01011001B(2) -3

3、7 原码 = 10100101 B -37 反码 = 11011010 B-37 补码 = 11011011 B6求下列用二进制补码表示的十进制数(1)(01001101)补 = (2)(10110101)补 =解:(1)(01001101)补 = 77D(2)(10110101)补 = -75D 7请用8位二进制数写出下列字符带奇校验的ASCII码。(1)C: 1000011(2)O: 1001111(3)M: 1001101(4)P: 1010000解:(1)C:0 1000011(2)O: 0 1001111(3)M:1 1001101(4)P: 1 10100008请用8位二进制数写出

4、下列字符带偶校验的ASCII码。(1)+:0101011 (2)=: 0111101(3)#:0100011 (4): 0111110解:(1)+:0 0101011 (2)=: 1 0111101(3)#:1 0100011 (4): 1 01111109叙述CPU 中PC的作用。解:PC是CPU中的程序计数器,其作用是提供要执行指令的地址。第2章 微处理器的结构习题与参考答案1. 80868088 CPU 由哪两大部分组成?请分别叙述它们的功能。解:8086/8088 CPU均由两个独立的逻辑单元组成,一个称为总线接口单元BIU(Bus Interface Unit),另一个称为执行单元E

5、U(Execution Unit)。总线接口单元BIU取指令时,从存储器指定地址取出指令送入指令队列排队;执行指令时,根据EU命令对指定存储器单元或I/O端口存取数据。执行单元EU任务是执行指令,进行全部算术逻辑运算、完全偏移地址的计算,向总线接口单元BIU提供指令执行结果的数据和偏移地址,并对通用寄存器和标志寄存器进行管理。2. 80868088与传统的计算机相比在执行指令方面有什么不同?这样的设计思想有什么优点?解:总线接口部分和执行部分是分开的,每当EU执行一条指令时,造成指令队列空出2个或空出一个指令字节时 ,BIU马上从内存中取出下面一条或几条指令,以添满他的指令队列。这样,一般情况

6、下,CPU在执行完一条指令后,便可马上执行下一条指令,不像以往8位CPU那样,执行完一条指令后,需等待下一条指令。即EU从指令队列中取指令、执行指令和BIU补充指令队列的工作是同时进行的。这样大大提高了CPU利用率,降低了系统都对存储器速度的要求。 3. 状态标志和控制标志有何不同?80868088的状态标志和控制标志分别有哪些?解:8086/8088 CPU设立了一个两字节的标志寄存器,共九个标志。其中标志位O、S、Z、A、P、C是反映前一次涉及ALU操作结果的状态标志,D、I、T是控制CPU操作特征的控制标志。4. 80868088 CPU寻址存储器时,什么是物理地址?逻辑地址?它们之间有

7、何关系?解:8086/8088系统中每个存储单元都有一个物理地址,物理地址就是存储单元的实际地址编码。在CPU与存贮器之间进行任何信息交换时,需利用物理地址来查找所需要的访问的存储单元。逻辑地址由段地址和偏移地址两部分组成。逻辑地址的表示格式为:段地址:偏移地址。知道了逻辑地址,可以求出它对应的物理地址:物理地址=段地址10H+偏移地址。5. 段寄存器CS1200H,指令指针寄存器IPFF00H,此时,指令的物理地址为多少?指向这一物理地址的CS值和IP值是唯一的吗?解:根据:物理地址=段地址10H+偏移地址,指令的物理地址为21F00H。指向这一物理地址的CS值和IP值不唯一。6. 8086

8、 CPU中信号和A0信号是通过怎样的组合解决存储器和外设端口的读写的?这种组合决定了8086系统中存储器偶地址体及奇地址体之间应该用什么信号区分?怎样区分?解:若存取一个字节的数据,总是用一个总线周期来完成该操作;若存取一个字,则依该字是规则字还是不规则字需用一个或两个总线周期来完成。对规则字,只用一个总线周期来完成16位数据的传送,而对于非规则字则用相邻两个总线周期来完成该字的存储操作,先取其奇地址字节(即数据的低位字节),然后存取偶地址字节。在组成存储系统时,总是偶地址单元的数据通过AD0AD7传送,而奇地址单元的数据通过AD8AD15传送,即通过总线高字节传送。信号和A0信号控制存储器读

9、写见下表:操作A0 使用的数据总线存取规则字 00AD15AD0传送偶地址的一个字节10AD7AD0传送奇地址的一个字节01AD15AD8存取非规则字 01AD15AD8(第一个总线周期)10AD7AD0(第二个总线周期)11为非法码第3章 80x86指令系统习题与参考答案1、指出下列指令中操作数的寻址方式(8086系统)。(1) MOVAX,100(2) MOVAX,100(3) MOVDL,BP+SI(4) MOVBX,CX(5) MOVDX,SI(6) MOV1234HBX,DS(7) MOVDI+5678H,AL(8) MOV12BPDI,BH(9) POPCX(10)MOVAX,BX

10、+SI+10解:目的操作数源操作数(1) MOVAX,100寄存器寻址立即数寻址(2) MOVAX,100寄存器寻址直接寻址(3) MOVDL,BP+SI寄存器寻址基址变址寻址(4) MOVBX,CX寄存器间接寻址寄存器寻址(5) MOVDX,SI寄存器寻址寄存器间接寻址(6) MOV1234HBX,DS寄存器相对寻址寄存器寻址(7) MOVDI+5678H,AL寄存器相对寻址寄存器寻址(8) MOV12BPDI,BH相对基址变址寻址寄存器寻址(9) POPCX寄存器寻址隐含为堆栈(10)MOVAX,BX+SI+10寄存器寻址相对基址变址寻址2、指出下列指令中操作数的寻址方式(80386系统)

11、。(1) MOVEBX+12H,AX(2) MOVEBP+EDI*2,EBX(3) MOVEBX*4,BX(4) MOVEDX,EAX+ESI*8-12H解:目的操作数源操作数(1)寄存器相对寻址寄存器寻址(2)基址比例变址寻址寄存器寻址(3)比例变址寻址寄存器寻址(4)寄存器寻址相对基址比例变址寻址3、指出以下指令中,哪些指令是非法的,并说明为什么(8086系统)。(1) PUSH1234H(2) MOVCS,AX(3) INAX, 300(4) MOVAX,DX+12(5) MOVBX,BX(6) MOVDS,1000H(7) XCHGAL,AL(8) MOVAL,100H(9) MOVD

12、X,AL(10)LEABL,BX+5(11)LEADX,BX(12)MOV1000H,12H(13)ADDAX,DS(14)SUB0100H,BYTE PTR 0001(15)SHLBL,2(16)SHRCL,CL(17)MULAL,BL(18)INT400解:(1)非法,8086系统不允许PUSH指令的操作数为立即数;(2)非法,MOV指令中CS不能作为目的操作数;(3)非法,端口号大于0FFH;(4)非法,DX不能出现在中括号内;(5)合法;(6)非法,不能把立即数赋给段寄存器;(7)合法;(8)非法,源操作数大于0FFH,不能赋给8位寄存器AL;(9)非法,源操作数是8位寄存器,目的操作

13、数却是16位寄存器,不匹配;(10)非法,LEA指令得到的是16位偏移量,但目的操作数是8位寄存器;(11)非法,LEA指令的源操作数只能是存储器操作数;(12)非法,指令存在歧义,无法确定传送的是字节还是字;(13)非法,段寄存器不能参与算术运算;(14)非法,源和目的寄存器不能同为存储器操作数;(15)非法,在8086系统中,移位次数大于1时需要将移位次数存放到CL中;(16)合法;(17)非法,在8086系统中MUL指令没有双操作数的用法;(18)非法,中断类型号大于0FFH。4、指出以下指令中,哪些指令是非法的,并说明为什么(80386系统)。(1) MOVAX,12EBXSI*16(

14、2) RCREAX,10(3) PUSH5678H(4) POP1000H(5) MOVEAX+EAX,EAX(6) MOVAL,ESP+ESP*2(7) MOVBL,AX+12(8) IMULAL,BL,12解:(1)非法,比例因子只能是1、2、4、8,不能是16;(2)合法;(3)合法;(4)非法,POP指令的目的操作数不能是立即数;(5)合法;(6)非法,ESP只能作为基址寄存器,不能作为变址寄存器;(7)非法,在386系统中AX不能作为基址寄存器,也不能作为变址寄存器;(8)合法。5、假设(AX)=1234H,(BX)=5678H,(SP)=1000H,指出执行下面的程序段后,各相关寄

15、存器及堆栈段中的内容。PUSHAX ;(AX)=?,(BX)=?,(SP)=?,栈顶字节SP=?, 栈顶第二字节SP+1=?PUSHBX ;(AX)=?,(BX)=?,(SP)=?,栈顶字节SP=?, 栈顶第二字节SP+1=?POPAX ;(AX)=?,(BX)=?,(SP)=?,栈顶字节SP=?, 栈顶第二字节SP+1=?解:(AX)=1234H,(BX)=5678H,(SP)=0FFEH,栈顶字节SP=34H,栈顶第二字节SP+1=12H(AX)=1234H,(BX)=5678H,(SP)=0FFCH,栈顶字节SP=78H,栈顶第二字节SP+1=56H(AX)=5678H,(BX)=567

16、8H,(SP)=0FFEH,栈顶字节SP=34H,栈顶第二字节SP+1=12H6、假设A、B、C、D、X、Y为字节变量,AA、BB、YY为字变量,试利用算术运算指令编写程序段,完成以下各算术运算题。(1)计算YYA+B*C,其中A、B、C都是无符号数;(2)计算(AA+BB)/(C-D),商赋给X,余数赋给Y,其中AA、BB、C、D都是带符号数;(3)计算YY(A-B)*C,其中A、B、C都是未组合BCD码。解:(1)MOVAL,BMULCADDAL,AADCAH,0MOVYY,AX(2)MOVAX,AAADDAX,BBMOVBL,CSUBBL,DIDIVBLMOVX,ALMOVY,AH(3)

17、MOVAL,ASUBAL,BAASMULCAAMMOV YY, AX7、利用移位指令编写程序段,实现以下运算。(1)计算AXAX*10,其中AX为无符号数;(2)32位带符号数存放在寄存器DX和AX中,其中DX存放高16位,AX存放低16位计算(DX,AX)(DX,AX)*2。(3)32位带符号数存放在寄存器DX和AX中,其中DX存放高16位,AX存放低16位计算(DX,AX)(DX,AX)/2。解:(1)SHLAX,1MOVBX,AXSHLAX,1SHLAX,1ADDAX,BX(2)SALAX,1RCLDX,1(3)SARDX,1RCRAX,18、指出以下指令执行后,标志寄存器OF、SF、Z

18、F、AF、PF、CF的状态。(1)(AL)=0FFH,(BL)=20H,执行指令:ADDAL,BL(2)(AL)=01H, (BL)=02H,执行指令:CMPAL,BL(3)(AL)=0FFH,执行指令:INC AL(4)(AL)=0,执行指令:DECAL(5)(AL)=0F0H,(BL)=04H,执行指令:IMULBL(6)(AX)=1F0H,(BL)=08H,执行指令:DIVBL(7)(AL)=12H, (BL)=34H,执行指令:TESTAL,BL(8)(AL)=98H,执行指令:SALAL,1解:OFSFZFAFPFCF(1)000001(2)010111(3)00111(4)0101

19、1(5)00(6)(7)00000(8)10011注:0表示结果为0,1表示结果为1,表示结果不变,表示结果不确定。9、在8086系统下,编写实现如下功能的程序段:(1)从地址为80H的端口中读入一个字节;(2)如果该字节最高位为“1”,则将字节0FFH送到地址为81H的端口中,并退出程序;(3)如果该字节最高位为“0”,则转向第(1)步,继续循环扫描。解: 参考程序段:AGAIN:INAL, 80HTESTAL, 80HJZAGAINMOVAL, 0FFHOUT81H, AL10、我们知道,MOV指令并不能直接修改CS、IP的值,但事实上,我们还可以通过其他方法来达到修改CS、IP的目的。试

20、编写一个程序段,使该程序段运行后,(CS)=0100H,(IP)=0000H。解:方法一、利用段间返回指令RETF:MOVAX,0100HPUSHAX;段基址入栈MOVAX,0PUSHAX;偏移量入栈RETF方法二、利用JMP指令实现段间跳转,假设ADDR为双字变量:MOVWORD PTR ADDR,0;WORD PTR ADDR偏移量MOVWORD PTR ADDR+2, 0100H;WORD PTR ADDR+2段基址JMPDWORD PTR ADDR第4章 汇编语言程序设计习题与参考答案1、指出以下数据定义伪指令所分配的字节数(8086系统)。(1)DATA1DB10,?,A(2)DAT

21、A2DW10 DUP(2,3 DUP(?),1)(3)DATA3DBHELLO,WORLD!,$(4)DATA4DWDATA4解:(1)3字节;(2)100字节;(3)13字节;(4)2字节。2、指出以下数据定义伪指令所分配的字节数(80386系统)。(1)DATA1DF12,34,56(2)DATA2DFDATA2(3)DATA3DQ0,10 DUP(?)(4)DATA4DT0,1,2解:(1)18字节;(3)6字节;(3)88字节;(4)30字节。3、指出以下指令中哪些是无效的,并说明原因。(1)ADDRDB$(2)DATADBF0H,12H(3)1_DATADW1234H(4)VARDW

22、VAR1;VAR1为一个字节变量(5)MOVAX,10-VAR1;VAR1为一个字变量(6)MOVBX,VAR2*2+1;VAR2为一个字变量解:(1)非法,地址计数器$是32位数;(2)非法,以字母开头的16进制数应在前面加“0”,即应为“0F0H”;(3)非法,变量名非法,不能以数字开头;(4)合法;(5)非法,地址表达式不能是“常数-地址”;(6)非法,地址表达式不能出现乘法。4、假设已定义数据段如下:DATASEGMENTORG100HDATA1DB10 DUP(1,2,3)DATA2DWDATA1,$DATAENDS且段寄存器DS已初始化为该数据段的段基址(假设段基址为1234H)。

23、请指出以下指令执行后,相应的寄存器中的内容。(1)MOVAX,WORD PTR DATA1;(AX)=?(2)MOVBX,DATA2;(BX)=?(3)MOVCX,DATA2+2;(CX)=?(4)MOVDX,OFFSETDATA2;(DX)=?(5)MOVSI,SEGDATA1;(SI)=?(6)MOVDI,LENGTHDATA1;(DI)=?(7)MOVSP,TYPE DATA1;(SP)=?(8)MOVBP,SIZE DATA2;(BP)=?解:(1)(AX)=0201H;(2)(BX)=0100H;(3)(CX)=0120H;(4)(DX)=011EH;(5)(SI)=1234H;(6

24、)(DI)=000AH;(7)(SP)=0001H;(8)(BP)=0002H。5、在8086系统下,编写完整程序,实现从键盘上输入8位二进制数,从显示器上显示相应的16进制数,例如从键盘上输入“00010010”,应在显示器上显示“12H”。解:参考程序:DATASEGMENTMSG1DBInput binary number(ESC to exit):,$MSG2DB0AH,0DH,Input error!,0AH,0DH,$DATAENDSOUTPUTMACROASC;定义输出一个字符的宏MOVDL, ASCMOVAH, 2INT21HENDMCODESEGMENTASSUMECS:CO

25、DE, DS:DATAMAINPROCFARPUSHDSMOVAX, 0PUSHAXMOVAX, DATAMOVDS, AXAGAIN: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进制数

26、POPBXANDBL, 0FHCALLTRAN;显示低4位对应的16进制数OUTPUTHOUTPUT0AHOUTPUT0DHJMPAGAINERROR:LEADX, MSG2MOVAH, 9INT21HJMPAGAINDONE:RETMAINENDPTRANPROCFARCMPBL, 0AHJBBELOWADDBL, 7BELOW:ADDBL, 30HOUTPUTBLRETTRANENDPCODEENDSENDMAIN6、在8086系统下,编写完整程序,实现从键盘上输入两个4位十进制数,从显示器上显示这两个数之和,例如输入“1234”、“5678”,应在显示器上显示“6912”。解:参考程序:

27、DATASEGMENTMSG1DB Input the first number(ESC to exit):,$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;提示输入第一个

28、数CALLINPUT;输入过程PUSHBXOUTPUT0AHOUTPUT0DHLEADX, MSG2 MOVAH, 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, CLA

29、DDBH, 30HOUTPUTBH;显示千位数POPBXPUSHBXANDBH, 0FHADDBH, 30HOUTPUTBH;显示百位数POPBXPUSHBXMOVCL, 4SHRBL, CLADDBL, 30HOUTPUTBL;显示十位数POPBXANDBL, 0FHADDBL, 30HOUTPUTBL;显示个位数OUTPUT0AHOUTPUT0DHJMPAGAININPUTPROCFAR;输入一个4位十进制数的过程BEGIN:MOVCX, 4MOVBX, 0L:SHLBX, 1SHLBX, 1SHLBX, 1SHLBX, 1;BX的值乘以16MOVAH, 1INT21H;输入CMPAL,

30、1BH;ESC键退出JZDONECMPAL, 0JBERROR;非数字,出错CMPAL, 9JAERROR;非数字,出错SUBAL, 30HXORAH, AHADDBX, AX;将输入加到BX中LOOPLRETERROR:LEADX, MSG3MOVAH, 9INT21HJMPBEGINDONE:MOVAH, 4CHINT21HINPUTENDPCODEENDSENDMAIN7、在8086系统下,编写完整程序,实现两个32位带符号数相乘。假设被乘数存放在以字变量MUL1开始的连续4个字节中,乘数存放在以字变量MUL2开始的连续4个字节中中,相乘结果存放在以字变量RES开始的连续8个字节中。解:

31、参考程序:DATASEGMENTMUL1DW0FFFFH,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;

32、乘数是否为负数JZNEXT2NOTSI;为负数,则取反加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;不同号,则结果为负数,须取反加1NOT

33、RES+2NOTRES+4NOTRES+6ADDRES, 1ADCRES+2, 0ADCRES+4, 0ADCRES+6, 0DONE:RETMAINENDPCODEENDSENDMAIN8、在8086系统下,编写完整程序,找出字节数组ARRAY中的最大值和最小值。假设ARRAY的长度为100个字节,每个字节为一个无符号数,程序执行后最大值将存放到字节变量MAX中,最小值则存放到字节变量MIN中。解:参考程序:DATASEGMENTARRAYDB100 DUP(?);字节数组MAXDB?;最大值MINDB?;最小值DATAENDSCODESEGMENTASSUMECS:CODE, DS:DAT

34、AMAINPROCFARPUSHDSMOVAX, 0PUSHAXMOVAX, DATAMOVDS, AXLEASI, ARRAYCLDMOVBH, 0;存放临时最大值的寄存器MOVBL, 0FFH;存放临时最小值的寄存器MOVCX, 100AGAIN:LODSBCMPAL, BHJNANEXT1MOVBH, AL;如果当前数值比临时最大值大,则代替NEXT1:CMPAL, BLJNBNEXT2MOVBL, AL;如果当前数值比临时最小值小,则代替NEXT2:LOOPAGAINMOVMAX, BHMOVMIN, BLRETMAINENDPCODEENDSENDMAIN9、在8086系统下,编写完

35、整程序,将字节数组ARRAY中的所有数据往高地址的方向移动一位,即原来存放在ARRAY中的字节移动到ARRAY+1中,原来存放在ARRAY+1中的字节移动到ARRAY+2中,依此类推。假设ARRAY的长度为100个字节。解:可利用MOVSB指令实现移位,但应该注意,必须从串尾开始移动,因为假如直接从串头开始,将串头移到第二个数,那么第二个数将被覆盖。为使程序能从串尾开始移动,可令方向标志位DF=1。参考程序:DATASEGMENTARRAYDB100 DUP(?), ?DATAENDSCODESEGMENTASSUMECS:CODE, DS:DATAMAINPROCFARPUSHDSMOVAX

36、, 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。解:参考程序:DATASEGMENTL_STRDBABDABABCD;长串L_LT

37、HDW$-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, 0RETMAINENDPCOMPPROCFARPUSHCXPUSHS

38、IPUSHDIMOVCX, S_LTHREPZCMPSBJZYES;如果两个串相同,则说明找到POPDIPOPSIPOPCXRETYES:MOVRES, 0FFHMOVAH, 4CH INT21HCOMPENDPCODEENDSENDMAIN11、在80386系统下,编程实现两个64位无符号数相乘。解:参考程序:.386. MODELSMALL.DATAMUL1DD3456789AH, 12345678H;被乘数MUL2DD789ABCDEH, 3456789AH;乘数RESDD4 DUP(0);存放128位结果,初始化为0.CODEMAIN:MOVAX, DATAMOVDS, AXMOVEA

39、X, MUL2MULMUL1MOVRES, EAXMOVRES+4, EDXMOVEAX, MUL2MULMUL1+4ADDRES+4, EAXADCRES+8, EDXMOVEAX, MUL2+4MULMUL1ADDRES+4, EAXADCRES+8, EDXMOVEAX, MUL2+4MULMUL1+4ADDRES+8, EAXADCRES+12, EDXMOVAH, 4CHINT21HENDMAIN第5章 微机总线技术习题与参考答案1. 总线周期的含义是什么?80888086基本总线周期由几个时钟周期组成?解:总线周期是指CPU从存储器或IO端口存取一个字节所需的时间。80888086基本总线周期由4个时钟周期组成。2. 从引脚信号来看,8086和8088有什么不同?解:从引脚信号来看,8086的地址引脚与数据引脚复用,引脚为AD0AD15,而8088同样也采用了地址引脚与数据引脚复用,但引脚为AD0AD7。3. 试说明80868088工作在最小方式下和最大方式下系统基本配置的差别。在最大组态下,80868088的外围电路由哪些器件组成?它们的作用是什么?解:80868088工作在最大方式下时,需要使用8288总线控制器,但是工作在最小方式下时不需要使用。80868088工作在最大方式下时,外围电路包括8284时钟发生器、8286数据发送接收器

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号