微机原理与接口技术第三版吴宁,冯博琴试题库(含答案)

更新时间:2023-09-18 17:38:01 阅读量: 幼儿教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1. 假定(BX)=637DH,(SI)=2A9BH,位移量D=3237H,试确定在以下各种寻址方式下的有效地址是什么? (1)立即寻址 (2)直接寻址

(3)使用BX的寄存器寻址 (4)使用BX的间接寻址 (5)使用BX的寄存器相对寻址 (6)基址变址寻址 (7)相对基址变址寻址

答:(1)立即数寻址的有效地址是当前IP的内容;

(2)直接寻址,若使用位移量D=3237H进行,则有效地址为3237H; (3)使用BX的寄存器寻址时,操作数在BX寄存器中,因此无有效地址; (4)使用BX的间接寻址时,有效地址在BX寄存器中,即有效地址=637DH; (5)使用BX的寄存器相对寻址的有效地址=(BX)+D=637DH+3237H=95B4H; (6)基址变址寻址的有效地址=(BX)+(SI)=637DH+2A9BH=8E18H; (7)相对基址变址寻址的有效地址=(BX)+(SI)+D=C050H;

2. 写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。要求使用以下几种寻址方式:

(1)寄存器间接寻址 (2)寄存器相对寻址 (3)基址变址寻址

答:(1)使用寄存器间接寻址,把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令为:

MOV BX,BLOCK ADD BX,12 MOV DX,[BX]

(2)使用寄存器相对寻址,把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令为:

MOV BX,BLOCK MOV DX,[BX+12]

(3)使用基址变址寻址,把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令为: MOV BX,BLOCK MOV SI,12 MOV DX,[BX+SI]

3. 现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=B7H,(21203H)=65H,试说明下列各条指令执行完后AX寄存器的内容。 (1)MOV AX,1200H (2)MOV AX,BX (3)MOV AX,[1200H] (4)MOV AX,[BX] (5)MOV AX,[BX+1100] (6)MOV AX,[BX+SI] (7)MOV AX,[BX+SI+1100]

答:(1)指令MOV AX,1200H执行完后AX寄存器的内容为1200H; (2)指令MOV AX,BX执行完后AX寄存器的内容为0100H;

(3)指令MOV AX,[1200H]是将从物理地址=(DS)*10H+1200H=21200H开始的两个单元内容送AX,执行完后AX寄存器的内容为4C2AH;

(4)指令MOV AX,[BX]是将从物理地址=(DS)*10H+(BX)=20100H开始的两个单元内容送AX,故执行完后AX寄存器的内容为3412H;

(5)指令MOV AX,[BX+1100]是将从物理地址=(DS)*10H+(BX)+1100H=21200H开始的两个单元内容送AX,故执行完后AX寄存器的内容为4C2AH;

(6)指令MOV AX,[BX+SI]是将从物理地址=(DS)*10H+(BX)+(SI)=20102H开始的两个单元内容送AX,故执行完后AX寄存器的内容为7856H;

(7)指令MOV AX,[BX+SI+1100]是将从物理地址=(DS)*10H+(BX)+(SI)+1100H=21202H开始的两个单元内容送AX,故执行完后AX寄存器的内容为65B7H;

4.假设已知(DS)=2900H,(ES)=2100H,(SS)=1500H,(SI)=00A0H,(BX)= 0100H,(BP)=0010H,数据段中变量名VAL的偏移地址值为0050H,试指出下列源操作数字段的寻址方式是什么?其物理地址值是多少?

(1) MOV AX,0ABH (2) MOV AX,BX (3) MOV AX,[100H] (4) MOV AX,VAL (5) MOV AX,[BX] (6) MOV AX,ES:[BX] (7) MOV AX,[BP] (8) MOV AX,[SI] (9) MOV AX,[BX+10] (10) MOV AX,VAL[BX] (11) MOV AX,[BX][SI] (12) MOV AX,[BP][SI]

答:(1)在指令 MOV AX,0ABH 中,源操作数字段的寻址方式是立即数寻址,其物理地址值=(CS)*10H+(IP);

