最新《微机原理与接口技术》参考答案.doc

上传人:1595****071 文档编号:33847793 上传时间:2022-08-12 格式:DOC 页数:25 大小:213.50KB
返回 下载 相关 举报
最新《微机原理与接口技术》参考答案.doc_第1页
第1页 / 共25页
最新《微机原理与接口技术》参考答案.doc_第2页
第2页 / 共25页
点击查看更多>>
资源描述

《最新《微机原理与接口技术》参考答案.doc》由会员分享,可在线阅读,更多相关《最新《微机原理与接口技术》参考答案.doc(25页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精品资料微机原理与接口技术参考答案.微机原理与接口技术习题参考答案习题21. 为何说8086CPU是16位CPU?答:16位指的是8086CPU的字长,而字长一般来说和运算器、寄存器、总线宽度一致。因为8086CPU的内部寄存器、内部运算部件以及内部操作都是按16位设计的,这决定了它的字长为16位。2. 8086CPU由哪两个单元组成?其中,指令队列在哪个单元中,有何作用?答:总线接口单元(Bus Interface Unit,BIU)和执行单元(Execution Unit,EU)。指令队列在BIU中。它的作用是当EU在执行指令时,空闲的BIU可以从内存读取后续指令到指令队列,这样就可以将取

2、指令工作和执行指令工作重叠进行,从而提高CPU的工作效率,加快指令的执行速度。3. 8086CPU中8位寄存器和16位寄存器是什么关系?答:8086的通用寄存器包括数据寄存器、指针寄存器和变址寄存器。其中数据寄存器包含AX、BX、CX、DX四个16位寄存器,但他们每个都可以分开作为两个单独的8位寄存器使用。8086的指针寄存器和变址寄存器不可分割为8位寄存器。4. 8086CPU中的IP寄存器有何用途?答:IP寄存器是指令指针寄存器,用来存放下一条要执行的指令在代码段中的偏移地址。在程序运行过程中,IP寄存器始终指向下一条指令的首地址,与CS寄存器联合确定下一条指令的物理地址。8086就是通过

3、IP寄存器来控制指令序列的执行流程。5. 在标志寄存器中,用于反映运算结果属性的标志位有哪些?它们每一位所表示的含义是什么?答:有CF、PF、AF、ZF、SF、OF。它们的含义如下:CF:进位标志。它记录运算时从最高有效位产生的进位值或结果值。最高有效位有进位或有借位时CF=1,否则CF=0。PF:奇偶标志。它记录运算结果的奇偶检验条件。当结果操作数中“1”的个数为偶数时PF=1,否则PF=0。AF:辅助进位标志。在字节运算时,由低半字节(字节的低4位)向高半字节有进位或借位时,AF=1,否则AF=0。ZF:零标志。运算结果为零时ZF=1,否则ZF=0。SF:符号标志。它记录运算结果的最高位,

4、即由符号数的符号。OF:溢出标志。在运算过程中,如果运算结果已经超出了机器能表示的数值范围(指有符号数)称为溢出,此时OF=1,否则OF=0。6. 分别完成下面的8位运算,并说明各主要标志位的状态,以及结果是否产生溢出(提示:需要分为有符号数和无符号数两种情况)。(1)90H+3CH(2)3CH-90H(3)7DH-9CH答:(1)有符号:CCH 主要标志CF=0 PF=1 AF=0 ZF=0 SF=1 OF=0 无溢出无符号:CCH 主要标志CF=0 PF=1 AF=0 ZF=0 SF=1 OF=0 无溢出 (2)有符号:ACH 主要标志CF=1 PF=1 AF=0 ZF=0 SF=1 OF

5、=1 溢出无符号:ACH 主要标志CF=1 PF=1 AF=0 ZF=0 SF=1 OF=0 溢出 (3)有符号:E1H 主要标志CF=1 PF=1 AF=0 ZF=0 SF=1 OF=1 溢出无符号:E1H 主要标志CF=1 PF=1 AF=0 ZF=0 SF=1 OF=0 溢出7. 假设下列各组数值均分配在10000H开始的连续存储单元中,分别画出各组数值在内存中的存储形式。字节:2、2、B、b和0;字:12H、1004H、-1和0;双字:420H、12345678H和0。答:(1)22Bb010000H02H32H42H62H30H (2)12H1004H-1010000H12H04HF

6、FH00H10001H00H10HFFH00H (3)420H12345678H010001H20H78H00H10002H04H56H00H10003H00H34H00H10004H00H12H00H8. 什么是物理空间?8086CPU的物理地址是多少位?其决定的物理空间有多大?答:物理空间是指由编址单元(如字节)大小和地址总线宽度决定的可寻址的存储器地址空间。8086CPU具有20条地址总线,所以它的物理地址是20bit。8086的存储是按照字节存储的,所以其物理空间为B=1MB。9. 什么是逻辑空间?8086的逻辑空间有何特点?其逻辑地址如何构成?答:采用分段存储管理方式,将物理空间分割

7、,通过段映射构建的由多个独立的逻辑段构成的存储空间即为逻辑空间。8086使用16位地址在段内寻址,称为段的偏移地址,因此其特点是段的最大长度=64KB。在8086中,将16位的段地址和16位的偏移地址合称为逻辑地址,其中段地址舍弃了最低四位的0,故逻辑地址等于段地址乘以10H加偏移地址。10. 简述面向逻辑空间编程比面向物理空间编程的优势。答:可以解除程序设计对实际物理空间的依赖。具体表现在:程序设计时不需要了解存储器的使用情况,操作系统或监控程序会将程序分配在空闲空间,不会和系统程序或其他程序冲突;第二,程序设计时采用的是逻辑空间的地址,存储管理部件将自动、透明地进行逻辑空间地址到物理空间地

8、址的转换,即逻辑空间到物理空间的映射,所以,不同的空间分配对程序没有影响;第三,逻辑空间是相对“观察者”而言的,即不同的人面对的逻辑空间是独立无关的,所以每个编程者都是在自己的逻辑空间上编程。11. 8086CPU是如何实现逻辑空间到物理空间的映射的?答:逻辑空间的段地址指明要访问的存储单元所处的段,偏移地址指明存储单元的段内地址。段地址表示段在物理空间上的起始位置,偏移地址表示要访问的存储单元相对于起始位置的偏移量。12. 简述段寄存器的作用。答:为了保证地址转换的效率,访问存储器时,总是由段寄存器提供段址。8086在BIU中设有4个段寄存器(CS、DS、SS、ES),CPU可以在某一时刻通

9、过这4个段寄存器来访问4个不同的段。在程序设计层面,可以通过指定段和段寄存器的关系来标识段,这样在实际编程时,绝大多数情况下逻辑地址只需要指定偏移地址。13. 已知当前(CS)=7F00H,(IP)=017CH,问下条指令的物理地址是什么?答:(CS)*10H+(IP)=7F00H*10H+017CH=7F000H+017CH=7F17CH14. 已知当前(DS)=5C00H,(ES)=5D10H,而数据的物理地址是63654H,若分别使用DS和ES段寄存器访问该数据,问偏移地址分别是多少?答:若使用DS,则(IP)=63654H-(DS)*10H=63654H-5C000H=7654H。 若

10、使用ES,则(IP)=63654H-(ES)*10H=63654H-5D100H=6554H。15. 什么是I/O端口?8086CPU的端口空间是多大?需要使用地址总线的多少位访问端口空间?答:I/O端口即输入输出接口,是外部设备和主机交换信息的接口,在它们之间的通信中起到了转换和缓冲数据的作用。8086的 I/O端口空间大小为=64KB。需要16位,8086使用地址总线的低16位访问I/O端口。16. 简述Intel的32位处理器如何对16位处理器的寄存器进行扩展,有何好处。答:(1)将16位通用寄存器扩展16位形成32位通用寄存器。同时还保留了原来的16位寄存器和8位寄存器。 (2)将指令

11、寄存器IP扩展16位形成32为的EIP寄存器。 (3)段寄存器仍然是16位的,但增加了FS和GS两个段寄存器。 (4)将寄存器Flags扩展16为形成32位的EFLAGS标志寄存器,增加了新的标志。 32位微处理器完整保留了16位微处理器的寄存器结构,可保证16位架构的程序可以不经修改的运行在32位架构中,即向前兼容,是Intel商业成功的重要保证。17. 简述32位处理器的工作模式。答:(1)实模式。实模式下的工作原理与8086相同,就相当于一个告诉的8086处理器。 (2)保护模式。该模式有以下特点:支持多任务;支持存储器的分段管理和分页管理,易于实现虚拟操作系统;具有保护功能,包括存储器

12、保护、任务特权级保护和任务之间的保护。 (3)虚拟8086模式。虚拟8086模式是为了在保护模式下执行8086程序而设计的。在虚拟8086模式下可执行16位的软件,同时虚拟8086模式又可以以任务的形式与真正的32位任务进行切换,共享资源。18. 简述保护模式下存储管理的特点。答:在保护模式下,微处理器支持分段存储管理和分页存储管理。分段存储管理完成由多个逻辑段构建的逻辑空间映射到线性空间的工作;程序设计面向逻辑空间进行;如果不使用分页存储管理,则线性空间就是物理空间;分页存储管理将线性空间按照一定的大小(4KB)划分页(逻辑页),然后以页为单位在物理空间上进行分配(物理页)和回收,并实现逻辑

13、页到物理页的映射;分页存储管理对使用者是透明的。习题31. 指令由哪两部分构成?分别起什么作用?答:由操作码和操作数组成。操作码表示指令所要完成操作的功能和性质,操作数提供该操作的对象。2. 存储器寻址方式提供的是什么地址?它最终如何映射到实际的物理地址?答:由段址和偏移地址组成的逻辑地址。逻辑空间的段地址指明要访问的存储单元所处的段,偏移地址指明存储单元的段内地址。段地址表示段在物理空间上的起始位置,偏移地址表示要访问的存储单元相对于起始位置的偏移量。3. 简述立即寻址和直接寻址、寄存器寻址和寄存器间接寻址的区别。答:立即寻址的指令所需的操作数直接存放在指令中,指令的操作数字段就是真正的操作

14、数。直接寻址是在指令中给出操作数所在内存单元的段内偏移量。寄存器寻址的操作数存放在寄存器中,指令的操作数字段是使用的寄存器。寄存器间接寻址方式中,寄存器内存放的是操作数的地址,而不是操作数本身,即操作数是通过寄存器间接得到的。4. 指出下列各种操作数的寻址方式。MOV AX,420HMOV BX,SIMOV AX,90MOV DI+90,AHMOV AL,BP+SI+20答:答案一(默认求源操作数寻址方式)1) MOV AX, 420H立即寻址2) MOV BX, SI寄存器寻址3) MOV AX, 90直接寻址4) MOV DI+90,AH寄存器寻址5) MOV AL,BP+SI+20相对基

