微机原理及应用 汇编语言程序设计 第32讲~第38讲 0.8 0.8 15
在首址为DAT的字数组中存放有100个无符号数,求出它们的平均值,并统计大于、等于及小于此平均数的个数。
1. 简述编程思想,画出流程图; 2. 编写完整的源程序。 1. 编程思想
先求出100个无符号数的和,除以100就是平均值;然后用每个数与平均值比较就可得出大于、等于及小于此平均数的个数。 2. 完整的汇编语言程序
STACK SEGMENT STACK DB 256 DUP(?) STACK ENDS DATA SEGMENT
DAT DB 100 DUP(?) LVEL DB 0 GDAT DB 0 EDAT DB 0 LDAT DB 0 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV CX,100 LEA SI,DAT MOV AX,0 L1: ADD AL,[SI] ADC AH,0 INC SI LOOP L1 MOV BL,100 DIV BL
MOV LVEL,AL MOV CX,100 LEA SI,DAT CMP [SI,AL JA DY JE XD INC LDAT
11
JMP L2
DY: INC GDAT JMP L2 XD: INC EDAT L2: INC SI LOOP L1
MOV AH,4CH INT 21H CODE ENDS
END START
微机原理及应用 汇编语言程序设计 第32讲~第38讲 0.8 0.8 15
编一个完整的汇编语言程序,求某数的绝对值,并将结果放回原处。STACK SEGMENT STACK DB 256 DUP(?) STACK ENDS DATA SEGMENT XADR DW 3456H DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,XADR TEST AX,8000H JNS DONE NEG AX
MOV XADR,AX MOV AH,4CH INT 21H CODE ENDS
END START
微机原理及应用 汇编语言程序设计 第32讲~第38讲 0.8 0.8
12
15
编一个完整的汇编语言程序,完成将以DSRC为首址的连续的100个字节搬家到DDST以下单元。
STACK SEGMENT STACK DB 256 DUP(?) STACK ENDS DATA SEGMENT
DSRC DB 100 DUP(?) DDST DB DUP(?) DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX LEA SI,DSRC LEA DI,DDST MOV CX,100 NEXT: MOV AL,[SI] MOV [DI],AL INC SI INC DI
LOOP NEXT MOV AH,4CH INT 21H CODE ENDS
END START
微机原理及应用 汇编语言程序设计 第32讲~第38讲 0.8 0.8 15
编写FAR类型子程序实现以十六进制数在屏幕上显示AL的内容。 1. 写出编程思想。 2. 编写完整的源程序。 CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK DISPLAY PROC FAR
PUSH AX PUSH CX PUSH DX
13
PUSH AX MOV CL,4 ;处理高位十六进制数
SHR AL,CL CALL CHANG ;十六进制数变换成ASCII码
MOV AH,02 MOV DL,AL INT 21H ;显示一位字符
POP AX AND AL,0FH ;处理低位十六进制数 CALL CHANG
;十六进制数变换成ASCII码
MOV AH,02 MOV DL,AL INT 21H ;显示一位字符
POP DX POP CX POP AX RET DISPAL ENDP
CODE ENDS
END DISPLAY
MOV AH,4CH INT 21H CODE ENDS
END START
微机原理及应用 汇编语言程序设计 第32讲~第38讲 0.8 0.8 15
编写FAR类型子程序实现统计一个字(AX)中“1”的个数。
14
1.写出编程思想。 2.编写完整的源程序。 1.编程思想
由于AL中有两位十六进制数,每一位的值为0~9、0AH~0FH,在显示时需要将它们转换成相应的ASCII码,然后调用INT 21H的02H号功能进行显示。 2.完整的源程序 CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
COUNTER1 PROC NEAR PUSH AX
COU1:
SHR AX,1 ADC BL,0 LOOP COU1 MOV CX,16 XOR BL,BL
POP AX RET COUNTER1 ENDP
CODE ENDS
END DISPLAY
微机原理及应用 汇编语言程序设计 第32讲~第38讲 0.8 0.8 15
设在BUFFER中已经保存有字型数据(x1,x2,?,xn),其中前2个字节为数据的个数,计算数据的差分,并保存在DIFF缓冲区中。 1.写出编程思想。 2.编写完整的源程序。 1.编程思想
可根据数据的差分定义来编成计算,其公式为:
dxk?
xk?xk?12(k?1,2,?,n?1)
15