(2)在指令 MOV AX,BX 中,源操作数字段的寻址方式是寄存器寻址,操作数在BX中,无物理地址;

(3)在指令 MOV AX,[100H] 中,源操作数字段的寻址方式是直接寻址,其物理地址值=(DS)*10H+100 =29000H+100H=29100;

(4)在指令 MOV AX,VAL 中,源操作数字段的寻址方式是直接寻址,其物理地址值=(DS)*10H+50H =29000H+50H=29050H;

(5)在指令 MOV AX,[BX] 中,源操作数字段的寻址方式是寄存器间接寻址,其物理地址值=(DS)*10H +(BX)=29000H+100H=29100H;

(6)在指令 MOV AX,ES:[BX] 中,源操作数字段的寻址方式是寄存器间接寻址,其物理地址值=(ES)*10H+(BX)=21000H+100H=21100H;

(7)在指令 MOV AX,[BP] 中,源操作数字段的寻址方式是寄存器间接寻址,其物理地址值=(SS)*10H +(BP)=15000H+10H=15010H;

(8)在指令 MOV AX,[SI] 中,源操作数字段的寻址方式是寄存器间接寻址,其物理地址值=(DS)*10H +(SI)=29000H+0A0H=290A0H;

(9)在指令 MOV AX,[BX+10] 中,源操作数字段的寻址方式是寄存器相对寻址,其物理地址值=(DS)*10H+(BX)+0AH= 29000H+100H+0AH =2910AH;

(10)在指令 MOV AX,VAL[BX] 中,源操作数字段的寻址方式是寄存器相对寻址,其物理地址值=(DS)*10H+(BX)+50H= 29000H+100H+50H= 29150H;

(11)在指令 MOV AX,[BX][SI] 中,源操作数字段的寻址方式是基址变址寻址,其物理地址值=(DS)*10H+(BX)+(SI) =29000H+100H+0A0H =291A0H;

(12)在指令 MOV AX,[BP][SI] 中,源操作数字段的寻址方式是基址变址寻址,其物理地址值=(SS)*10H+(BP)+(SI)=15000H+10H+0A0H =150B0H 5.分别指出下列指令中的源操作数和目的操作数的寻址方式。 (1)MOV SI,200 (2)MOV CX,DATA[SI] (3)ADD AX,[BX+DI] (4)AND AX,BX (5)MOV [SI],AX (6)PUSHF

答:(1)目的操作数字段的寻址方式是寄存器寻址,源操作数字段的寻址方式是立即数寻址;

(2)目的操作数的寻址方式是寄存器寻址,源操作数的寻址方式是寄存器相对寻址; (3)目的操作数的寻址方式是寄存器寻址,源操作数的寻址方式是基址变址寻址; (4)目的操作数的寻址方式是寄存器寻址,源操作数的寻址方式也是寄存器寻址; (5)目的操作数的寻址方式是寄存器间接寻址,源操作数的寻址方式是寄存器寻址; (6)目的操作数的寻址方式是寄存器间接寻址,源操作数的寻址方式是寄存器寻址; 6.试述指令MOV AX,2010H和MOV AX,DS:[2010H] 的区别。

答:指令MOV AX,2010H是将立即数2010H送AX寄存器,而指令MOV AX,DS:[2010H]是将DS段有效地址为2010H的两个单元的内容送AX。

7.写出以下指令中内存操作数的所在地址。 (1)MOV AL,[BX+5] (2)MOV [BP+5],AX (3)INC BYTE PTR [SI+3] (4)MOV DL,ES:[BX+DI] (5)MOV BX,[BX+SI+2]

答:(1)指令MOV AL,[BX+5]中内存操作数的所在地址=(DS)*10H+(BX)+5; (2)指令MOV [BP+5],AX中内存操作数的所在地址=(SS)*10H+(BP)+5和(SS)*10H+(BP)+6;

(3)指令INC BYTE PTR[SI+3]中内存操作数的所在地址=(DS)+(SI)+3;