15、址变址寻址答案二1) MOV AX, 420H源:立即寻址目:寄存器寻址2) MOV BX, SI源:寄存器寻址目:基址寻址3) MOV AX, 90源:直接寻址目:寄存器寻址4) MOV DI+90,AH源:寄存器寻址目:变址寻址5) MOV AL,BP+SI+20源:(相对)基址变址寻址目:寄存器寻址 5. 指出下列寻址方式中源操作数所使用的段寄存器。MOV AX,SI+20HMOV AL,1000HMOV AX,ES:BXSIMOV AX,BP+1234H答:(1)DS(2)DS (3)ES (4)SS6. 已知寄存器(BX)=2010H、(DI)=0FFF0H和(BP)=420H,试分

16、别计算出下列寻址方式中源操作数的有效地址。MOV AX,2345HMOV AX,BXMOV AX,ES:DI+200MOV AX,DS:BP+DIMOV AX,BX+DI+114H答:1) MOV AX,2345H2345H2) MOV AX,BX2010H3) MOV AX,ES:DI+2000B8H4) MOV AX,DS:BP+DI410H5) MOV AX,BX+DI+114H2114H7. 使用类似MOV指令的双操作数指令需要注意什么?答:(1)MOV指令不需要经过ALU处理,所以对标志位没有影响;(2)MOV指令是双操作数指令,在使用时有一些限制:立即数不能作为目的操作数;CS不能

