收藏 分享(赏)

河北工程大学 微机原理复习.doc

上传人:dreamzhangning 文档编号:2289957 上传时间:2018-09-09 格式:DOC 页数:24 大小:258.50KB
下载 相关 举报
河北工程大学  微机原理复习.doc_第1页
第1页 / 共24页
河北工程大学  微机原理复习.doc_第2页
第2页 / 共24页
河北工程大学  微机原理复习.doc_第3页
第3页 / 共24页
河北工程大学  微机原理复习.doc_第4页
第4页 / 共24页
河北工程大学  微机原理复习.doc_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、1微机原理复习第一章1.1 微处理器、微型计算机和微型计算机系统三者之间有什么不同?将运算器与控制器集成在一起,称为微处理器。微处理器是微处理器的核心。微型计算机是由微处理器、存储器、输入/输出接口电路和系统总线构成的裸机系统。微型计算机系统是以微型计算机为主机,配上系统软件和外设之后而构成的计算机系统。三者之间是有很大不同的,微处理器是微型计算机的一个组成部分,而微型计算机又是微型计算机系统的一个组成部分。 1.2 CPU 在内部结构上由哪几部分组成?CPU 应具备什么功能?CPU 在内部结构上由算术逻辑部件(ALU);累加器和通用寄存器组;程序计数(指令指针)、指令寄存器和译码器;时序和控

2、制部件几部分组成。不同 CPU 的性能指标一般不相同,但一般 CPU 应具有下列功能:可以进行算术和逻辑运算;可保存少量数据;能对指令进行译码并执行规定的动作;能和存储器、外设交换数据;提供整个系统所需要的定时和控制;可以响应其它部件发来的中断请求。1.3 累加器和其他通用寄存器相比有何不同?累加器是比较特殊的通用寄存器。它在某些指令执行前,它可以保存一源操作数,还在执行后又用来保存运算结果,另外它一般也用来完成输入/输出指令。而通用寄存器则一般只用来保存参加运算的数据、运算的中间的结果以及用来保存地址。1.3 微型计算机采用总线结构有什么优点?微型计算机的总线结构是一个独特的结构。有了总线结

3、构以后系统中各功能部件之间的相互关系变为了各功能部件面向总线的单一关系。一个部件只要符合总线标准,就可以连接到采用这种总路线标准的系统中,使系统功能得到扩展。 1.4 控制总线传输的信号大致有哪几类?控制总线用来传输控制信号:其中包括 CPU 送往存储器和输入/输出接口电路的控制信号,如读信号、写信号和中断响应信号等;还包括其它部件送到 CPU 的信号,比如,时钟信号、中断请求和准备就绪信号。1.5 数据总线和地址总线在结构上有什么不同之处?如果一个系统的数据和地址合用一套总线或者合用部分总线,那么要靠什么来区分地址和数据?从结构上看数据总线是双向的,而地址总线从结构上看却是单向的。如果一个系

4、统的数据总线和地址总线合用一套总线或者合用部分总线,一般可利用时钟,在总线上采用分时复用技术来区分地址和数据,例如可在总线周期的若干个时钟周期,约定某周期传输地址、在另一周期传输数据。1.6 将下列十进制数转换成 8421BCD 码:1049 =0001 0000 0100 1001 902=1001 0000 0010851.37=1001 0101 0001 . 0011 0111 0.6259=0000. 0110 0010 0101 1001 1.7 将下列各组数用八位的补码相加:(+75)+(-6)+75补=0100 1011 -6 补=1000 0110+75补+ -6 补=100

5、0 0110+1000 0110=0100 0101第二章2.1 8086 CPU 在内部结构上由哪几部分组成?其功能是什么? 【答】8086 的内部结构成两部分:总线接口部件 BIU,负责控制存储器读写。执行部件EU,EU 从指令队列中取出指令并执行。8086 是 16 位微处理器,有 16 根数据线、20 根地址线,内部寄存器、运算部件以及内部操作都是按 16 位设计的。2.2 8086 的总线接口部件有那几部分组成? 【答】8086 的总线接口部件主要由下面几部分组成:4 个段寄存器 CS/DS/ES/SS, 一个 16位的指令指针寄存器 IP, 一个 20 位地址加法器, 6 字节的指