(4)指令MOV DL,ES:[BX+DI]中内存操作数的所在地址=(ES)*10H+(BX)+(DI); (5)指令MOV BX,[BX+SI+2]中内存操作数的所在地址=(DS)*10H+(BX)+(SI)+2和(DS)*10H+(BX)+(SI)+3;

8.判断下列指令书写是否正确,如有错误,指出错在何处并用正确的程序段(一条或多条指令)实现原错误指令((8)、(13)除外)期望实现的操作。 (1)MOV AL,BX (9)MOV ES,3278H (2)MOV AL,SL (10)PUSH AL (3)INC [BX] (11)POP [BX] (4)MOV 5,AL (12)MOV [1A8H],23DH (5)MOV [BX],[SI] (13)PUSH IP (6)MOV BL,F5H (14)MOV [AX],23DH (7)MOV DX,2000H (15)SHL AX,5 (8)POP CS (16)MUL AX,BX

答:(1)MOV AL,BX 错,源操作数为字类型,目的操作数为字节类型,二者不一致。应改为:MOV AX,BX 或 MOV AL,BL ;

(2)MOV AL,SL 错,SI寄存器不能分为高8位和低8位使用,即没有SL寄存器。应改为:MOV AX,SI

(3)INC [BX] 错,未指定操作数的类型。应改为:INC BYTE PTR [BX] (4)MOV 5,AL 错,目的操作数使用了立即数,在指令中一般不允许。应改为:MOV DS:[5],AL (5)MOV [BX],[SI] 错,源操作数和目的操作数均为内存单元,不允许。 应改为:MOV AX,[SI]

MOV [BX],AX

(6)MOV BL,F5H 错,源操作数错,以A~F开头的数字前应加0。应改为:MOV BL,0F5H (7)MOV DX,2000H 正确。

(8) POP CS 错,不能将栈顶数据弹至CS中。 (9)MOV ES,3278H 错,立即数不能直接送ES寄存器。

应改为:MOV AX,3278H MOV ES,AX

(10)PUSH AL 错,栈操作不能按字节进行。应改为:PUSH AX (11)POP [BX] 正确。

(12)MOV [1A8H],23DH 错,源操作数是立即数,目的操作数必须使用寄存器指出。应改为: MOV BX,1A8H MOV [BX],23DH

(13)PUSH IP 错,不能用IP寄存器做源操作数。

(14)MOV [AX],23DH 错,不能用AX寄存器间接寻址。应改为:MOV BX,AX MOV [BX],23DH (15)SHL AX,5 错,不能用大于己于1的立即数指出移位位数。应改为:

MOV CL,5 SHL AX,CL

(16)MUL AX,BX 错,目的操作数AX是隐含的,不能在指令中写出。应改为:MUL BX 9.设堆栈指针SP的初值为2000H,AX=3000H,BX=5000H,试问:

(1)执行指令PUSH AX后 (SP)=?

(2)再执行PUSH BX及POP AX后 (SP)=?(AX)=?(BX)=? 答:(1)执行指令PUSH AX后 (SP)=2000H-2=1FFEH;

(2)再执行PUSH BX及POP AX后 (SP)=1FFEH, (AX)=5000H, (BX)=5000H

10.要想完成把[2000H]送[1000H]中,用指令:MOV [1000H],[2000H]是否正确?如果不正确,应用什么方法?

答:把[2000H]送[1000H]中,用指令 MOV [1000H],[2000H]不正确,应改为:MOV AX,[2000H]

MOV [1000H],AX 11.假如想从200中减去AL中的内容,用SUB 200,AL是否正确?如果不正确,应用什么方法?

答:想从200中减去AL中的内容,用SUB 200,AL不正确,应改为: MOV BL,200

SUB BL,AL 12分别写出实现如下功能的程序段

(1)双字减法(被减数7B1D2A79H,减数53E2345FH)。 (2)使用移位指令实现一个字乘18的运算。 (3)使用移位指令实现一个字除以10的运算。

(4)将AX中间8位,BX低四位,DX高四位拼成一个新字。 (5)将数据段中以BX为偏移地址的连续四个单元的内容颠倒过来

