微机原理及应用(附答案) 联系客服

发布时间 : 星期四 文章微机原理及应用(附答案)更新完毕开始阅读6d632fd4360cba1aa811da11

BCD:DEC CL JNZ ABC

MOV BX,1000H MOV [BX],AL JMP $

4.设计一个分支程序

1 X>0

Y = 0 X=0 -1 X<0

?程序为:

MOV AL ,X CMP AL,0 JGE BIG MOV Y,-1 JMP EXIT BIG:JE EQUL

MOV Y,1 JMP EXIT EQUL:MOV Y,0

JMP $

5.编写程序段, 比较两个5字节的字符串OLDS和NEWS, 如果OLDS字符串与NEWS不同, 则执行NEW_LESS, 否则顺序执行程序。 LEA SI, OLDS LEA DI, NEWS MOV CX, 5 CLD

REPZ CMPSB JNZ NEW_LESS

6.变量N1和N2均为2字节的非压缩BCD数码,请写出计算N1与N2之差的指令序列。 MOV AX, 0 MOV AL, N1+1 SUB AL, N2+1 AAS

MOV DL, AL MOV AL, N1 SBB AL, N2 AAS

MOV DH, AL

7.试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。 abc: mov ah,1 int 21h sub al,20h mov dl,al mov ah,2 int 21h jmp abc sto: ret

8.把AX寄存器清零。 ①MOV AX,0 ②XOR AX,AX

③AND AX,0 ④SUB AX,AX

9.把AL中的数x乘10

因为10=8+2=23+21,所以可用移位实现乘10操作。程序如下:

MOV CL,3

SAL AL,1 ; 2x MOV AH,AL

SAL AL,1 ; 4x SAL AL,1 ; 8x

ADD AL,AH ; 8x+2x = 10x 10.按下述要求写出指令序列:

(1) DATAX和DATAY中的两个字数据相加, 和存放在DATAY和DATAY+2中。 (2) DATAX和DATAY中的两个双字数据相加, 和存放在DATAY开始的字单元中。 (3) DATAX和DATAY两个字数据相乘(用MUL)。 (4) DATAX和DATAY两个双字数据相乘(用MUL)。 (5) DATAX除以23(用DIV)。

(6) DATAX双字除以字DATAY(用DIV)。

DATAX和DATAY中的两个字数据相加, 和存放在DATAY和DATAY+2中。 (1) MOV AX, DATAX

ADD AX, DATAY MOV BX, DATAX+2 ADD BX, DATAY+2 MOV DATAY, AX MOV DATAY+2, BX

DATAX和DATAY中的两个双字数据相加, 和存放在DATAY开始的字单元中。 (2) MOV AX, DATAX

ADD DATAY, AX MOV AX, DATAX+2 ADC DATAY+2, AX

DATAX和DATAY两个字数据相乘(用MUL)。 (3) MOV AX, DATAX

MUL DATAY MOV DATAY,AX MOV DATAY+2,DX

DATAX和DATAY两个双字数据相乘(用MUL)。 (4)

MOV AX,WORD PTR DATAX MOV BX,WORD PTR DATAY MUL BX MOV RESULT,AX MOV RESULT+2,DX MOV AX,WORD PTR DATAX MOV AX,WORD PTR DATAY+2 MUL BX ADD RESULT+2,AX ADC RESULT+4,DX MOV AX,WORD PTR DATAX+2 MOV BX,WORD PTR DATAY MUL BX

ADD RESULT+2,AX ADC RESULT+4,DX

MOV AX,WORD PTR DATAX+2 MOV BX,WORD PTR DATAY+2 MUL BX

ADD RESULT+4,AX ADC RESULT+6,DX DATAX除以23(用DIV)。 (5) MOV AX, DATAX

MOV BL, 23 DIV BL MOV BL,AH MOV AH, 0

MOV DATAY, AX ;存放商 MOV AL,BL

MOV DATAY+2, AX ;存放余数

DATAX双字除以字DATAY(用DIV)。 (6) MOV AX, DATAX

MOV DX, DATAX+2 DIV DATAY MOV DATAY, AX MOV DATAY+2, DX

五、软件设计

1、以BUF1和BUF2开头的2个字符串开头的2个字符串,其长度相等,试编程实现将两个字符串的内容对调。

DDD0 SEGMENT BUF1 DB “QWERTYUIOPASDFGHJKLR”

BUF2 DB “A1234567890ZXCVBNMPJ” LEN EQU LENGTH BLOCK1 DDD0 ENDS ESEG SEGMENT

BUF3 DB 20 DUP(?) ESEG ENDS CSEG SEGMENT

ASSUME CS:CSEG,DS:DDD0,ES:ESEG START: CLD MOV AX,DDD0 MOV DS,AX MOV AX,ESEG MOV ES,AX MOV CX,LEN LEA SI, BUF1 LEA DI, BUF3 REP MOVSB

MOV CX,LEN LEA SI, BUF2 LEA DI, BUF1 REP MOVSB MOV CX,LEN LEA SI,

BUF3 LEA DI, BUF2 REP MOVSB

CSEG ENDS END START

2、 在ABC和BCD两地址起,各有5个字节的无符号数,试编程实现这两个无符号数的加法并将结果分别存放到CBA开始的存储单元中去。

DDD0 SEGMENT

ABC DB 9FH,26H,12H,5AH,23H BCD DH 74H,D3H,54H,43H,7DH CBA DB 6 DUP(?) DDD0 ENDS

CSEG SEGMENT ASSUME CS:CSEG,DS:DDD0

START: MOV AX,DDD0 MOV DS,AX MOV CX,5 CLC LEA SI,ABC;可做间址寄存器的有SI,DI,BX,BP及它们的组合 LEA DI,BCD LEA BX,CBA XYZ: MOV AL,[SI] ADC AL,[DI] MOV [BX],AL INC SI INC DI INC BX LOOP XYZ MOV AL,0 ADC AL,0

MOV[BX],AL LEA BX,CBA MOV [BX],AX CSEG ENDS END START

3. 把0-100之间的30个数,存入首地址为GRAD的字数组中,GRAD+i表示学号为i+1的学生成绩。另一个数组RANK是30个学生的名次表,其中RANK+I的内容是学号为i+1的学生的名次。试编写程序,根据GRAD中的学生成绩,将排列的名次填入RANK数组中(提示:一个学生的名次等于成绩高于这个学生的人数加1)。 dseg segment

grade dw 30 dup(?) rank dw 30 dup(?) dseg ends

cseg segment main proc 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 main endp cseg ends

end start

六、设计硬件电路及相应程序(23分)

1. 设计一个8088最小系统,扩展一片6264(6分),扩展一片8255可编程接口芯片(6分),画出电路逻辑框图。写出6264的地址范围(3分),并将其所有RAM单元清零(4分)将8255的PA口为基本输入方式, PB口、PC口为基本输出方式,编程实现(4分) 答: 电路逻辑框图如下

8 D0~D7 D0~D7 D0~D7 A0~A12 RESET RST A0~A12 PA A0 A0 A1 A1 PB 6264

8255 A14 A13 PC

cscs WR RD

WR WR

RD ; RD 答:6264的地址范围是:04000H~05FFFH并将其所有RAM单元清零的程序是: MOV CX,2000H MOV BX,4000H MOV AX,0000H MOV DS,AX

ABC: MOV (BX),00H INC BX LOOP ABC

将8255的PA口为基本输入方式, PB口、PC口为基本输出方式,命令字是:90H 写入命令字: MOV AL,90H OUT DX AL MOV DX,2003H