6、令队列,内部暂存器以及输入输出电路组成.2.3 8086 的执行部件有什么功能?由那几部分组成?【答】8086 的执行部件主要由下面几部分组成:(1)四个 16 位通用寄存器AX、BX、CX、DX, 通用四个 16 位专用寄存器,包括二个指针寄存器 SP、BP, 二个变址寄存器 SI、DI, 算术逻辑单元 ALU,标志寄存器。22.4 8086CPU 状态标志和控制标志又何不同 ?程序中是怎样利用这两类标志的 ? 8086 的状态标志和控制标志分别有哪些? 【答】标志分两类:状态标志(6 位):反映刚刚完成的操作结果情况。控制标志(3 位):在某些指令操作中起控制作用。2.5 8086/808

7、8 和传统的计算机相比在执行指令方面有什么不同?这样的设计思想有什么优点? 8086CPU 执行转移指令时,指令队列寄存器内容如何变化?【答】传统的计算机一般按照取指令、指令译码/执行指令的步骤工作。在 8086/8088 中,指令的提取与执行分别由总线接口部件 BIU 与执行部件 EU 完成,8086/8088 可以在取指令同时又可以执行指令,这种并行工作方式有力的提高了 CPU 的工作效率。2.6 将两数相加,即 0100 1100 加 0110 0101,CF、PF、AF、ZF、SF、OF 各为何值?【答】0100 1100+0110 0101=10110001CF=0,PF=1,AF=

8、1,ZF=0,SF=1,OF=12.7 存储器的逻辑地址由哪几部分组成?存储器的物理地址是怎样形成的?一个具有 20位地址线的 CPU,其最大物理地址为多少?【答】存储器的逻辑地址由段地址与段内偏移地址组成。存储器的物理地址:将 16 位段地址左移 4 位后加上 16 位段内偏移地址,形成 20 位物理地址。一个具有 20 位地址线的 CPU,其最大物理地址为 =1MB。2.8 现有 6 个字节的数据分别为 11H,22H,33H,44H,55H,66H,已知它们在存储器中的物理地址为 400A5H400AAH若当前(DS)= 4002H,请说明它们的偏移地址值。如果要从存储器中读出这些数据,

9、需要访问几次存储器,各读出哪些数据?【答】由于:物理地址=400A5H=段地址*16+偏移地址=40020H+偏移地址偏移地址=400A5-40020=85H从奇地址 400A5H 中读出:11H;从偶地址 400A6H 读出一个字:22H,33H;从偶地址 400A8H 读出一个字:44H,55H;从偶地址 400AAH 中读出:66H。共读 4 次。2.9 已知当前数据段中存有如下图所示的数据,现要求将最后两个字节改成 ODH,OAH,请说明需给出的段基值和偏移地址值,并说明其写入过程。【答】数据段段地址=150AH,偏移地址=0004H。CPU 的总线接口部件根据数据段寄存器的内容 15

10、0AH,左移 4 位,在加上偏移地址 0004H,形成 20 位物理地址 150A4H,由总线接口送出,选中物理存储单元 150A4H、150A5H,数据 0DH 通过数据总线送入 150A4H,数据 0AH 通过数据总线送入 150A4H。 2.10 在 8088/8086 中,逻辑地址 FFFF0001, 00A237F 和 B800173F 的物理地址分别是多少?2.11 在 8088/8086 中,从物理地址 388H 开始顺序存放下列三个双字节的数据,651AH, D761H 和 007BH,请问物理地址 388H, 389H, 38AH, 38BH, 38CH 和 38DH 6 个

