《微机原理与接口技术》参考答案_第1页
《微机原理与接口技术》参考答案_第2页
《微机原理与接口技术》参考答案_第3页
《微机原理与接口技术》参考答案_第4页
《微机原理与接口技术》参考答案_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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 寄存器始终

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

4、=1 ,否则 AF=0 。ZF:零标志。运算结果为零时ZF=1,否则ZF=0。SF:符号标志。它记录运算结果的最高位,即由符号数的符号。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

5、=1 AF=0 ZF=0 SF=1 OF=0 无溢出(2)有符号:ACH 主要标志 CF=1 PF=1 AF=0 ZF=0 SF=1 OF=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'

6、字:12H、1004H、-1 和 0;双字:420H、12345678H 和 0。答:(1)22,'B''b'10 000H02H32H42H62H30H(2)12H1004H-1010000H12H04HFFH00H10001H00H10HFFH00H420H12345678H010001H20H78H00H10002H04H56H00H10003H00H34H00H10004H00H12H00H什么是物理空间?8086CPU的物理地址是多少位?其决定的物理空间有多大?8.(3)答:物理空间是指由编址单元(如字节)大小和地址总线宽度决定的可寻址的存储器地址空间

7、。8086CPU具有20条地址总线,所以它的物理地址是20bit。8086的存储是按照字节存储的,所以其物理空间为220 B=1MB 。9 .什么是逻辑空间? 8086的逻辑空间有何特点?其逻辑地址如何构成?答:采用分段存储管理方式,将物理空间分割,通过段映射构建的由多个独立的逻辑 段构成的存储空间即为逻辑空间。8086使用16位地址在段内寻址,称为段的偏移地址,因此其特点是段的最大长度 216=64KB。在8086中,将16位的段地址和16位的偏移地址合称为逻辑地址,其中段地址舍弃了最低四位的0,故逻辑地址等于段地址乘以10H加偏移地址。10 .简述面向逻辑空间编程比面向物理空间编程的优势。

8、答:可以解除程序设计对实际物理空间的依赖。具体表现在:程序设计时不需要了解存储器的使用情况,操作系统或监控程序会将程序分配在空闲 空间,不会和系统程序或其他程序冲突;第二,程序设计时采用的是逻辑空间的地址,存储管理部件将自动、透明地进行逻辑空间地址到物理空间地址的转换,即逻辑空间到物理空间的映射,所以,不同的空间分配对程序没有影响;第三,逻辑空间是相对“观察者”而言的,即不同的人面对的逻辑空间是独立无关的,所以每个编程者都是在自己的逻辑空间上编程。11 . 8086CPU 是如何实现逻辑空间到物理空间的映射的?答:逻辑空间的段地址指明要访问的存储单元所处的段,偏移地址指明存储单元的段内地址。段

9、地址表示段在物理空间上的起始位置,偏移地址表示要访问的存储单元相对于起 始位置的偏移量。 12. 简述段寄存器的作用。答:为了保证地址转换的效率,访问存储器时,总是由段寄存器提供段址。 8086 在 BIU 中设有 4 个段寄存器(CS、 DS、 SS、 ES) , CPU 可以在某一时刻通过这 4 个段寄存器来访问 4 个不同的段。在程序设计层面,可以通过指定段和段寄存器的关系来标识段,这样 在实际编程时,绝大多数情况下逻辑地址只需要指定偏移地址。 13. 已知当前( CS) =7F00H , (IP) =017CH ,问下条指令的物理地址是什么?答: ( CS) *10H+ ( IP) =

10、7F00H*10H+017CH=7F000H+017CH=7F17CH14. 已知当前( DS) =5C00H , ( ES) =5D10H ,而数据的物理地址是63654H ,若分别使用DS和ES段寄存器访问该数据,问偏移地址分别是多少?答:若使用 DS,贝U ( IP) =63654H- (DS) *10H=63654H-5C000H=7654H 。 若使用 ES,贝 U (IP) =63654H- (ES) *10H=63654H-5D100H=6554H 。 15. 什么是 I/O 端口? 8086CPU 的端口空间是多大?需要使用地址总线的多少位访问端口空 间?答: I/O 端口即输

