1、15. 已知:在内存BUF开始的单元中,存在一串数据:58,75,36,42,89。编程找出其中的最小值存入MIN单元中,并将这个数显示在屏幕上。解:STACK SEGMENT STACKDB 100 DUP(?)STACK ENDSDATA SEGMENT BUF DB 58H, 75H, 36H, 42H, 89H MIN DB 0DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACKSTART: PUSH DS MOV AX, DATA MOV DS, AX MOV CX, 4 MOV BX, OFFSET BUF MOV AL,
2、BX ST1: INC BX CMP AL, BX JBE NEXT MOV AL, BX NEXT:LOOP ST1 MOV MIN, AL AND AL, 0F0H MOV CL,4 ROR AL, CL ADD AL, 30H MOV DL, AL MOV AH, 02H INT 21H MOV AL, MIN AND AL, 0FH ADD AL, 30H MOV DL, AL MOV AH, 02H INT 21H POP DS MOV AH, 4CH INT 21H HLTCODEENDS END START18. 某班有20个同学的微机原理成绩存放在LIST开始的单元中,要求编程
3、先从高到低的次序排列好,再求出总分和平均值,分别存放在SUM和AVER开始的单元中。解:STACK ENDSDATA SEGMENT LIST DB 65H,76H,78H,54H,90H,85H,68H,66H,77H,88H DB 99H, 89H, 79H, 69H,75H,85H,63H,73H,83H,93H SUM DW 0 AVER DB 0 BUF DB 100 DUP (?) DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: PUSH DS MOV AX,DATA MOV DS,AX MOV DI, OFF
4、SET LIST MOV BX, 19 LP0: MOV SI, DI MOV CX, BX LP1: MOV AL, SI INC SI CMP AL, SI JNC LP2 MOV DL, SI MOV SI-1, DL MOV SI, AL LP2: LOOP LP1 DEC BX JNZ LP0 LP3: MOV CX, 20 MOV BX, OFFSET LIST MOV SUM, 0 XOR AX, AX LP4: ADD AL, BX DAA ADC AH, 0 INC BX LOOP LP4 MOV SUM, AX MOV BL, 20H DIV BL ADD AL,0 DAA
5、 MOV AVER AL POP DS HLTCODE ENDSEND START20. 编程将存放在AL中的无符号二进制数,转化成十六进制数,再转换成ASII码并显示在屏幕上。解:程序如下:STACK SEGMENT STACK DB 100 DUP(?)STACK ENDSDATA SEGMENT DB 100 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STACKSTART: PUSH DS MOV AX, DATA MOV DS, AX MOV DH, AL MOV CH, 02HST1: MOV CL, 4 ROR
6、DH, CL MOV AL, DH AND AL, 0FH ADD AL, 30H CMP AL, 39H JBE DISP ADD AL, 07HDISP: MOV DL, AL MOV AH, 02H INT 21H DEC CH JNZ ST1 POP DS MOV AH, 4CH INT 21H HLTCODE ENDS END START21. 编写程序,使用三种以上的方法,将存储器中2000H开始的地址单元中的100字节数据复制到3000H开始的存储器地址单元中。解:(1)利用通用传送指令MOVMOV SI,2000H 注意这里如果是标号地址 ,则必须用OFFSETMOV DI,3
7、000HMOV CX,100LP1: MOV AL,SIMOV DI,ALINC SIINC DILOOP LP1 HLTMOV CX,100MOV BX,0 LP0:MOV AL,2000BXMOV 3000BX,ALINC BXLOOP LP0HLT(2)利用交换指令XCHGMOV SI,2000HMOV DI,3000HMOV CX,100LP2: MOV AL,SIXCHG DI,ALINC SIINC DILOOP LP2 HLT(3)利用换码指令XLATMOV BX,2000HMOV DI,3000HMOV CX,100 LP3: XOR AL,AL XLATMOV DI, ALI
8、NC BX INC DILOOP LP3HLT(4)利用堆栈实现数据传送MOV SI,2000HMOV DI,3000HMOV CX,50LP4: PUSH SIPOP DIINC SIINC SIINC DIINC DILOOP LP4 HLT(5)利用串操作指令REP MOVSBMOV SI,2000HMOV DI,3000HMOV CX,100CLD ;DF=0,SI、DI自动+1REP MOVSBHLT5. 对于下面的数据定义,各条MOV指令执行后,有关寄存器的内容是什么?DA1 DB ? DA2 DW 10 DUP(?)DA3 DB ABCD MOV AX,TYPE DA1 MOV
9、BX,SIZE DA2 MOV CX,LENGTH DA3 解:各条MOV指令执行后,有关寄存器的内容如下:MOVAX,TYPE DA1 ;(AX)= 1MOVBX,SIZE DA2 ;(BX)= 20MOVCX,LENGTH DA3 ;(CX)=1 下段程序完成后,AH等于什么? INAL,5FHTEST AL,80HJZL1MOVAH,0 JMP STOP L1:MOVAH,0FFHSTOP:HLT如果地址为5FH的外设输入到AL中的数据的最高位=1,则(AH)= 0,否则,(AH)= 0FFH。 设置8259的中断向量MOV AX,SEG IRQ2 MOV DS,AX MOV DX, O
10、FFSET IRQ2 MOV AL,42H MOV AH,25H INT 21H;8259初始化MOV AL,13H ;ICW1边沿触发,单片8259,有ICW4 OUT 20H,AL MOV AL,40H ;ICW2 中断类型号基值为40H OUT 21H,AL MOV AL,01H ;ICW4 8088系统,普通EOI,;完全嵌套式 OUT 21H,AL MOV AL,0FDH OUT 21H ,AL ;OCW1,设置IMR,中断屏蔽微处理器CPU:控制微处理器与存储器或I/O设备间的数据交换;进行算术和逻辑运算等操作;判定和控制程序流向。微处理器主要完成:(1)指令控制:从存储器中取指令
11、,指令译码;(2)数据加工:简单的算术逻辑运算;(3)操作控制:在微处理器和存储器或者I/O之间传送数据;(4)时间控制:程序流向控制。存储器:用来存放数据和指令。I/O接口:主机和外设间的桥梁,提供数据缓冲驱动、信号电平转换、信息转换、地址译码、定时控制等各种功能。I/O设备:输入原始数据和程序,转换成计算机能识别的信息,送入存储器去等待处理。输出运算结果。总线:连接计算机系统中各功能部件的信息通道。13. 设CS=1200H, IP=0100H, SS=5000H, SP=0400H, DS=2000H, SI=3000H, BX=0300H, (20300H)=4800H, (20302
12、H)=00FFH, TABLE=0500H, PROG_N标号的地址为1200:0278 H,PROG_F标号的地址为3400:0ABCH。说明下列每条指令执行完后,程序分别转移到何处执行?JMP指令(1)JMP PROG_N 段内直接近转移,目的地址为1200H:0278H(或12278H)(2)JMP BX 段内寄存器间接转移,目的地址为1200H:0300H(或12300H) (3)JMP BX 物理地址DS10H+BX=2000H10H+0300H=20300H (20300H)=4800HIP 段内存储器间接转移,目的地址为1200H:4800H(或16800H)(4)JMP FAR
13、 PROG_F 段间直接转移,目的地址为3400H:0ABCH(或34ABCH)(5)JMP DWORD PTRBX 物理地址DS10H+BX=2000H10H+0300H=20300H (20300H)=4800HIP, (20302H)=00FFHCS 段间存储器间接转移,目的地址为00FFH:4800H(或057F0H) JMP改为CALL后,目的地址与JMP相同。 (1)CALL PROG_N 段内直接调用,3字节指令,目的地址为1200H:0278H(或12278H),0103H入栈,SP=03FEH (2)CALL BX 段内寄存器间接调用,2字节指令,目的地址为1200H:030
14、0H(或12300H) ,0102H入栈,SP=03FEH (3)CALL BX 段内存储器间接调用,2字节指令,目的地址为1200H:4800H(或16800H),0102H入栈,SP=03FEH (4)CALL FAR PROG_F 段间直接调用,5字节指令,目的地址为3400H:0ABCH(或34ABCH),1200H和0105H分别入栈,SP=03FCH (5)CALL DWORD PTRBX 段间间接调用,2字节指令,目的地址为00FFH:4800H(或057F0H),1200H和0102H分别入栈,SP=03FCH12. 编程实现,从键盘输入一个十进制数09,查表求键入数字的七段代
15、码(共阳极LED显示器的段码),存入DL中,并在键入数字之前,显示提示信息“Please input a number(09):”。STACK SEGMENT STACKDB 100 DUP(?)STACK ENDSDATA SEGMENT TABLE DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H BUF DB Please input one number(09):,0DH,0AH,$DATA ENDSCODESEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART: PUSH
16、 DS MOV AX,DATA MOV DS,AX MOV DX,OFFSET BUF MOV AH,09H INT 21H MOV AH,1 INT 21H AND AL,0FH MOV BX,OFFSET TABLE XLAT MOV DL,AL POP DS HLTCODEENDSEND START数字5的共阳极LED七段码为92H。22. 在DATA开始的4个单元中存放着一个32位数,求出其中的“1”的个数,并存入COUNT单元中。解:DATASEGMENT DATA1DB 0FEH,86H,7CH,35H COUNTDB 00HDATAENDSSTACK SEGMENTDB 100
17、DUP(?)STACK ENDSCODESEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:PUSH DSMOVAX,DATAMOVDS,AXMOVAX,STACK MOVSS,AXMOVSI,OFFSET DATA1MOVBX,SIMOVDX,SI+2MOVCX,32 XOR AL,AL LP1:RCR DX,1 RCR BX,1 JNC LP2 INC ALLP2:LOOP LP1 MOV COUNT,AL POP DS MOV AH,4CH INT 21H HLTCODE ENDS END START10. 编制两个通用过程,完成两位十六进制数转换成
18、ASCII码,并将ASCII码字符显示。(1)两位十六进制数转换成ASCII码设两位十六进制数存放在DL中,输出的ASCII码存放在BX中。CON PROC PUSH AX PUSH CX MOV CL, 4 MOV AL, DL AND AL, 0FH CMP AL, 0AH JNC LP1 ADD AL, 30H JMP LP2LP1: ADD AL, 37HLP2: MOV BL, AL MOV AL, DL SHR AL, CL AND AL, 0FH CMP AL, 0AH JNC LP3 ADD AL, 30H JMP LP4LP3: ADD AL, 37HLP4: MOV BH,
19、 AL POP CX POP AX RETCON ENDP四位十六进制数转换成ASCII码,设四位十六进制数存放在存储器BUF1单元中,输出的ASCII码存放在存储器BUF2开始的单元中。CON PROC PUSH AX PUSH CX PUSH DX MOV DI, OFFSET BUF2 MOV SI, OFFSET BUF1 MOV CL, 4 MOV DH, 4 MOV DX, SILP1: ROL DX, CL MOV AL, DL AND AL, 0F ADD AL, 30H CMP AL, 3AH JC LP2 ADD AL, 07HLP2: MOV DI, AL INC DI
20、DEC CH JNZ LP1 POP DX POP CX POP AX RETCON ENDP(2)ASCII码字符显示设2个ASCII码字符在BX中。DISP PROC PUSH AX MOV DL, BL MOV AH, 2 INT 21HMOV DL, BH INT 21H POP AX RETDISP ENDP13. 将键盘上输入的一位为十六进制数转换成十进制数,在屏幕上显示。DATASEGMENT DATA1DB 10 DUP(?) DATA2DB 10 DUP(?)DATAENDSSTACK SEGMENT STACKDB 100 DUP(?)STACK ENDSCODESEGME
21、NT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:PUSH DSMOV AX,DATA MOV DS,AXKEY: MOV AH,1 INT 21HZH: CMP AL,3AH JAE ZH1 SUB AL,30HJMP ZH2ZH1: SUB AL,37H ADD AL,0 DAAZH2: MOV BL,AL AND AL,0F0H MOV CL,4 SHR AL,CL ADD AL,30H MOV BH,AL MOV AL,BL AND AL,0FH ADD AL,30H MOV BL,AL DISP: MOV DL,BHMOV AH,2INT 21HMOV
22、DL,BLMOV AH,2INT 21HPOP DSMOVAH,4CHINT21HHLTCODE ENDS END START22. 编程序统计学生的数学成绩,分别归类9099分,8089分,7079分,6069分及60分以下,并将各段的人数送入内存单元中。解:STACK SEGMENTDB 100 DUP(?)STACK ENDSDATASEGMENT DATA1DB 200 DUP(?) DATA2DB 100 DUP(?) DATA3DB 10 DUP(?)DATAENDSCODESEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:PUSH DS M
23、OV AX,DATA MOV DS,AX XOR CX,CXKEY:MOV SI,OFFSET DATA1KEY1:MOVAH,1 INT 21H CMP AL,$ JZ ZH INC CX MOV SI,ALINC SIJMP KEY1ZH:MOV SI,OFFSET DATA1 MOV DI,OFFSET DATA2 SHR CX,1 PUSH CXZH1:MOV AL,SIAND AL,0FHSHL AL,1SHL AL,1SHL AL,1SHL AL,1MOV BL,ALINC SIMOV AL,SIAND AL,0FHOR AL,BLMOV DI,ALINC SIINC DILOOP
24、 ZH1TJ: POP CX MOV DI,OFFSET DATA2TJ0: MOV AL,DICMP AL,90H JNB TJ1CMP AL,80H JNB TJ2CMP AL,70H JNB TJ3CMP AL,60H JNB TJ4 INC 4DATA3 JMP TJ5TJ1: INC DATA3 JMP TJ5TJ2: INC 1DATA3 JMP TJ5TJ3: INC 2DATA3 JMP TJ5TJ4: INC 3DATA3TJ5: INC DI LOOP TJ0 POP DSMOVAH,4CHINT21HHLTCODE ENDS END START某班有七个同学的英语成绩低于
25、80分,分数存在ARRAY数组中,试编程完成以下工作:(1)给每人加5分,结果存到NEW数组中(2)把总分存到SUM单元中(3)把平均分存到AVERAGE单元中解:STACK SEGMENT STACKDB 100 DUP(?)STACK ENDSDATA SEGMENT ARRAY DB 7 DUP(?)NEW DB 7 DUP(?)SUM DW 0AVG DB 0DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV CX, 7 MOV SI, 0 MOV SUM, 0 MOV AH, 0LP1: MOV AL, ARRAYSI ADD AL, 05H DAA MOV NEWSI, AL ADD AL ,SUM DAA MOV SUM,AL ADC AH, 0 DAA MOV SUM+1, AH INC SI LOOP LP1 MOV AX, SUM MOV BL,07H DIV BL MOV AVG, AL HLTCODE ENDSEND START
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100