11、单元中分别是什么数据?2.12 8086/8088 内部有哪些通用寄存器? 2.13 8086/8088 内部有几个段寄存器,阐述各段寄存器的用途?2.14 8086CPU 的形成三大总线时,为什么要对部分地址线进行锁存?用什么信号控制锁存?14800150A1150A2150A3150A4150A5数据段首地址3【答】 为了确保 CPU 对存储器和 I/O 端口的正常读/写操作,要求地址和数据同时出现在地址总线和数据总线上。而在 8086CPU 中 AD0-AD15 总线是地址/数据复用的,因此需在总线周期的前一部分传送出地址信息,并存于锁存器中,而用后一部分周期传送数据。8086CPU 中

12、是通过 CPU 送出的 ALE 高电平信号来控制锁存的。 2.15 段寄存器 CS=1200H,指令指针寄存器 IP=4000H,此时,指令的物理地址为多少?指向这一物理地址的 CS 值和 IP 值是唯一的吗?【答】 此时,指令的物理地址为 16000H;这一物理地址的 CS 值和 IP 值不是唯一的,例如:CS=1000H,IP=6000H。 习题三 8086 指令系统与参考答案主要内容: 8086 指令系统。主要介绍 8086 的基本数据类型、寻址方式和指令系统,重点掌握 8086 指令系统的寻址方式、堆栈操作指令、算术运算指令及其对标志位的影响,串操作指令,控制传送指令。3.1 下面这些

13、指令哪些是正确的?哪些是错误的?如是错误的,请说明原因。XCHG CS,AX ( )MOV BX,1000 ()PUSH CS ()POP CS ( )IN BX,DX ()3.2 已知(DS) = 091DH, ( SS)= IE4AH, (AX)= 1234H, (BX)= 0024H, (CX)= 5678H,(BP)= 0024H, (SI)= 0012H, (DI)= 0032H, 09226 = 00F6H, 09228=1E40H,lEAF6=091DH,试求单独执行下列指令后的结果?(l) MOV CL ,20H BXSI; (CL )= F6H(2) MOV BPDI,CX;

14、 1E4F6H= 78H(3) LEA BX ,20HBXSI; (BX)=0056H MOV AX ,2BX; (AX)=1E40H(4) LDS SI ,BXDI; (SI)= 00F6HMOV SI ,BX; SI= 0024H(5) XCHG CX,32HBX; (CX)= 00F6HXCHG 20BXSI ,AX ; (AX )= 00F6H, 09226H= 1234H3.3 8086 CPU 执行如下指令后MOV AL,01100100BSUB AL,58H ;(AL)=0CH,AF=1,CF=0DAS ;(AL)=06 ,AF=1,CF=0首先用 TD 调试验证上面的结果;自己

15、定义两个数据,重新验证,写出结果。3.4 分别用一条语句实现下述指明的功能(1)栈顶内容弹出送字变量 DI。 ( POP DI )(2)双字变量 AYD 存放的地址指针送 ES 和 SI。 ( LES SI ,AYD )(3)不允许中断即关中断。 ( CLI )(4)子程序返回调用程序。 ( RET )(5)AX 的内容加 1,要求不影响 CF。 ( INC AX )(6)BX 的内容加 1,要求影响所有标志位。 ( ADD BX, 1 )(7)若操作结果为零转向标号 GOON。 ( JZ GOON )3.5 80868088 用什么途径来更新 CS 和 IP 的值?控制转移指令:对于 CAL

16、L、JMP 指令,寻找的目的不是操作数地址而是程序存储器的地址,因此这类指令可以改变 CS 和 IP 中的值,即改变程序走向。 中断指令:对于 INT 指令,当 CPU 响应一次中断,也要把 IP 和 CS 保存入栈,然后改变其值。 3.6 字节扩展指令和字扩展指令用在什么场合?举例说明。需要对带符号数字节扩展为字时,要预先执行 CBW 指令。需要对带符号数字扩展为双字时,要预先执行 CWD。4例:求-503/267=?,将商存 1000H 单元.MOV AX,-503MOV BX,267CWDIDIVMOV 1000H,AXHLT3.7 设 DS=2100H,SS=5200H,BX=1400

