错误!未指定书签。与接口技术
6.13 编写子程序,要求从键盘输入一个4位的十六进制数,然后将其转换成二进制数并在屏幕上显示出来。
解:
START:
AGAIN:
DECI:
LOOP1:
ONE: DISPL:
DATPRO SEGMENT BUFF DB 5 DB ?
DB 5 DUP(?) DATPRO ENDS PROSEG SEGMENT
ASSUME CS:PROSEG,DS:DATPRO MOV AX,DATPRO MOV DS,AX LEA DX,BUFF MOV AH,0AH INT 21H
MOV BL,[BUFF+1] LEA SI,BUFF+2 MOV AL,[SI] CMP AL,30H JB EXIT CMP AL,39H JBE DECI CMP AL,61H JB EXIT CMP AL,66H JA EXIT SUB AL,27H SUB AL,30H MOV CL,4 SHL AL,CL MOV CX,4 SHL AL,1 JC ONE
MOV DL,30H JMP DISPL MOV DL,31H PUSH AX MOV AH,2 INT 21H POP AX LOOP LOOP1 SUB AL,20H MOV DL,AL MOV AH,02H INT 21H JMP NEXT POP DX POP AX RET
KEYIN ENDP CODE ENDS END KEYIN
文件名:微机原理与接口技术习题 第 26 页 共 61 页
EXIT:
INC BL INC SI CMP BL,0 JNZ AGAIN MOV AH,4CH INT 21H PROSEG ENDS END START
习 题
6.14 编写一个子程序,实现8位无符号数的除法运算,被除数、除数、商和余数存放在自DATA开始的存储单元中。
解: CODESUB SEGMENT
ASSUME CS:CODESUB SUBPRO PROC FAR PUSH AX PUSH BX PUSH DX
MOV AL,DATA CBW
DIV DATA+1 PUSH AX CBW
CALL DISPL POP AX
MOV AL,AH CBW
CALL DISPL POP DX POP BX POP AX RET
SUBPRO ENDP ; DISPL PROC NEAR MOV BL,100 DIV BL PUSH AX
ADD AL,30H MOV DL,AL MOV AH,2 INT 21H POP AX
MOV AL,AH CBW
MOV BL,10 DIV BL PUSH AX
ADD AL,30H MOV DL,AL MOV AH,2
INT 21H
文件名:微机原理与接口技术习题 第 27 页 共 61 页
错误!未指定书签。与接口技术
6.15设有一个由30个数据组成的数组DGRP,编写一完整的汇编语言程序,将该数组分成正数组PGRP和负数组NGRP,并且统计和显示这两个数组中数据的个数。
解:
START:
NEXT:
GOON:
DATSEG SEGMENT
DGRP DW 30 DUP(?) PGRP DW 30 DUP(?) NGRP DW 30 DUP(?) DATSEG ENDS PROSEG SEGMENT MAIN PROC FAR
ASSUME CS:PROSEG,DS:DATSEG PUSH DS
SUB AX,AX PUSH AX
MOV AX,DATSEG MOV DS,AX MOV CX,30 MOV DX,0 LEA BX,DGRP LEA SI,PGRP LEA DI,NGRP MOV AX,[BX] AND AX,AX JL NEGD INC DH
MOV [SI],AX ADD SI,2 JMP GOON
NEGD: INC DL MOV [DI],AX ADD DI,2 ADD BX,2 LOOP NEXT MOV BL,10 MOV AL,DL CALL DISPL MOV AL,DH CALL DISPL RET
POP AX
MOV DL,AH ADD DL,30H MOV AH,2 INT 21H MOV DL,‘,’ MOV AH,2 INT 21H RET
DISPL ENDP CODESUB ENDS END
文件名:微机原理与接口技术习题 第 28 页 共 61 页
;
MAIN ENDP
习 题
DISPL PROC NEAR CBW
DIV BL PUSH AX
ADD AL,30H MOV DL,AL MOV AH,2 INT 21H POP AX
ADD AH,30H MOV DL,AH MOV AH,2 INT 21H MOV DL,‘,’ MOV AH,2 INT 21H RET
DISP ENDP PROSEG ENDS END START
6.16 设有一组考核数据以字节为单位存放在名为TEST的内存缓冲区中,这些数据都是不超过100的正整数,其中第1个单元存放的是该数组中数据的个数。若将小于60的数划分为等第C,60~80划分为等第B,大于80的数划分为等第A,编程分别统计这三个等第中数据的个数,并在屏幕上显示出统计结果。
解: ;
START:
STATI:
BCRANK:
DATASEG SEGMENT
TEST DB 256 DUP(?) A DB 0 B DB 0 C DB 0 DATASEG ENDS
CODESEG SEGMENT MAIN PROC FAR
ASSUME CS:CODESEG,DS:DATASEG PUSH DS SUB AX,AX PUSH AX
MOV AX,DATASEG MOV DS,AX LEA SI,TEST MOV CL,[SI] MOV CH,0 INC SI
MOV AL,[SI] CMP AL,80 JBE BCRANK INC A JMP NEXT CMP AL,60
第 29 页 共 61 页
文件名:微机原理与接口技术习题
错误!未指定书签。与接口技术
CRANK: NEXT: ;
6.17 从键盘输入某班学生某门课程的成绩,存入内存中,然后将成绩进行分析统计,分别求出九十分以上、八十至八十九分、七十至七十九分、六十至六十九分、六十分以下这五个分数段中各有多少人?五个分数段分别用A、B、C、D、E表示,全班的平均成绩是多少(只取整数)?并将统计结果在屏幕上显示出来。
.MODEL SMALL
JB CRANK
INC B JMP NEXT INC C INC SI
LOOP STATI MOV AL,A CALL DISPL MOV AL,B CALL SISPL MOV AL,C CALL DISPL RET
MAIN ENDP DISPL PROC NEAR CBW
MOV BL,100 DIV BL PUSH AX
ADD AL,30H MOV DL,AL MOV AH,2 INT 21H POP AX
MOV AL,AH CBW
MOV BL,10 DIV BL PUSH AX
ADD AL,30H MOV DL,AL MOV AH,2 INT 21H POP AX
ADD AH,30H MOV DL,AH MOV AH,2 INT 21H MOV DL,‘,’ MOV AH,2 INT 21H RET
DISP ENDP CODESEG ENDS END START
文件名:微机原理与接口技术习题 第 30 页 共 61 页