(6)将BX中的四位压缩BCD数用非压缩BCD数形式顺序放在AL、BL、CL、DL中。 答:(1)双字减法的程序段是:

MOV AX,2A79H ;被减数的低位字送AX SUB AX,345FH ;低位字相减,结果送AX MOV BX,7B1DH ;被减数的高位字送BX

SBB BX,53E2H ;高位字相减处并减去低位字相减产生的借位,结果送BX (2)使用移位指令实现一个字乘18的程序段是: MOV AX,05F7H ;被乘数送AX

SHL AX,1 ;被乘数乘以2,结果在AX中

MOV BX,AX ;被乘数乘以2的结果暂存到BX MOV CL,3 ;设置移位位数3

SHL AX,CL ;被乘数再乘以8(共乘以16),结果在AX中 ADD AX,BX ;被乘数再乘以18,结果在AX中

(3)使用移位指令实现一个字除以10的运算,必须将X/10拆分成多项的和,而每一项都应是非的某次幂的倒数。利用等比级数的前N项和公式,可求出A0=X/8,公比Q=-1/4,故X/10=X/8-X/32+X/128-X/512+..., 所求的程序段是:

MOV AX,FE00H ;被除数送AX MOV CL,3 ;设置移位位数3

SHR AX,CL ;被乘数除以8,结果在AX中 MOV BX,AX ;被乘数除以8的结果暂存到BX MOV CL,2 ;设置移位位数2

SHR AX,CL ;被乘数除以4(累计除32),结果在AX中 SUB BX,AX ;被除数/8-被除数/32,结果在BX中 MOV CL,2 ;设置移位位数2

SHR AX,CL ;被乘数除以4(累计除128),结果在AX中 ADD BX,AX ;被除数/8-被除数/32+被除数/128,结果在BX中 MOV CL,2 ;设置移位位数2

SHR AX,CL ;被乘数除以4(累计除512),结果在AX中

SUB BX,AX ;被除数/8-被除数/32+被除数/128-被除数/512,结果在BX中 (4) 将AX中间8位,BX低四位,DX高四位拼成一个新字的程序段是: AND DX,0F000H ;将DX的低12位清零,高4位不变

AND AX,0FF0H ;将AX的低4位清零,高4位清零,中间8位不变 AND BX,0FH ;将BX的高12位清零,低4位不变 ADD AX,BX

ADD AX,DX ;按要求组成一个新字,结果放在AX中。

(5) 将数据段中以BX为偏移地址的连续四个单元的内容颠倒过来的程序段是: MOV AL,[BX] ;数据段中BX为偏移地址的字单元内容送AX

XCHG AL,[BX+3] ;数据段中BX+3为偏移地址的字单元内容与AX的内容交换 MOV [BX],AL ;数据段中BX+3为偏移地址的字单元内容送BX为偏移地址的字单元 MOV AL,[BX+1] ;数据段中BX+1为偏移地址的字单元内容送AX

XCHG AL,[BX+2] ;数据段中BX+2为偏移地址的字单元内容与AX的内容交换

MOV [BX+1],AL ;数据段中BX+2为偏移地址的字单元内容送BX+1为偏移地址的字单元 (6)将BX中的四位压缩BCD数用非压缩BCD数形式顺序放在AL、BL、CL、DL中的程序段是: MOV DL,BL ;四位压缩BCD数的低位字节送DL

AND DL,0FH ;DL的高4位清零,得四位非压缩BCD数的最低位,放入DL中 MOV CL,4 ;设置移位位数4

SHR BX,CL ;BX中的数据逻辑右移4位,使四位压缩BCD数的次低位位于BL的低4位 MOV CH,BL ;将BL的内容暂存到CH中保留

AND CH,0FH ;CH的高4位清零,得四位非压缩BCD数的次低位,放CH中 MOV CL,4 ;设置移位位数4

SHR BX,CL ;BX中的数据逻辑右移4位,使四位压缩BCD数的次高位位于BL的低4位 MOV AL,BL ;将BL的内容暂存到AL中保留