17、作为目的操作数;段寄存器不能到段寄存器;立即数不能到段寄存器;内存不能到内存;8. 8086系统的堆栈是如何组织的?如何判断堆栈满或空?答:8086的堆栈采用存储器方式实现,8086将堆栈组织为一个逻辑段,称为堆栈段。堆栈段的段址由寄存器SS指定,堆栈指针由SP寄存器担当。若SP当前值等于SS段址的内的最小值,即SP为0时,堆栈满;若SP当前值等于堆栈指定的SP初始值时,堆栈空。9. 已知(SS)=0FF00H、(SP)=00B0H,先执行两条将8086H和0F20H入栈的PUSH指令,再执行一条POP指令。请画出堆栈内容变化过程示意图(请标出存储单元的物理地址)。答: 执行完两条PUSH后:

18、|0FF00HSS |20H|0FFACHSP|0FH|0FFADH|86H|0FFAEH|80H|0FFAFH再执行一条POP后:|0FF00HSS |86H|0FFAEHSP|80H|0FFAFH10. 用一条指令实现将BX与SI之和传送给CX的功能。答:LEACX,BX+SI11. 写出下列指令中每条指令的执行结果,并指出标志位CF、ZF、OF、SF的变化情况。MOVBX,40ABHADDBL,09CHMOVAL,0E5HCBWADDBH,ALSBBBX,AXADCAX,20HSUBBH,-9答:MOVBX,40ABH;将立即数40ABH传给寄存器BX,对标志位无影响ADDBL,09CH

