1、 微机原理与接口技术复习题 一 、 定义一个 无 符号的字节数组,数组的长度 (元素个数 )至少为 10,然后求该数组各元素的和,结果保存到字类型的变量中。 DATA SEGMENT ARRAY1 DB 2,2,2,2,2,2,2,2,2,2 C1 EQU $-ARRAY1 X1 DB ? DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE MAIN:MOV AX,DATA MOV DS,AX LEA SI,ARRAY1 MOV CX,C1 MOV DX,0 CALL SUM MOV X1,DL MOV AH,4CH INT 21H SUM PROC G
2、OON:ADD DX,SI INC SI LOOP GOON RET SUM ENDP CODE ENDS END MAIN 二、 定义一个 带 符号的字节数组,数组的长度 (元素个数 )至少为 10, 然后分别统计该数组中正数 (包括零 )和负数的个数,并将统计结果存入变量 X1 和 X2 中。 DATA SEGMENT ARRY1 DW 1,2,3,-1,-2,-3,0,4,5,6 C1 EQU $-ARRY1 ZHENGSHU DB 0 FUSHU DB 0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
3、MOV DS,AX LEA SI,ARRY1 MOV AX,C1 ;将长度放到 CX 中 MOV CL,1 SHR AX,CL MOV CX,AX ;将长度放到 CX 中 MOV DX,0 CALL SUM JMP $ MOV AX,4CH INT 21H SUM PROC GOON: MOV AX,SI CMP AX,0 JGE ADD1 INC FUSHU JMP NEXT ADD1: INC ZHENGSHU NEXT: ADD SI,2 LOOP GOON RET SUM ENDP CODE ENDS END START 三 、定义一个 带 符号的字节数组,数组的长度 (元素个数 )至
4、少为 10, 然后从中找出最小 /最大的元素,并把该元素保存到字节变量 MIN/MAX 中。 DATA SEGMENT ;ARRY DW 2,6,3,11,5,3,7,8,9,4 ARRY DW 2,1,2,2,5,2,2,2,2,2 C1 EQU $-ARRY MAX DW ? MIN DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX LEA SI,ARRY MOV AX,C1 MOV CL,1 SHR AX,CL MOV CX,AX ;MOV DX,MAX CALL FINDMAX
5、 MOV MAX,DX ;MOV DX,0 CALL FINDMIN MOV MIN,DX JMP $ MOV AX,4CH INT 21H FINDMAX PROC GOON: MOV AX,SI CMP AX,DX JG CHANGEMAX JMP NEXT CHANGEMAX: MOV DX,AX NEXT:ADD SI,2 LOOP GOON RET FINDMAX ENDP FINDMIN PROC GOON1: MOV AX,SI CMP DX,AX JL CHANGEMIN JMP NEXT1 CHANGEMIN: MOV DX,AX NEXT1:ADD SI,2 LOOP GO
6、ON1 RET FINDMIN ENDP CODE ENDS END START 四 、定义两个字节类型的数组,统计既属于第一个数组又属于第二个数组的元素个数,统计结果保存到变量 RESULT 中。 DATA SEGMENT ARRY1 DB 1,2,3,4,5,6,7,8,9,5 C1 EQU $-ARRY1 ARRY2 DB 0,2,3,7,6,8,9,4,2,0 C2 EQU $-ARRY2 RESULT DB 0 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV CX,C1 MO
7、V DX,C2 LEA SI,ARRY1 LEA BX,ARRY2 GOON: MOV AL,SI CALL COUNTER ADD DX,10 INC SI LOOP GOON JMP $ MOV AX,4CH INT 21H COUNTER PROC NEXT: DEC DX CMP AL,BX JE ADDONE INC BX CMP DX,0 JNE NEXT SUB BL,10 JMP EXIT ADDONE: INC RESULT EXIT: RET COUNTER ENDP CODE ENDS END START 五 、 用某个十进制数 对字变量 VALUE 进行初始化,然后将其
8、值转换为十六进制 数 并在屏幕上输出。 DATA SEGMENT VALUE DW 20H DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA BEGIN:MOV AX,DATA MOV DS,AX MOV BX,VALUE MOV CX,4 GOON:ROL BX,1 ROL BX,1 ROL BX,1 ROL BX,1 MOV DX,BX ;将数字取出处理,原数据不变 AND DL,0FH ;单独抽取最低那位 CMP DL,9 ;和 9 比较看看是要转字母还是直接输出数字 JBE SKIP ;小于或等于 9,即纯数字直接转 ASC 码 ADD DL,
9、7 ;7 是 ASC 数字和字母之间的差 SKIP:ADD DL,48 ;转 ASC 码 MOV AL,2 INT 21H LOOP GOON MOV AH,4CH INT 21H CODE ENDS END BEGIN 六、 对无符号字变量 X1 和 X2 分别进行初始化,然后采用辗转相除法求它们的最大公约数,结果保存到字变量 RESULT 中。 DATA SEGMENT X1 DW 60 X2 DW 75 RESULT DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA BEGIN:MOV AX,DATA MOV DS,AX MOV AX,
10、X1 MOV BX,X2 CMP AX,BX ;比较前者是否大于后者以便相除 JAE GOON ;前者大于后者直接进入辗转相除循环 XCHG AX,BX ;前者小于后者则交换 GOON:MOV DX,0 DIV BX ;对于 ( dx,ax) /src,结果保 留在 dx和 ax中 MOV AX,BX ;将除数放在被除数中 MOV BX,DX ;将余数放在除数中,完成辗转 CMP DX,0 ;对余数位置进行判断,如果等于 0 则结束运算 JNE GOON MOV RESULT ,AX MOV AH,4CH INT 21H CODE ENDS END BEGIN 七 、 对字节变量 VALUE
11、进行初始化,然后 从 一个给定的 字节 数组中查找 与该变量等值的 元素,数组的长度保存在变量 LEN 中。 如果找到 , 则把 该元素从数组 中删除,并且修改数组的长度 ; 如果未找到 , 则不做任何处理 。 DATA SEGMENT ARY DB 1,2,3,4,5,6,7,8,9,10 COUNT EQU $-ARY LEN DB COUNT VALUE DB 10 DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA BEGIN: MOV AX,DATA MOV DS,AX MOV AL,VALUE LEA DI,ARY MOV CX,COUNT
12、CLD REPNE SCASB ;在数组中找指定的 AL JNE STOP CMP CX,0 ;找到相同的值了,测试当前的 CX 值以便后面使用字符串传送 JE SKIP MOV SI,DI ;将 DI 的地址放到 SI中并错开,将 DI 从相同那个值开始以后的值覆盖到 SI中 DEC DI REP MOVSB SKIP:DEC LEN STOP: MOV AH,4CH INT 21H CODE ENDS END BEGIN 八 、 按从小到大的顺序以十进制 数的形式 在屏幕上显示 2n(0 n 7),相邻两个数之间以空格分隔。 DATA SEGMENT NUM DB 5 DUP(?) DAT
13、A SEGMENT CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV AL,1 CALL OUTPUT MOV BL,1 MOV AL,1 GOON: MUL 2 CALL OUTPUT ADD BL,1 CMP BL,7 JE EXIT MOV DL, MOV AH,2 INT 21H LOOP GOON EXIT: MOV AH,4CH INT 21H OUTPUT PROC PUSH BX MOV BX,10 LEA SI,NUM+4 MOV CX,0 NEXT: MOV DX,0 DIV BX AD
14、D DL,48 MOV SI,DL DEC SI INC CX CMP AX,0 JNE NEXT SHOW: INC SI MOV DL,SI MOV AH,2 INT 21H LOOP SHOW POP BX RET OUTPUT ENDS CODE ENDS END START 九 、 按从小到大的顺序以十进制 数的形式 在屏幕上显示 1 10 的平方,相邻两个数之间以空格分隔。 DATA SEGMENT ASC DB 5 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN:MOV AX,DATA MOV DS,AX MOV
15、 BL,1 GOON:MOV AL,BL MUL AL ;获得 1,并自乘 CALL OUTPUT INC BL CMP BL,10 JBE GOON OUTPUT PROC PUSH BX ;将 bx送入堆栈保存 MOV BX,10 ;给 bx赋值,用作除数,每次除 10,获得末尾值 LEA SI,ASC+5 ;将指针指向保存十进制各个位的数组的最末尾 MOV CX,0 ;初始化 cx NEXT:MOV DX,0 ;初始化 dx,用作记录每次的余数 DIV BX ;ax 除以 bx,即获得商放在 ax中, dx放余数 ADD DL,48 ;将余数,即最末尾的数直接转换为 ASC 码对应的数值 DEC SI ;指针下降 MOV SI,DL ;将值保存到数组中 INC CX ;cx加一用作后面弹出数组里数字个数的依据 CMP AX,0 ;用商和 0 做比较,如果已经小于 0 说明已经除完了 JNE NEXT SHOW:MOV DL,SI ;将数组里保存的数依次显示 MOV AH,2 ;调用 2 号方法显示 INT 21H INC SI MOV DL, ;空格,空格的 ASC 码为 20H MOV AH,2