17、H ,BP=6200H,说明下面两条指令所进行的具体操作:MOV BYTE PTR BP, 2000MOV WORD PTR BX, 20003.8 以下是格雷码的编码表00000 ,10001 ,20011, 30010, 4011050111 ,60101, 70100, 81100, 91101请用换码指令和其他指令设计一个程序段,实现格雷码往 ASCII 的转换。格雷码 ASCII 码0000 300001 310010 330011 320100 370101 360110 340111 351000 01001 01010 01011 01100 381101 39TABLE SE

18、GMENTTAB_DA DB 30H,31H,33H,32H,37H,36H,34H,35H,0,0DB 0,0,38H,39HTABLE ENDSCODE SEGMENTASSUME CS:CODE,DS:TABLESTART: MOV AX,TABLEMOV DS,AXMOV BX,OFFSET TAB_DAMOV AL,00000101BXLATCODE ENDSENDSTART3.9 设当前 SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶的地址为多少?当执行 PUSH BX 指令后,栈顶地址和栈顶 2 个字节的内容分别是什么?当前栈顶指针(SP)=2FF00H ,物

19、理地址20100H+FE00H=2FF00H 当执行 PUSH BX 指令后,栈顶指针(SP)=FE00-2=FDFEH,栈顶物理地址2FDFEH,栈顶 2 个字节的内容分别 57H,34H。3.10 HLT 指令用在什么场合?如 CPU 在执行 HLT 指令时遇到硬件中断并返回后,以下应执行哪条指令?HLT 用在使 CPU 处于暂停状态而等待硬件中断的场合。5在执行 HLT 指令遇到硬件中断并返回后将执行 HLT 后面的一条指令。3.11 为什么用増量指令或减量指令设计程序时,在这类指令后面不用进位标志作为判断依据?増量指令或减量指令不影响进位标志 CF。3.12 用普通运算指令执行 BCD

20、 码运算时,为什么要进行十进制调整?具体讲,在进行 BCD 码的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整指令?在 BCD 码中,只允许 09 这 10 个数字出现,但有时候的运算结果会超过此范围,因此要进行十进制调整。进行加、减法或乘法运算时,调整指令必须紧跟在算术指令后面,在进行除法运算时,调整指令放在除法指令之前。3.13 中断指令执行时,堆栈的内容有什么变化?中断处理子程序的人口地址是怎样得到的?中断指令执行时,堆栈内容变化如下:标志寄存器被推入堆栈,且 SP 减 2,然后 CPU将主程序的下一条指令地址即断点地址的段值和偏移量推入堆栈,且 SP 减 4。某中断处理子程序

21、的入口地址即中断向量,由该中断类型号的 4 倍为内存地址,在该地址处的 4 个字节内容即该中断向量。3.14 中断返回指令 IRET 和普通子程序返回指令 RET 在执行时,具体操作内容什么不同?IRET 须弹出堆栈中标志寄存器的值,而 RET 则不需要。3.15 将存放在 0A00H 单元和 0A02H 单元的两个无符号数相乘 ,结果存放在地址为 0A04H 开始的单元中。 MOV AL,0A00HMOV BL,0A02HMUL BLMOV 0A04,AX3.16 编程序将 AX 中数,最高位保持不变,其余全部左移 4 位。MOV BX, AXAND BX , 8000HMOV CL, 4S

22、HL AX, CLAND AX,7FFFHOR AX, BX3.17 将 0400H 单元中的数,低 4 位置零,高 4 位保持不变。MOV AL, 0400HAND AL, 0F0HMOV 0400H, AL3.18 将 BX 中的数,对高位字节求反,低位字节保持不变。NOT BH 3.19 检测 Bx 中第 13 位(D13),为 0 时,把 AL 置 0,为 1 时,把 AL 置 1。TEST BX,0010 0000 0000 0000BJZ ZEROMOV AL,01HHLTZERO: MOV AL,0HLT3.20 利用字串操作指令,将 1000H10FFH 单元全部清零。CLDM