19、;将9CH与ABH相加,结果47H存入BL,CF=1,ZF=0,;OF=1,SF=0MOVAL,0E5H;将立即数E5H传给寄存器AL,对标志位无影响CBW;对AL进行符号扩展,即AX为FFE5H,对标志位无影响ADDBH,AL;将AL中的数即E5H与BH中的数40H相加,结果25H存BH,;CF=1,ZF=0,OF=1,SF=0SBBBX,AX;将BX中的数2547H减去AX中的数FFE5H,再减去标志位;CF=1,即将结果2561H存入BX中,CF=1,ZF=0,OF=1,SF=0ADCAX,20H;将AX中的数FFE5H加20H,再加CF=1,即得0006H存;入AX,CF=1,ZF=0

20、,OF=1,SF=0SUBBH,-9;将BH中的数25H加上F7H(补码),即得1BH存入BH,CF=1,;ZF=0,;OF=1,SF=012. 简述乘法指令和除法指令寻址方式的特点。答:都是隐含寻址指令。都分8位和16位两种情况,其中8位乘法的被乘数在AL中,指令给出8位乘数,得到的16位结果存放在AX中;16位乘法的被乘数在AX中,指令给出16位被乘数,32位结果在DX:AX中。8位除法的16位被除数在AX中,指令给出8位除数,8位商在AL中,8位余数在AH种;16位除法的32位操作数在DX:AX中,指令给出16位操作数,16位商在AX中,16位余数在DX中。乘法指令和除法指令都不允许立即