AND BL,0FH ;BL的高4位清零,得四位非压缩BCD数的次高位,放BL中 MOV CL,4 ;设置移位位数4

SHR AL,CL ;使四位压缩BCD数的最高位位于AL的低4位,得四位非压缩BCD数的次高

;位,放入BL中

MOV CL,CH ;将四位非压缩BCD数的次低位移入CL中

10.编写一个程序,要求运行时屏幕显示‘BELL’,同时响铃一次(响铃的ASCII码为07)。 答:所求程序为: Code SEGMENT ASSUME CS:code Start: MOV DL, 42H MOV AH, 2 INT 21H MOV DL, 45H MOV AH, 2 INT 21H MOV DL, 4CH MOV AH, 2 INT 21H MOV DL, 4CH MOV AH, 2 INT 21H MOV DL, 7 MOV AH, 2 INT 21H MOV AH, 4CH INT 21H Code ENDS END Start

11.假设在数据段X_SEG、附加段Y_SEG和堆栈段Z_SEG中分别定义了字变量X、Y和Z,试编制一完整的程序计算 X+Y+Z,并将结果送X。

答:所求程序为:

X_SEG SEGMENT X DW 12eH X_SEG ENDS Y_SEG SEGMENT Y DW 4d2H Y_SEG ENDS

Z_SEG SEGMENT STACK ‘STACK’ Z DW 2CAH Z_SEG ENDS Code SEGMENT

ASSUME CS:Code,DS:X_SEG,ES:Y_SEG,SS:Z_SEG Start: MOV AX, X_SEG MOV DS, AX

MOV AX, Y_SEG MOV ES, AX MOV AX,ES:Y ADD X, AX MOV BP, 0 MOV AX, [BP+Z] ADD X, AX MOV AH, 4CH INT 21H

Code ENDS END Start

12.写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的DADD1和附加段E_SEG中的DADD2相加,并把结果存放在D_SEG段中的SUM中。其中DADD1、DADD2和SUM均为双字类型,DADD1赋值为98765,DADD2赋值为-15893。 答:所求程序为:

D_SEG SEGMENT DADD1 DD 98765 SUM DD ? D_SEG ENDS E_SEG SEGMENT DADD2 DD -15893 E_SEG ENDS C_SEG SEGMENT

ASSUME CS: C_SEG,DS:D_SEG,ES:E_SEG Start: MOV AX, D_SEG MOV DS, AX MOV AX, E_SEG MOV ES, AX

MOV AX,WORD PTR DADD1 MOV BX,WORD PTR DADD1+2 ADD AX, WORD PTR ES:DADD2 ADC BX, WORD PTR ES:DADD2+2 MOV WORD PTR SUM, AX MOV WORD PTR SUM+2, BX MOV AH, 4CH INT 21H

C_SEG ENDS END Start

======================================================= 一、填空题

1、执行部件EU的组织有:4个通用寄存器,4个专用寄存器和1个标志寄存器和算术逻辑部件 。

2、8086CPU从偶地址访问内存1个字时需占用 1个总线周期,而从奇地址访问内存1个字操作需占用 2个总线 周期。

3、IBM-PC机中的内存是按段存放信息的,一个段最大存贮空间为 64K 字节。 4、8086微处理机在最小模式下,用 M/IO 来控制输出地址是访问内存还是访问I/O。 5、一台计算机能执行多少种指令,是在 设计 时确定的。 三、简答题

1. 微处理器内部结构由哪些部件组成?

答案:微处理器由两部分组成,总线接口单元和执行单元 2. 论述8086 CPU的最小方式和最大方式的区别。

8086CPU的最小方式和最大方式的区别是:最小方式,MN/MX接+5V(MX为低电平),用于构成小型单处理机系统,支持系统工作的器件:(1)时钟发生器,8284A,(2)总线锁存器,74LS373,(3)总线收发器,74LS245,控制信号由CPU提供。最大方式,MN/MX接地(MX为低电平),用于构成多处理机和协处理机系统,支持系统工作的器件:(1)时钟发生器,8284A,(2)总线锁存器,74LS373,(3)总线收发器,74LS245,(4)总线控制芯片,8288,控制信号由8288提供。 3. 论述指令周期、机器周期和时钟周期间的关系。