23、OV DI,1000HMOV CX,100HMOV AL,0REP STOSB3.21 从 1000H 开始,存放有 200 个字节,要查出字符#(ASCII 码为 23H), 把存放第一个#的单元地址送入 BX 中。CLDMOV DI,1000HMOV CX,200MOV DX,CXMOV AL,23HREPNZ SCASBJZ FIND6JMP NOFOUNDFOUND: DEC DIMOV BX,DINOFOUND: HLT3.22 编程计算(X+Y)*10)+Z)/X,X、Y、Z 都是 16 位无符号数,结果存在 RESULT 开始的单元.。MOV AX,XADD AX,YMOV BX

24、,0AHMUL BXADD AX,ZADC DX,0HMOV BX,XDIV BXMOV RESULT,AXMOV RESULT+2,DXHLT3.23 用简单指令编程求-3/2=?,将商存 DL,余数存 DH 单元。用 TD 调试后,写出 DL,DH 的内容。MOV AL,-3CBWMOV BL,2IDIV BLMOV DL,AL MOV DH,AHHLT习题四 汇编语言程序设计主要内容:汇编语言程序设计。主要介绍汇编语言程序的设计方法与编程原理,重点掌握算术运算程序、字符串处理程序、码制转换程序、子程序设计程序、常用 DOS 和 BIOS 功能调用程序、汇编语言常用伪指令。4.1 分析执行

25、下列指令序列后的结果: 1) MOV AX,1234H MOV BX,00FFH AND AX,BX【答】(AX)=0034H2) MOV AL,01010101B AND AL,00011111B ;(AL)=00010101B OR AL,11000000B ;(AL)=11010101B XOR AL,00001111B ;(AL)=11011010B NOT AL【答】(AL)=00100101B3) MOV DL,05H MOV AX,0A00H MOV DS,AX MOV SI,0H MOV CX,0FH AGAIN: INC SI CMP SI,DL LOOPNE AGAIN H

26、LT 本程序实现了什么功能?【答】在以 0A001H 开始的 15 个单元中查找 05H。4) MOV AX,DSEGADDR MOV DS, AX MOV ES,AX MOV SI, OFFSET B1ADDR 7MOV DI,OFFSET B2ADDR MOV CX,N CLD REP MOVSB HLT 本程序实现了什么功能?【答】 将 B1ADDR 中 N 个字节数据传送到 B2ADDR 开始的 15 个存储单元 。 5) MOV AX, 0H MOV DS,AX MOV ES, AX MOV AL,05H MOV DI,0A000H MOV CX,0FH CLD AGAIN: SCA

27、SBLOOPNE AGAIN HLT本程序实现了什么功能?【答】从地址 0A000H 开始的 15 个单元中查找字节型数据 05H,用条件循环 LOOPNZ,控制数据 05H 的查找。4.2 阅读程序:1). CLD LEA DI,0100H MOV CX, 0080H XOR AX, AX REP STOSW 本程序实现了什么功能?【答】将 DS 中起始地址为 0100H 的 128 个字节单元清零。2). MOV AL, 08H SAL AL,01H ;(AL)=00010000H MOV BL, AL MOV CL ,02H SAL AL,CL ;(AL)=01000000H ADD A

28、L,BL ;(AL)=01010000H 本程序实现了什么功能? 【答】 将 AL 中的内容乘以 10。4.3 试分析下列程序完成什么功能? MOV DX,3F08HMOV AH,0A2HMOV CL,4 SHL DX,CL ;(DX)=F080H MOV BL,AHSHL BL,CL ;(BL)=20H SHR BL,CL ;(BL)=02H OR DL,BL ;(DL)=82H 【答】将 DX 中的低 4 位数据 8H 分离出来,将 AH 中的低 4 位数据 2H 分离出来,合并为 82H存放在 DL。4.4 已知程序段如下: MOV AX,1234H MOV CL,4 ROL AX,CL

