循环1次 02H 循环3次 04H 循环4次 05H
04H 0BH 10H
03H 01H 01H 00H
DX 00H 01H 00H
00H 00H
循环2次 03H 07H 02H 00H
结果:
AX BX CX (1) (2) (3)
20. 设8086CPU的时钟频率为5MHz,请编写延时5ms的子程序。 解:微机的主频率为5MHz
则:时钟周期=主频率的倒数=1/(5×10-6)=0.2μs
延时5ms需要的时钟周期数= 5ms/ 0.2μs=25000 延时子程序如下:
DELAY5:MOV CX,N 4 DLY1:NOP 3 ×N
LOOP DLY1 17 ×(N-1)+ 5 RET 16
应该有25000=4+ 3 ×N+ 17 ×(N-1)+ 5+16,才能实现要求的延时。则: N=1250=04E2H 延时子程为:
DELAY5:MOV CX,04E2H DLY1:NOP
LOOP DLY1 RET
第4章作业
P153
5. 阅读下列程序,说明每条指令执行后的结果是什么?
X1 DB 65H, 78H X2 DW 06FFH, 5200H X3 DD ?
GO: MOV AL, TYPE X1 MOV BL, TYPE X2 MOV CL, TYPE X3
MOV AH, TYPE GO MOV BH, SIZE X2
MOV CH, LENGTH X3 解:
(1)前三条语句的功能是设置数据于数据段中,从数据段偏移地址0000H开始存放。
05H 02H 03H
10H 04H 07H
00H 03H 02H
执行一次,ZF=0,退出循环。 执行两次,ZF=1,退出循环。
11
变量 X1 X2 X3
程序汇编后结果如下:
偏移地址 0000H 0001H 0002H 0003H 0004H 0005H 0006H 0007H 0008H 0009H
数据 65H 78H FFH 06H 78H 00H 随机数 随机数 随机数 随机数
六条程序执行结果如下:
(AL)=01H;设置变量类型属性,字节数 (BL)=02H;设置变量类型属性,字节数 (CL)=04H;设置变量类型属性,字节数
(AH)=0FFH;设置GO显示类型,近标号,为-1,补码表示 (BH)=02H;设置数据类型,无DUP时,返回数据类型的字节数 (CH)=01H;无DUP时,返回1。 程序执行后结果如下:
调试程序如下:
12
STACK SEGMENT STACK DB 100 DUP(?) STACK ENDS DATA SEGMENT X1 DB 65H, 78H X2 DW 06FFH, 5200H X3 DD ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK START: PUSH DS MOV AX,DATA MOV DS,AX GO: MOV AL, TYPE X1 MOV BL, TYPE X2 MOV CL, TYPE X3 MOV AH, TYPE GO MOV BH, SIZE X2 MOV CH, LENGTH X3 POP DS HLT CODE ENDS END START
6. 画出示意图,说明下列变量在内存中如何让存放?
A1 DB 12H, 34H A2 DB ?Right.? A3 DW 5678H A4 DB 3 DUP(?)
(1)设置数据于数据段中,从数据段偏移地址0000H开始存放。
变量 A1 A2 A3 A4
偏移地址 0000H 0001H 0002H 0003H 0004H 0005H 0006H 0007H 0008H 0009H 000AH 000BH
13
数据 12H 34H 52H 69H 67H 68H 74H 2EH 78H 56H 随机数 随机数
调试程序如下:
STACK SEGMENT STACK DB 100 DUP(?) STACK ENDS DATA SEGMENT A1 DB 12H, 34H A2 DB 'Right.' A3 DW 5678H A4 DB 3 DUP(?) DATA ENDS CODE SEGMENT
000CH 随机数 ASSUME CS:CODE,DS:DATA,SS:STACK START: PUSH DS MOV AX,DATA MOV DS,AX POP DS HLT CODE ENDS END START 程序汇编后结果如下:
12. 编程实现,从键盘输入一个十进制数0~9,查表求键入数字的七段代码(共阳极LED显示器的段码),存入DL中,并在键入数字之前,显示提示信息“Please input a number(0~9):”。 解:
STACK SEGMENT STACK
DB 100 DUP(?) STACK ENDS DATA SEGMENT
TABLE DB 0C0H, 0F9H, 0A4H, 0B0H, 99H, 92H, 82H, 0F8H, 80H, 90H BUF DB 'Please input one number(0~9):',0DH,0AH,'$'
14
DATA ENDS CODE
SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START: PUSH 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 HLT CODE
ENDS END START
调试结果:
数字5的共阳极LED七段码为92H。
15. 已知:在内存BUF开始的单元中,存在一串数据:58,75,36,42,89。编程找出其中的最小值存入MIN单元中,并将这个数显示在屏幕上。 解:
STACK SEGMENT STACK
DB 100 DUP(?) STACK ENDS DATA SEGMENT
15