11、入输出接口,是外部设备和主机交换信息的接口,在它们之间的通信中起到了转换和缓冲数据的作用。 8086 的 I/O 端口空间大小为 216 =64KB 。需要 16 位,8086 使用地址总线的低16 位访问 I/O 端口。16. 简述 Intel 的 32位处理器如何对16 位处理器的寄存器进行扩展,有何好处。答: ( 1)将 16 位通用寄存器扩展16 位形成 32 位通用寄存器。同时还保留了原来的 16位寄存器和8 位寄存器。(2)将指令寄存器IP 扩展 16 位形成 32 为的 EIP 寄存器。( 3)段寄存器仍然是16 位的,但增加了 FS 和 GS 两个段寄存器。(4)将寄存器Fla

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

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

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

15、的操作数 存放在寄存器中,指令的操作数字段是使用的寄存器。寄存器间接寻址方式中,寄存器内存 放的是操作数的地址,而不是操作数本身,即操作数是通过寄存器间接得到的。4 .指出下列各种操作数的寻址方式。MOV AX, 420HMOV BX, SIMOV AX, 90MOV DI+90, AHMOV AL, BP+SI+20答:答案一(默认求源操作数寻址方式)1) MOV AX, 420H2) MOV BX, SI3) MOV AX, 904) MOV DI+90, AH5) MOV AL, BP+SI+20 答案二1) MOV AX, 420H立即寻址寄存器寻址直接寻址寄存器寻址相对基址变址寻址源

16、:立即寻址目:寄存器寻址- 3 -2) MOV BX, SI3) MOV AX, 904) 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) =42

17、0H,试分别计算出下列寻址方式 中源操作数的有效地址。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 指令是双操作数指令,在使用时

18、有一些限制:立即数不能作为目的操作数;CS 不能作为目的操作数;段寄存器不能到段寄存器;立即数不能到段寄存器;内存不能到内存;8 . 8086 系统的堆栈是如何组织的?如何判断堆栈满或空?答: 8086 的堆栈采用存储器方式实现, 8086 将堆栈组织为一个逻辑段,称为堆栈段。堆栈段的段址由寄存器SS 指定,堆栈指针由 SP 寄存器担当。若SP 当前值等于SS 段址的内的最小值,即 SP 为 0 时,堆栈满;若 SP 当前值等于堆栈指定的 SP 初始值时,堆栈空。9 .已知(SS =0FF00H (SP) =00B0H,先执行两条将 8086H和0F20H入栈的PUSH指令, 再执行一条POP

19、 指令。请画出堆栈内容变化过程示意图(请标出存储单元的物理地址) 。答: 执行完两条PUSH后:|0FF00H SS|20H|0FFAC十 SP|0FH|0FFADH|86H|0FFAEH|80H|0FFAFH再执行一条POP后:|0FF00H SS|86H|0FFAEH SP|80H|0FFAFH10 .用一条指令实现将 BX与SI之和传送给CX的功能。答: LEA CX , BX+SI11 .写出下列指令中每条指令的执行结果,并指出标志位CR ZF、OF、SF的变化情况。MOV BX,40ABHADDBL, 09CHMOV AL, 0E5HCBWADDSBBADCSUBBH, BX, AX

20、, BH,答: MOV BX,ADD BL , ;OF=1 , SF=0ALAX20H-940ABH ;将立即数40ABH传给寄存器09CH ;将 9CH 与 ABH 相加,结果BX,对标志位无影响47H 存入 BL , CF=1 , ZF=0,MOV AL , 0E5H;将立即数E5H 传给寄存器AL ,对标志位无影响CBW ;对 AL 进行符号扩展,即 AX 为 FFE5H ,对标志位无影响ADDBH,AL ;将AL中的数即E5H与BH中的数40H相力口,结果 25H存BH,;CF=1, ZF=0, OF=1, SF=0SBBBX,AX ;将8*中的数2547H减去AX中的数FFE5H,再

21、减去标志位;CF=1,即将结果 2561H 存入 BX 中,CF=1, ZF=0, OF=1, SF=0ADCAX,20H 将 AX 中的数 FFE5H加 20H,再力口 CF=1,即得 0006H 存;入 AX, CF=1, ZF=0, 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

22、 中; 16 位乘法的被乘数在 AX 中,指 令给出 16 位被乘数, 32 位结果在 DX:AX 中。 8 位除法的 16 位被除数在 AX 中,指令给出8 位除数, 8 位商在 AL 中, 8 位余数在 AH 种; 16 位除法的 32 位操作数在DX:AX 中,指令给出 16 位操作数, 16 位商在 AX 中, 16 位余数在 DX 中。乘法指令和除法指令都不允许立即数。13. 完成一个计算DL (无符号数)三次方的指令序列。答: MOVAL , DLIMULDLMUL DL14. 按下列要求编写指令序列。清除 DH 中的最低三位而不改变其他位,结果存入 BH 中;把 DI 中的最高

23、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) MOVAND2) OR DI ,3) ORXORBH , F8HBH , DHFFF8HAND AX ,4) MOV DX , BXTESTDX ,TESTDX ,TESTDX ,AX , 000FHAX , 0380H1FFFH0004H;若 ZF=0,0020H;若 Z