29、DEC AXMOV CX,4MUL CX 试问:(1)每条指令执行后,AX 寄存器的内容是什么?(2)每条指令执行后,CF ,SF及 ZF 的值分别是什么?(3)程序运行结束时,AX 及 DX 寄存器的值为多少? 【答】 MOV AX,1234H ; (AX)=1234H, CF=SF=ZF=0 MOV CL,4 8ROL AX,CL ; (AX)=2341H ,CF=1,SF=ZF=0 DEC AX ; (AX)=2340H, CF=1,SF=ZF=0 MOV CX,4 ;MUL CX ;(AX)= 8000H ,CF=ZF=0,SF=1,DX=04.5 试分析下列程序段: ADD AX,B

30、X JNC L2 SUB AX,BX JNC L3 JMP SHORTL5 如果 AX、BX 的内容给定如下: AX BX (1)14C6H 80DCH (程序转向 L2)(2)B568H 54B7H (程序转向 SHORTL5 )问该程序在上述情况下执行后,程序转向何处? 【答】 (1) 程序转向 L2。(2) 程序转向 SHORTL5。4.6 以下为某个数据段,试问各个变量分别占多少字节,该数据段共占多少字节? DATA SEGMENT VAR1 DW 9 ;2 字节VAR2 DD 10 DUP(?) ,2 ;44 字节VAR3 DB 2 DUP(?,10 DUP( ?) ;22 字节VA

31、R4 DB HOW ARE YOU ;11 字节DATA ENDS【答】该数据段共占 79 字节。4.7 下列语句在存储器中分别为变量分配多少字节空间?并画出存储空间的分配图。 VAR1 DB 10,2 ;2 字节VAR2 DW 5DUP(?),0 ;12 字节VAR3 DB HOW ARE YOU?,$ ;13 字节VAR4 DD -1,1,0 ;2 字节Var1 Var2 Var3 Var410 ? ? FFH2 ? U 00H? O 00H? Y 00H? 01H? E 00H? R 00H? A 00H? 00H? W 00H0 O 00H0 H 00H$ 4.8 编写一段程序,比较两

32、个 5 字节的字符串 OLDS 和 NEWS,若相同,在 RESULT 置 0,否则置 0FFH。【答】 参考程序:OLDS DB 1,2,3,4,5NEWS DB 1,2,3,4,5RESULT DB ?MOV SI,OFFSET OLDSMOV DI,OFFSET NEWSMOV CX,10CLD REP CMPSB JNZ NOEQU ;串不相等转9MOV AL,0JMP OUTPT NOEQU: MOV AL,0FFH OUTPT: MOV RESULT,ALSTOP: JMP STOP4.9 编程求和 Y=A1 + A2 + . + A100 。其中 Ai 为字节变量。【答】 参考程

33、序:DATA SEGMENTTABLE DW 12,3,45,YAL DW ?YAH DW ?DATA ENDS .MIAN PROC FARPUSH DSMOV AX, 0PUSH AXMOV AX, DATAMOV DS, AXMOV DX,0XOR AX, AX ;清 AXMOV BX, OFFSET TABLEMOV CX, 4CLCLP: ADD AX, BX ;求和JNC DONINC DXCLC DON: INC BXINC BX ;指向下一个数LOOP LP ;未加完,继续MOV YAL,AX ;存和MOV YAH,DXMAIN ENDPCODE ENDSEND START4.

34、10 内存中以 FIRST 和 SECOND 开始的单元中分别存放着两个 16 位组合的十进制(BCD 码)数,低位在前。编程序求这两个数的组合的十进制和,并存到以 THIRD 开始的单元。【答】 参考程序:1325+9839=?DATA SEGMENTFIRST DB 05H,02H,03H,01H ;SECOND DB 09H,03H, 08H,09H;THIRD DB 20 DUP (?)DATA ENDSSTACK SEGMENTST1 DB 100 DUP (SA)TOP1 EQU ST1 LENGTH ST1STACK ENDSCODE SEGMENTASUMME CS:CODE,

35、DS:DATA,SS:STACKMAIN PROC FARSTART: MOV AX, DAT ;初始化数据段MOV DS, AXMOV AX, STACK ;初始化堆栈段MOV SS, AXMOV AX, TOP1MOV SP, AXMOV CX, 4 ;计算 4 次10MOV BX, OFFSET DAT1 ;取数据地址MOV SI , OFFSET DAT2 ;取数据地址MOV DI , OFFSET SUM ;取结果地址MOV AH, 00H ;将暂存标志的 AH 清 0DON1: MOV AL, BX ;取第一个数 SAHF ;将 AH 中的标志送标志寄存器ADC AL, DI ;与

36、第二个数带进位加AAA ;十进制校正LAHF ;将标志寄存器内容送 AHOR AL, 30H ;计算值拼成 ASCII 码MOV DI, AL ;存结果的 ASCII 码INC BX ;指向第一个数的下一位INC SI ;指向第二个数的下一位INC DI ;指向结果单元的下一位LOOP DON1 ;未计算完,继续AND AH, 01H ;将最高位的进位标志送 AHOR AH, 30H ;最高位的进位位拼成 ASCII 码MOV DI, AH ;存结果的最高位MOV AH, 02H ;调用 DOS 的 02H 功能显示MOV CX, 05H ;显示数据的位数DON2: MOV DL,DI ;显示

37、数据送 DLINT 21H ;显示DEC DI ;显示数据所在存储单元加一LOOP DON2 ;未显示完,继续MOV AH, 4CH ;返回 DOSINT 21H RET MAIN ENDP CODE ENDS END START 4.11 试编程序,统计由 40000H 开始的 16 个单元中所存放的字符“A “的个数,并将结果存放在 DX 中。【答】 参考程序DATA SEGMENT DATA1 DB DFASFAAAFDFAAFFFACOUNT EQU $-DATA1DATA ENDSSTACK SEGMENTSTA DB 100 DUP (?)TOP EQU LENGTH STA ST

38、ACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKBEGIN: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV CX,COUNTMOV DX,0LEA SI,DATA1MOV BL,A NEXT : CMP SI,BLJNZ OTHERINC DXOTHER: INC SILOOP NEXT11CODE ENDSEND BEGIN4.12 统计数据块中正数与负数的个数,并将正数与负数分别送到两个缓冲区。【答】 参考程序:BLOCK DB -1,-3,5,6,-2,

39、0,20,10 PLUS_D DB 8 DUP(?) ;正数缓冲区MINUS_D DB 8 DUP(?) ;负数缓冲区PLUS DB 0MINUS DB 0MOV SI,OFFSET BLOCKMOV DI,OFFSET PLUS_DMOV BX,OFFSET MINUS_DMOV CX, 8 ;数据个数送 CXGOON: LODSB ;AL SITEST AX, 80HJNZ JMIUS ;为负数,转INC PLUS ;正数个数加一STOSB ;DI AL, 传正数JMP AGAINJMIUS: INC MINUS ;负数个数加一XCHG BX, DISTOSB ;送负数到缓冲区XCHG B

40、X, DIAGAIN: DEC CXJNZ GOON4.13 编写一个子程序将 AX 中的十六进制数,转换成 ASCII 码, 存于 ADR 开始的四个单元中。提示:1)、AX 中的数从左到右,转换成 ASCII 码,用循环左移 ROL 和 AND 指令,把提出的一个十六进制数置 BL 中;2)、0 9 的 ASCII 码: 30 39H,A F 的 ASCII 码:41H 46H。( 先把每个数加 30H,判断是否为数字 0 9?若是 A F,再加 07H,得字母的 ASCII 码。)【答】 参考程序:DATA SEGMENTADR DB 4 DUP(?)DATA ENDSCODE SEGM