执行一条指令所需要的时间称为指令周期;(2).一个CPU同外部设备和内存储器

之间进行信息交换过程所需要的时间称为总线周期;(3).时钟脉冲的重复周期称为时钟周期;(4).一个指令周期由若干个总线周期组成,一个总线周期又由若干个时钟周期组成;(5). 8086CPU的总线周期至少由4个时钟周期组成;(6).总线周期完成一次数据传输包括:传送地址,传送数据;(7)等待周期----在等待周期期间,总线上的状态一直保持不变;(8)空闲周期----总线上无数据传输操作 4. 试比较8086CPU与8086CPU的异同之处。

8088CPU和8086CPU内部寄存器都是16位,数据总线都有是16位,地址总线都有是20位,指令系统相同。主要不同点有:

(1) 8086指令队列是6个字节长,而8088指令队列是4个字节长。 (2) 外部数据总线位数不同,8086为16位AD0~AD15,8088为AD0~AD7

(3) 34脚和28脚功能不同,34脚8086中是数据总线允许BHE/S7,8088是SSO,

28脚,8086是M/IO,8088是IO/M

5. 8086CPU从功能上分为几部分?各部分由什么组成?各部分的功能是什么?

8086从功能上可分为执行单元和总线接口单元。执行单元的功能是负责指令的执

行,将指令译码并利用内部寄存器和ALU对数据进行处理。它由4个通用寄存器(AX、BX、CX、DX),4个专用寄存器(BP、SP、SI和DI),标志寄存器和算术逻辑部件组成。总线接口单元的功能是存储器、I/O端口传送数据。它由4 个段寄存器(CS、DS、ES、SS),

指令指针寄存器IP,20位地址加法器和6个字节的指令队列组成。

6.8086系统中的物理地址是如何得到的?假如CS=2500H,IP=2l00H,其物理地址是多少?

在8086系统中,用16位的段地址和16位的偏移地址来表示20位的物理地址,物

理地址=段地址*16+偏移址得到物理地址。

该题CS=2500H,IP=2l00H,则物理地址=CS*16+IP=2500H*16+2100H=27100H

6. 什么是最大模式?什么是最小模式?用什么方法将8086/8088置为最大模式和最小

模式?

最大模式是相对最小模式而言,系统中包含两个或多个处理品,其中一个主处理器

就是8088/8086,其它处理器是协处理器,它是协助主处理器工作的。将MN/MX*置0即为最大模式。

最小模式又是相对于最大模式,就是在系统中只有一个处理器,所有的总线控制信号都有由8088/8086产生,系统中总线控制逻辑电路少,将MN/MX*置1即为最大模式。

7. 存储器分段组织有何优越性?

减少了指令的长度,提高了执行速度。内存分段为程序浮动加载创造了条件。使程序保持完整的相对性,具备了浮动性。

8. 试述BHE与A0组合如何选择数据字?

BHE的作用是高8位数据允许,A0=0是低8位数据允许,在T1状态时,BHE和A0

组合起来表示连接在数据总线上的存储器和I/O端口当前的数据在总线上出现有格式。

9. CPU响应中断时,为什么要执行两个连续的中断响应周期?

CPU响应中断时,执行两个连续的中断响应周期,每个响应周期都给出中断响应信号

INTA。这是因为第一个总线周期通知中断请示设备,微处理器准备响应中断,应该准备

好中断类型码,第二个总线周期中,微处理器接收中断类型码,以便得到中断向量,即中断服务程序的入口地址。

六、请阅读下列程序,分析其功能或结果 1、 MOV AH,00 INT 16H

MOV AH,0AH MOV CX,00 MOV BH,00 INT 10H

读取键盘输入,并显示在显示器上 2、 MOV AH,00 MOV AL,66 MOV DX,00 INT 17H

MOV AH,00 MOV AL,0DH INT 17H

在打印机一输出字符‘B’,并回车。