21、数。13. 完成一个计算DL(无符号数)三次方的指令序列。答:MOVAL,DLIMULDLMULDL14. 按下列要求编写指令序列。清除DH中的最低三位而不改变其他位,结果存入BH中;把DI中的最高5位置1而不改变其他位;把AX中的03位置1,79位取反,1315位置0;检查BX中的第2、5和9位中是否有一位为1;检查CX中的第1、6和11位中是否同时为1;检查AX中的第0、2、9和13位中是否有一位为0;检查DX中的第1、4、11和14位中是否同时为0;答:(1)MOVBH,F8HANDBH,DH(2)ORDI,FFF8H(3)ORAX,000FHXORAX,0380HANDAX,1FFFH

22、(4)MOVDX,BXTESTDX,0004H;若ZF=0,则第2位为1TESTDX,0020H;若ZF=0,则第5位为1TESTDX,0200H;若ZF=0,则第9位为1(5)XORCX,0824HJEYES(6)TESTDX,0001H;若ZF=1,则第0位为0TESTDX,0002H;若ZF=1,则第2位为0TESTDX,0200H;若ZF=1,则第9位为0TESTDX,2000H;若ZF=1,则第13位为0(7)XORDX,4812HJEYES15. NOT指令和NEG指令有何不同?编写指令序列将(DX:AX)中的双字算数求反。答:NOT指令是对操作数的按位求反,称为逻辑求反。而NEG

23、指令是算数求反。NOTAXNOTDXADDAX,1ADCDX,016. 使用移位指令将40和-49分别乘2和除2,请注意选择合适的移位指令。答:MOVAX,0028H;将40存入AXSHLAX,1;(AX)*2MOVAX,0028H;将40存入AXSARAX,1;(AX)/2MOVAX,FFCFH;将-49存入AXSHLAX,1;(AX)*2MOVAX,FFCFH;将-49存入AXSARAX,1;(AX)/217. 分析下面指令序列完成的功能。MOVCL,4SHLDX,CLMOVBL,4HSHLAX,CLSHRBL,CLORDL,BL答:MOVCL,4;将4存入CLSHLDX,CL;(DX)*

24、16MOVBL,4H;将4H存入BLSHLAX,CL;(AX)*16SHRBL,CL;(BL)右移4位,为0ORDL,BL;BL为0,取得DL的高四位18. 方向标志DF的作用是什么?用于设置或消除该标志位的指令是什么?答:作用是控制串的处理方向。指令STD设置DF=1,CLD清除DF。19. 已知数据段中保存有100个字的数组,起始地址为0B00H。编写指令序列实现将-1插入到第一个字。答:20. 什么是段间转移?什么是段内转移?它们的实现机制有何不同?答:根据转移指令和转移指令要转移到的目标位置之间的关系,把转移分为段内转移和段间转移。段内转移中,转移的目标位置在当前代码段内,CS的内容不

25、变,只改变IP的内容;段间转移中,转移的目标地址不在本段,此时CS和IP的内容都需要修改。21. 条件转移指令中,所谓的“条件”是什么,如何做到?如何使用?请举例说明。答:所谓的条件就是某个标志位或某几个标志位的状态。单一条件的5个标志位ZF、CF、OF、SF和PF,以及它们的否定。多个标志位的联合还可以构成复合条件。例如:CMPAX,1;执行(AX)-1不保存结果JZEqual;如果结果为零(ZF=1)则转移到EqualEqual:22. 假设AX和BX中的内容是有符号数,CX和DX中的内容是无符号数,试实现:如果(DX)(CX),则转到EXCEED;如果(BX)(AX),则转到EXCEED