41、ENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART: MOV AX,7EC3H ;假设 ax 中存放 7ec3hLEA SI,ADRMOV DL,4AGAIN:MOV BX,AXAND BX,000FHADD BL,30HCMP BL,9JG ADUSTJMP STOREADUST: ADD BL ,07HSTORE: MOV SI,BLINC SIMOV CL,4ROL AX,CLDEC DLJNZ AGAINMAIN ENDPCODE ENDS12ENDSTART4.14 编写一个子程序将 AX 中的 2 进制数,转换成 10 进制 ASCII 码, 存

42、于 ADR 开始的五个单元中。【答】参考程序:BIN EQU 5555H;假设二进制数为 5555HDATA SEGMENTADR DB 4 DUP(?)DATA ENDSSTACK SEGMENTSTA DB 100 DUP (?)TOP EQU LENGTH STA STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV AX,BINLEA BX,ADRMOV CX,10000DCALL BINTOD

43、ECMOV CX,1000DCALL BINTODECMOV CX,100DCALL BINTODEC MOV CX,10DCALL BINTODECMOV CX,01DCALL BINTODECMOV AX,04CH ;返回 DOSINT 21HMAIN ENDP;十进制转二进制,完成一位运算,十进制存于 ax 中,结果存于 bx 所指向的地址中BINTODEC PROC NEARMOV DX,0DIV CXADD AL,30HMOV BX,ALMOV AX,DXINC BXRETBINTODEC ENDPCODE ENDSEND START 4.15 编写一个子程序,对 AL 中的数据进行