3、 MOV AH,07 MOV AL,00 MOV BL,70H MOV CH,02 MOV CL,05 MOV DH,22 MOV DL,38 INT 10H 屏幕初始化,左上角行号为2,左上角列号为5,右下角行号为22,右下角列号为38,使用整个空白窗口。

4、MESS DB ‘PRESS ANY KEY’,0DH,0AH,‘$’ MOV AH,09 MOV DX,SEG MESS MOV DS,DX MOV DX,OFFSET MESS INT 21H

在屏幕上输出PRESS ANY KEY并换行回车 5、MOV AH,2 MOV DL,1 INT 21H

在屏幕上输出1

七、编写程序

1. 试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。

abc: mov ah,1 int 21h cmp al,’a’ jb stop cmp al,’z’ ja stop sub al,20h mov dl,al mov ah,2 int 21h jmp abc stop: ret

4. 已知整数变量A和B,试编写完成下述操作的程序:

(1)若两个数中有一个是奇数,则将该奇数存入A中,偶数存入B中; (2)若两个数均为奇数,则两数分别加1,并存回原变量; (3)若两个数均为偶数,则两变量不变。 dseg segment a dw ? b dw ? dseg ends cseg segment

mainproc far

assume cs:cseg,ds:dseg start:push ds sub ax,ax push ax mov ax,dseg mov ds,ax begin: mov ax,a mov bx,b xor ax,bx test ax,0001 jz class test bx,0001 jz exit xchg bx,a mov b,bx jmp exit class: test bx,0001 jz exit inc b inc a exit: ret mainendp cseg ends end start

5. 把0~10010之间的30个数,存入首地址为GRAD的字数组中,GRAD+i表示学号为i+1的学生成绩。另一个数组RANK是30个学生的名次表,其中RANK+I的内容是学号为i+1的学生的名次。试编写程序,根据GRAD中的学生成绩,将排列的名次填入RANK数组中(提示:一个学生的名次等于成绩高于这个学生的人数加1) 5、答案: dseg segment grade dw 30 dup(?) rank dw 30 dup(?) dseg ends cseg segment mainproc far

assume cs:cseg, ds:dseg, es:dseg start:push ds sub ax,ax push ax mov ax,dseg mov ds,ax mov es,ax begin: mov di,0

mov cx,30 loop1: push cx mov cx,30 mov si,0 mov ax,grade[di] mov dx,0 loop2: cmp grade[si],ax jbe go_on inc dx go_on: add si,2 loop loop2 pop cx inc dx mov rank[di],dx sdd di,2 loop loop1 ret mainendp cseg ends

6. 试编写程序,它轮流测试两个设备的状态寄存器,只要一个状态寄存器的第0位为1,则与其相应的设备就输入一个字符;如果其中任一状态寄存器的第3位为1,则整个输入过程结束。两个状态寄存器的端口地址分别是0024和0036,与其相应的数据输入寄存器的端口则为0026和0038,输入字符分别存入首地址为BUFF1和BUFF2的存储区中。 6、答案: mov si, 0 mov di, 0

test12: in al, 0024h test al, 08 jnz exit in al,0036h test al, 08 jnz exit dev1: in al, 0024h test al, 01 jz dev2 in al, 0026h mov buffer[si], al inc si dev2: in al, 0036h test al, 01 jz test12 in al, 0038h mov buff2[di],al inc di

jmp test12 exit: ret

7.编写一个程序,接收从键盘输入的10个十进制数字,输入回车符则停止输入,然后将这些数字加密后(用XLAT指令变换)存入内存缓冲区BUFFER。加密表为; 输入数字: 0,1,2,3,4,5,6,7,8,9 密码数字: 7,5,9,1,3,6,8,0,2,4 7、答案:

scode db 7,5,9,1,3,6,8,0,2,4 buffer db 10 dup(?) ; … … mov mov lea input: mov int cmp jz and xlat mov inc loop exit: ret

si,0 cx,10 bx,scode ah,01 21h al,0ah exit al,0fh buffer[si],al si input

本文来源:https://www.bwwdw.com/article/pc8h.html

Top