24、F=0,0200H;若 ZF=0,2 位为15 位为19 位为15 ) XOR CX , 0824HJEYES 6) TEST DX , 0001H;若 ZF=1 ,贝U第 0 位为 0TESTDX,0002H;若 ZF=1,贝U第2 位为 0TESTDX ,0200H;若 ZF=1,贝U第9 位为 0TESTDX ,2000H;若 ZF=1,贝U第13 位为 0 7) 7) XOR DX , 4812HJE YES15. NOT指令和NEG指令有何不同?编写指令序列将( DX: AX)中的双字算数求反。答: NOT 指令是对操作数的按位求反,称为逻辑求反。而NEG 指令是算数求反。NOT A

25、XNOT DXADDAX , 1ADCDX , 016. 使用移位指令将40 和-49 分别乘2 和除 2 ,请注意选择合适的移位指令。答: MOVAX , 0028H; 将 40 存入 AXSHL AX , 1; ( AX ) *2MOV AX , 0028H;将 40 存入 AXSAR AX , 1; ( AX ) /2MOV AX, FFCFH;将-49 存入 AXSHL AX , 1; ( AX ) *2MOV AX , FFCFH;将-49 存入 AXSAR AX , 1; ( AX ) /217. 分析下面指令序列完成的功能。MOV CL,4SHLDX,CLMOV BL,4HSHL

26、AX,CLSHRBL, CLOR DL, BL答: MOV CL,4;将 4 存入 CLSHLDX,CL;( DX) *16MOV BL, 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. 什么是段间转移?什么是段内转移?

27、它们的实现机制有何不同? 答:根据转移指令和转移指令要转移到的目标位置之间的关系,把转移分为段内转移和段间转移。段内转移中,转移的目标位置在当前代码段内, CS 的内容不变,只改变IP 的内容;段间转移中,转移的目标地址不在本段,此时CS 和 IP 的内容都需要修改。21. 条件转移指令中,所谓的“条件”是什么,如何做到?如何使用?请举例说明。答:所谓的条件就是某个标志位或某几个标志位的状态。单一条件的 5 个标志位ZF 、CF 、 OF、 SF 和 PF ,以及它们的否定。多个标志位的联合还可以构成复合条件。例如:CMP AX , 1 ;执行(AX ) -1 不保存结果JZ Equal;如果

28、结果为零(ZF=1 )则转移到 Equal,Equal:22. 假设AX和BX中的内容是有符号数,CX和DX中的内容是无符号数,试实现:如果(DX) >( CX) ,则转到EXCEED;如果(BX) > ( AX) ,则转到EXCEE;D如果(CX) =0,则转到ZERQ如果(BXQ - (AX)将产生溢出,则转到 OVERFLOW如果(BX)< (AX),则转到 NOTBIG如果(DX) < (CX),则转到 NOTBIG;答:(1) CMPDX , CXJAEXCEED(2) CMPBX , AXJGEXCEED(3) CMPCX , 0JZ ZERO(4) CMP

29、BX , AXJO OVERFLOW(5) CMPBX , AXJLE NOTBIG(6) CMPDX , CXJBE NOTBIG23.已知数据段中保存有 100个字的数组,起始地址为0B00H。编写指令序列实现将数组中的每个字加1。答:LEA SI, 0B00HMOVCX,100L1 : MOVAX ,SIINCAXMOVSI ,AXADDSI, 2LOOPL124 .简述段内调用和段间调用的主要区别。答:段内调用的调用位置和子程序在同一段内,段间调用的调用位置和子程序不在同段内。25 .已知指令CALL SUB供现段内调用子程序 SUB1,请用JMP指令序列实现此调用功能。答: PUSH

30、 IPJMP SUB126 .子程序SUB1的最后一条指令是 RET指令实现段内返回,它能否用JMP指令模拟?答: POP BX ;前提是调用时已经将原来的 IP 值入栈JMP BX27. 如何得到中断60H 的中断服务程序的首地址?答: MOVAX,0MOV ES,AX ; 中断向量表放在内存最低端,段址为 0LDSSI,ES:60H*4;中断向量放在中断向量表“中断号*4 ”位置,占 4 字节,;低字是偏移地址,高字是段址,所以使用LDS 取长指针。28. 编写指令序列完成将中断1CH 指向新的中断服务程序的功能,新的中断服务程序首地址为 0FA00:100H。答:习题 41 简述汇编语言

31、的优缺点及应用场合。答:汇编语言的优点: 1 ) 、相比机器语言便于阅读和理解、书写和编程、调试和维护; 2) 、是计算机系统和逻辑功能的直接描述,便于理解计算机系统; 3) 、汇编语言可以直接控制硬件,更能充分发挥硬件的特性;4) 、汇编语言程序目标代码简短,占用内存少,执行速度快。缺点: 1 ) 、汇编语言是低级语言,面向机器,不适于描述和反映现实问题,编程相对复杂和麻烦; 2 ) 、需要使用者掌握大量计算机相关知识,不利于计算机的推广; 3 ) 、依赖特 定的计算机结构,缺乏通用性和可移植性。应用场合: 1) 、底层的系统软件。底层的系统软件往往需要直接面对计算机系统或直接操作硬件,所以