26、;如果(CX)=0,则转到ZERO;如果(BX)-(AX)将产生溢出,则转到OVERFLOW;如果(BX)(AX),则转到NOTBIG;如果(DX)(CX),则转到NOTBIG;答:(1)CMPDX,CXJAEXCEED (2)CMPBX,AXJGEXCEED (3)CMPCX,0JZZERO (4)CMPBX,AXJOOVERFLOW (5)CMPBX,AXJLENOTBIG (6)CMPDX,CXJBENOTBIG23. 已知数据段中保存有100个字的数组,起始地址为0B00H。编写指令序列实现将数组中的每个字加1。答:LEASI,0B00HMOVCX,100L1:MOVAX,SIINCA

27、XMOVSI,AXADDSI,2LOOPL124. 简述段内调用和段间调用的主要区别。答:段内调用的调用位置和子程序在同一段内,段间调用的调用位置和子程序不在同一段内。25. 已知指令CALLSUB1实现段内调用子程序SUB1,请用JMP指令序列实现此调用功能。答:PUSHIPJMPSUB126. 子程序SUB1的最后一条指令是RET指令实现段内返回,它能否用JMP指令模拟?答:POPBX;前提是调用时已经将原来的IP值入栈JMPBX27. 如何得到中断60H的中断服务程序的首地址?答:MOVAX,0MOVES,AX;中断向量表放在内存最低端,段址为0LDSSI,ES:60H*4;中断向量放在

28、中断向量表“中断号*4”位置,占4字节,;低字是偏移地址,高字是段址,所以使用LDS取长指针。28. 编写指令序列完成将中断1CH指向新的中断服务程序的功能,新的中断服务程序首地址为0FA00:100H。答:习题41简述汇编语言的优缺点及应用场合。答:汇编语言的优点:1)、相比机器语言便于阅读和理解、书写和编程、调试和维护;2)、是计算机系统和逻辑功能的直接描述,便于理解计算机系统;3)、汇编语言可以直接控制硬件,更能充分发挥硬件的特性;4)、汇编语言程序目标代码简短,占用内存少,执行速度快。缺点:1)、汇编语言是低级语言,面向机器,不适于描述和反映现实问题,编程相对复杂和麻烦;2)、需要使用

29、者掌握大量计算机相关知识,不利于计算机的推广;3)、依赖特定的计算机结构,缺乏通用性和可移植性。应用场合:1)、底层的系统软件。底层的系统软件往往需要直接面对计算机系统或直接操作硬件,所以多采用汇编语言;2)、高效程序。汇编语言与机器语言一一对应,其程序的时间代价和空间代价都比较小。2什么是汇编过程?其中,汇编程序起什么作用?答:汇编过程是指将汇编语言源程序转化为目标程序的过程。汇编程序又称汇编器,它将汇编语言书写的程序翻译成与之等价的机器语言程序。3伪指令END有何作用?答:END伪指令的作用包括两点:1)、标识程序结束。汇编程序在处理源程序时,碰到END时就终止汇编,所以在END之后的内容

30、对汇编程序没有意义;2)、END的标号是可选项,指示程序开始执行的起始地址,即程序要执行的第一条指令。如果多个模块相连,只有主模块的END语句需要使用标号可选项。4画图说明下列语句所分配的存储空间及初始化数据情况。(1)B_VAR DB ABCD, 12, -12, 3 DUP (?, 0, 2 DUP ( 1, 2)(2)W_VAR DW AB,256,-1, 5 DUP (?, 1, 2)5变量名、标号的属性有哪些?答:变量名是存放数据的存储单元的符号的地址。变量有三方面的属性:1)段:变量所处的逻辑段;2)偏移地址:变量的段内地址;3)类型:变量所占的字节数。标号是指令语句的符号地址,代