44、偶校验,并将经过校验的结果放回 AL 中。【答】参考程序:JIAOYAN PROC FARMOV AL,1001110BOR AL, ALJNP NEXTMOV AL,0JMP DONENEXT: MOV AL,1DONE: MOV AH,04CHINT 21H13JIAOYAN ENDP4.16 从 2000H 单元开始的区域,存放 100 个字节的字符串,其中有几个$符号(ASCII 码为 24),找出第一个$符号,送 AL 中,地址送 BX。【答】参考程序:SEARCH PROC FARMOV DI,2000HMOV CX,100MOV AL,24HCLDREPNZ SCASB JNZ

45、STOPDEC DIMOV BX,DIMOV AL,DISTOP: RETSEARCH ENDP4.17 用串操作指令实现:先将 100 个数从 2170H 单元处搬到 1000H 单元处,然后从中检索等于AL 中字符的单元,并将此单元换成空格字符。【答】参考程序:MOV AL,24HMOV SI,2170HMOV DI,1000HMOV CX,100HCLDDO: REP MOVSBMOV DI,1000HMOV CX,100HCLDREPNZ SCASBDEC DIMOV DI,20HINC DICMP CX,0JNZ DOHLT4.18 从 10 个元素中寻找一个最大的值,并放到 AL

46、中,假设这 10 个元素放在 DATA1 开始的单元中。【答】参考程序:DATA SEGMENT DATA1 DB 0,1,2,3,4,5,6,7,8,9 ;DATA ENDSSTACK SEGMENTSTA DB 20 DUP (?)TOP EQU LENGTH STASTACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXMOV CX,10MOV AL,0LEA BX,DATA1AGAIN: CMP AL,B

47、XJGE NEXT ;大于等于转移14MOV AL,BXNEXT : INC BXLOOP AGAINMOV AH,4CHINT 21HCODE ENDSEND START4.19 排序程序设计: 把表中元素按值的大小升序排列。要求显示排序前和排序后的数据。【答】参考程序:DATA SEGMENT TABDB 8095554 N=$-TAB OK DB 0DH,0AH,OK!$ DATA ENDSSTACK SEGMENT STA DB 20 DUP(?)TOP EQULENGTH STASTAC ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKS

48、TAR: MOV AX,DATAMOV DS,AX ;初始化数据段MOV AX,STACKMOV SS,AXMOV AX,TOPMOV SP,AXCALL ARRAYDO: MOV AH,4CHINT 21H ;返回 DOSARRAY PROC NEARPUSH AXPUSH BXPUSH CXPUSH DXMOV DL,N-1 ;置外循环次数MOV DH,1 ;设有交换标志XOR BX, BX UPPER: OR DH,DH ;JZ DISP ;无交换,已排好序,退出 MOV DH,0 ;无交换MOV CX,N-1 SUB CX,BX ;CX=CX-I 内循环次数 MOV SI,0 ;指向表首INNER: MOV AL,TABSI ;字符送 ALINC SI ;指向下个字符CMP AL,TABSI ;比较表中相邻字符JBE DON ;小于

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

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报