32、多采用汇编语言; 2) 、高效程序。汇编语言与机器语言一一对应,其程序的时间代价和空间代价都比较小。2 什么是汇编过程?其中,汇编程序起什么作用? 答:汇编过程是指将汇编语言源程序转化为目标程序的过程。汇编程序又称汇编器,它将汇编语言书写的程序翻译成与之等价的机器语言程序。3 伪指令END 有何作用?答: END 伪指令的作用包括两点: 1) 、标识程序结束。汇编程序在处理源程序时,碰到 END 时就终止汇编,所以在 END 之后的内容对汇编程序没有意义;2) 、 END 的标号是可选项,指示程序开始执行的起始地址,即程序要执行的第一条指令。如果多个模块相连,只有主模块的 END 语句需要使用

33、标号可选项。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)类型:变量所占的字节数。标号是指令语句的符号地址,代表该指令在内存中的位置。标号也有三方面的属性: 1)段:标号所处的逻辑段;2 )偏移地址:

34、标号的段内地址;3 )类型:指出标号是在本段内引用还是在其他段中引用。6 有数据段定义如下:DATA SEGMENTV1 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 的值等于表达式$-V2 即 22-2=20。7

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

36、令MOV BX, V AR 和 MOV BX, OFFSET V AR 之间的区别( VAR 是已定义的字变量) 。答: MOV BX, VAR 是将变量 VAR 中的内容传送到寄存器BX 中,MOV BX, OFFSE VAR 是将变量 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

37、 ) MOV AX, OFFSE VAR( 2 ) MOV AX, OFFSE VAR+4( 3 ) MOV AX, OFFSE VAR+4(4) MOV AL, OFFSEVAR+412 判断下面各语句的正确性(其中 VAR 为数据段中定义的字变量)( 1) XOR BX, SIDI( 2) SUB SI, -91( 3) OUT 300H, AL( 4) JMP DWORD PTR BX( 5) MOV BX, SS:SP( 6) TEST AL, 8000H( 7) CMP BYTE PTR BX, BYTE PTR SI( 8) ANDV AR, OFFSET VAR( 9) SUB

38、SI, 1( 10) ADD BX, SS:V AR( 11) MOV AX, BX - SI( 12) MOV 25, BL( 13) SUB CX, $+10( 14) MOV DS, BP( 15) MOV AX, BX + V AR答: ( 1) XORBX,SIDI(2) SUBSI,-91( 3 )OUT300H,AL( 4 ) JMP DWORD PTR BX( 5 )MOVBX,SS:SP( 6 )TESTAL,8000H( 7) CMP BYTE PTR BX,BYTE PTR SI( 8 ) ANDVAR,OFFSETVAR( 9) SUBSI,1( 10) ADD BX,

39、SS:VAR( 11) MOV AX,BX-SI( 12) MOV 25,BL( 13) SUB CX,$+10( 14) MOV DS,BP( 15) MOV AX,BX+V AR13 编写一个程序,统计在双字变量DDVAR 的内容中二进制位是1 的位数,并存入变量COUNT 中。答: DATA SEGMENTX DD 0FFFFFFFHXL EQU WORD PTR XXH EQU WORD PTR X+2COUNT DW 0DATA ENDSSTACK SEGMENT STACKDW 100H DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE DS:D