31、表该指令在内存中的位置。标号也有三方面的属性:1)段:标号所处的逻辑段;2)偏移地址:标号的段内地址;3)类型:指出标号是在本段内引用还是在其他段中引用。6有数据段定义如下:DATA SEGMENT V1 DW ? V2 DB 16 DUP (?) V3 DD ? DSIZE EQU $-V2DATA ENDS变量V1、V2、V3的地址是多少?DSIZE的值是多少? 答:段开始,计数器清零,变量V1的偏移地址为0。为V1分配两字节,计数器加2,故变量V2的偏移地址为2。为V2分配16个字节,计数器加16,故变量V3的偏移地址为18。为V3分配4个字节,计数器加4变为22,DSIZE的值等于表达

32、式$-V2即22-2=20。7试在数据段内定义字节变量B1和字变量W1,它们共享20个存储单元。答:DATA UNION B1DB20DUP (?) W1DW10 DUP(?) DATAENDS8在定义一个字变量时,如果想保证其地址是偶地址,应如何实现?这样做,有何意义?答:可以使用伪指令EVEN,它可以使下一变量或指令的地址成为偶数。这样可以优化存储,保证数据按字边界对齐,这样对字数据的访问速度最快。9指令MOV BX,1是否正确?为什么?如果有错误,应如何修改?答:错误,无法确定BI指向的是字还是字节。应该加上PTR指令进行强制类型说明,如:MOVWORDPTRBI,110简述指令MOV

33、BX, VAR和MOV BX, OFFSET VAR之间的区别(VAR是已定义的字变量)。答:MOVBX,VAR是将变量VAR中的内容传送到寄存器BX中,MOVBX,OFFSEVAR是将变量VAR的偏移地址传送到BX中。11已知数据段有变量定义如下,试写出符合要求的语句或序列。VAR DW AB,256,-1, 5 DUP (?, 1, 2) (1)取VAR的段址到AX中; (2)取VAR中-1到AX中; (3)取VAR中-1的地址到BX; (4)取VAR第4个字节内容到AL;答:(1)MOVAX,OFFSEVAR(2)MOVAX, OFFSEVAR+4(3)MOVAX, OFFSEVAR+4

34、(4)MOVAL, OFFSEVAR+412判断下面各语句的正确性(其中VAR为数据段中定义的字变量)。 (1)XOR BX, SIDI (2)SUBSI, -91 (3)OUT 300H, AL (4)JMPDWORD PTR BX (5)MOVBX, SS:SP (6)TEST AL, 8000H (7)CMP BYTE PTR BX, BYTE PTR SI (8)ANDVAR, OFFSET VAR (9)SUBSI, 1 (10)ADD BX, SS:VAR (11)MOV AX, BX-SI (12)MOV 25, BL (13)SUB CX, $+10 (14)MOV DS, B

35、P (15)MOV AX, BX + VAR答:(1)XORBX,SIDI(2)SUBSI,-91(3)OUT300H,AL(4)JMPDWORDPTRBX(5)MOVBX,SS:SP(6)TESTAL,8000H(7)CMPBYTEPTRBX,BYTEPTRSI(8)ANDVAR,OFFSETVAR(9)SUBSI,1(10)ADDBX,SS:VAR(11)MOVAX,BX-SI(12)MOV25,BL(13)SUBCX,$+10(14)MOVDS,BP (15)MOVAX,BX+VAR13编写一个程序,统计在双字变量DDVAR的内容中二进制位是1的位数,并存入变量COUNT中。答:DATA

36、 SEGMENT X DD 0FFFFFFFH XL EQU WORD PTR X XH EQU WORD PTR X+2 COUNT DW 0 DATA ENDSSTACK SEGMENT STACK DW 100H DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE DS:DATA SS:STACKSTART: MOV AX,DATA MOV DS,AX ;DATA到AX MOV DX,XL MOV BX,8000H MOV CX,16 XLL: CALL COUNT0 ;调用COUNT LOOP XLL MOV DX,XH MOV BX,8000H M