40、ATA SS:STACKSTART: MOV AX,DATAMOV DS,AX;DATA 到 AXMOV DX,XLMOV BX,8000HMOV CX,16XLL:CALL COUNT0;调用 COUNTLOOP XLLMOV DX,XHMOV BX,8000HMOV CX,16XHH:CALL COUNT0LOOP XHHMOV AX,COUNTMOV BL,10DIV BLADD AL,'0'商在ALADD AH,'0'余数 AHPUSH AXMOV DL,ALMOV AH,2INT 21HPOP AXMOV DL,AHMOV AH,2INT 21HMOV

41、 AX,4C00H ;返回 DOSINT 21HCOUNT0 PROC NEAR ;统计 1 的个数MOV AX,DXOR AX,BX ;将其中一位,置1CMP AX,DX ; 和原来比较JZ DONEK:SHR BX,1 ;右移一位RETDONE: INC COUNT;相等,则COUNT+1JMP KCOUNT0 ENDPCODE ENDSEND START14 .假设有三个字变量a、b和c,编写一个程序,它可判断它们能否构成一个三角形,若能, CF 为 1,否则,CF 为 0 。15 编写一个程序把字符串 String 两端的空格删除(字符串以 0 结束) 。答: DATA SEGMENT

42、STR DB " ABCDELP ",0N EQU $-DA TADATA ENDSSTACK SEGMENT STACKDW 20 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXCYCLE: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:PO

43、P 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,09HINT 21HMOV AH,07HINT 21HMOV AX,4C00HINT 21HCODE ENDSEND START16 假设从变量Buff 开始存放了 200 个字,编写一个程序统计出其正数、 0 和负数的个数,并把它们分别存入 N1 、 N2 和 N3 中。答

44、: DATA SEGMENTSAVE DB 3 DUP(?)NUM DW 100 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DA TAMOV DS,AXMOV CX,100XOR BX,BXXOR DX,DXLEA SI,NUMSUB SI,2NEXT1:ADD SI,2CMP SI,0JNZ NZINC BL ; 存放零的个数JMP OKNZ:TEST SI,8000HJNZ NINC DH ; 存放正数的个数JMP OKN:INC DL ; 存放负数的个数OK:LOOP NEXT1MOV SA VE,DH ;

45、 将结果传送到内存保存MOV SA VE+1,DLMOV SA VE+2,BLMOV AH,4CHINT 21HCODE ENDSEND START17 .用双重循环将下三角乘法表存入从Result开始的45字节中。18 简述在子程序结构中堆栈的作用。答:子程序在调用和返回时,使用堆栈来保存断点和恢复断点。对于段内调用, CALL 指令调用子程序时首先保存断点使IP 入栈,然后转子程序。 RET 指令返回时要使IP 出栈恢复断点。对于段间调用,保存断点时要使CS 和 IP 分别入栈,恢复断点时使IP 和 CS 出栈。19 如何区分RET 指令是段内返回还是段间返回?答:汇编程序在处理子程序时,

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

47、数很少的情况。通过存储器传递参数,可以相互传送较多的参数。通过寄存器和存储器传递参数都具有全局性质,而通过堆栈传递的参数确是局部性的,它们的生命周期随着子程序结束后堆栈的复原而结束,这样在子程序中对参数进行修改对调用者没有任何影响。22 分别编写子程序实现下列功能(所有变量都是字类型)。( 1) ABS( x)=|x|( 2) F(x)=3x2 + 5x- 8( 3) strlen(String) , (求字符串长度,字符串以 0结束)23 .给定一个正数n>1存放在NUM字变量,试编写递归子程序计算FIB(n),结果保存到RESULT 变量中。Fibonacci 数定义如下:答: ST

48、ACK SEGMENT STACK 'STACK'DW 32 DUP(0)STACK ENDSDATA SEGMENTADB 8 DUP(0)OBFDB 3,0,3 DUP(0)DATA ENDSCODE SEGMENTBEGIN PROC FARASSUME SS:STACK,CS:CODE,DS:DATAPUSH DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXMOV DX,OFFSET OBFMOV AH,10INT 21HMOV AL,OBF+1CMP AL,1JA NEX2MOV CL,OBF+2AND CL,0FHJMP NEX1NEX2: MOV A

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论