37、OV CX,16XHH: CALL COUNT0 LOOP XHH MOV AX,COUNT MOV BL,10 DIV BL ADD AL,0 ;商在AL ADD AH,0 ;余数AH PUSH AX MOV DL,AL MOV AH,2 INT 21H POP AX MOV DL,AH MOV AH,2 INT 21H MOV AX,4C00H ;返回DOS INT 21HCOUNT0 PROC NEAR ;统计1的个数 MOV AX,DX OR AX,BX ;将其中一位,置1 CMP AX,DX ;和原来比较 JZ DONEK: SHR BX,1 ;右移一位 RETDONE: INC C

38、OUNT ;相等,则COUNT+1JMP K COUNT0 ENDP CODE ENDSEND START14假设有三个字变量a、b和c,编写一个程序,它可判断它们能否构成一个三角形,若能,CF为1,否则,CF为0。15编写一个程序把字符串String两端的空格删除(字符串以0结束)。答:DATA SEGMENTSTR DB ABCDELP ,0N EQU $-DATADATA ENDSSTACK SEGMENT STACKDW 20 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXCYCL

39、E:LEA BX,STRAGAIN:CMP BYTE PTR BX,0JE EXITCMP BYTE PTR BX,20HJNE NEXTDELETE:PUSH BXMOV DL,BX+1MOV BX,DLINC BXCMP BX+1,0JZ NEXTJMP DELETENEXT:POP BXINC BXJMP AGAINEXIT:MOV SI,0CMP BYTE PTR SI,20HJE CYCLELEA BX,STRCOMPARE:CMP BYTE PTR BX,20HJE PRINTINC BXJMP COMPAREPRINT:MOV BX,$LEA DX,STRMOV AH,09HIN

40、T 21HMOV AH,07HINT 21HMOV AX,4C00HINT 21HCODE ENDSEND START16假设从变量Buff开始存放了200个字,编写一个程序统计出其正数、0和负数的个数,并把它们分别存入N1、N2和N3中。答:DATA SEGMENTSAVE DB 3 DUP(?)NUM DW 100 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV CX,100 XOR BX,BX XOR DX,DX LEA SI,NUM SUB SI,2NEXT1:ADD SI

41、,2 CMP SI,0 JNZ NZ INC BL ;存放零的个数 JMP OKNZ: TEST SI,8000H JNZ N INC DH ;存放正数的个数 JMP OKN: INC DL ;存放负数的个数OK: LOOP NEXT1 MOV SAVE,DH ;将结果传送到内存保存 MOV SAVE+1,DL MOV SAVE+2,BL MOV AH,4CH INT 21HCODE ENDS END START17用双重循环将下三角乘法表存入从Result开始的45字节中。18简述在子程序结构中堆栈的作用。答:子程序在调用和返回时,使用堆栈来保存断点和恢复断点。对于段内调用,CALL指令调用

42、子程序时首先保存断点使IP入栈,然后转子程序。RET指令返回时要使IP出栈恢复断点。对于段间调用,保存断点时要使CS和IP分别入栈,恢复断点时使IP和CS出栈。19如何区分RET指令是段内返回还是段间返回?答:汇编程序在处理子程序时,根据PROC后的子程序类型的说明来确定子程序的类型属性,也确定了是将RET助记符翻译为段内返回还是段间返回。20在子程序中如果要使其所用寄存器对调用者是透明的,请举例说明达到其目的的方法。答:在子程序中如果要使其所用的寄存器对调用者是透明的,就是要注意寄存器的保存和恢复,以便当返回调用程序后仍然保持正确的状态继续执行。例如,在子程序开始时,把它要用到的所有寄存器都入栈保存,在返回前再出栈恢复。21子程序参数传递主要有哪些方法?它们各有什么优缺点?答:主要有三种方法:1)通过寄存器传递;2)通过存储器传递;3)通过堆栈传递。通过寄存器传递参数速度快,但参数个数受寄存器数量的限制,适用于参数很少的情况。通过存储器传递参数,可以相互传送较多的参数。通过寄存器

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