经过两天的编写,,写了一个大概样子吧
功能如下:1,先假设没上楼之前,楼层运行看不到(没图形),可以当做随机看待。
2。当在某层按电梯开关后,在屏幕显示电梯停到该指定楼层的图形状态。
3。随后可以按想去的楼层,在屏幕显示电梯运动过程,,
4,可选择是否还执行本程序(坐电梯)
汇编运行本程序过程:
FLOOR YOU SIT NOW(1-9H): (输入某要在的楼层)
FLOOR YOU WANT GO(1-9H); (输入某想去的楼层)
WANT EXPERIENCE AGAIN(Y/N).. (选择是否继续)
源程序如下:(其中由于时间有限解释得不是很细)
;用于在模拟楼房方框左边显示楼层号码
.8086
FNUM MACRO
LOCAL ML1
PUSH CX
PUSH AX
PUSH DX
PUSH SI
MOV CH,13H
MOV CL,31H
MOV SI,9
ML1: MOV AH,02H
MOV DH,CH
MOV DL,1FH
INT 10H
MOV AH,02H
MOV DL,CL
INT 21H
DEC CH
INC CL
DEC SI
JNZ ML1
POP SI
POP DX
POP AX
POP CX
ENDM
;用于显示未上电梯时的模拟状态图形
SITUATION MACRO NOWF
LOCAL L1,L2,L3,L4,L5,L6,L7,L8,PASS1
MOV AH,03H
INT 10H
FNUM
MOV AH,02H
INT 10H
MOV SI,101H
L0: MOV AH,0CH
MOV DX,LASTF
MOV CX,SI
MOV AL,0
INT 10H
INC SI
CMP SI,120H
JNE L0
MOV BH,1H
MOV SI,100H
L1: MOV AH,0CH
MOV DX,20H
MOV CX,SI
MOV AL,BH
INT 10H
ADD SI,1H
INC BH
CMP SI,120H
JNE L1
MOV SI,20H
MOV BH,1H
L2: MOV AH,0CH
MOV DX,SI
MOV CX,100H
MOV AL,BH
INT 10H
ADD SI,1H
INC BH
CMP SI,9BH
JNE L2
MOV SI,100H
MOV BH,1H
L3: MOV AH,0CH
MOV DX,9BH
MOV CX,SI
MOV AL,BH
INT 10H
INC BH
INC SI
CMP SI,120H
JNE L3
MOV SI,20H
MOV BH,1H
L4: MOV AH,0CH
MOV DX,SI
MOV CX,120H
MOV AL,BH
INT 10H
ADD SI,1H
INC BH
CMP SI,9BH
JNE L4
MOV FLAG1,1
MOV DI,NOWF ;NOWFLOOR
MOV SI,101H
L5: MOV AH,0CH
MOV DX,DI
MOV CX,SI
MOV AL,1
INT 10H
INC SI
CMP SI,120H
JNE L5
ENDM
;用于显示电梯运动
MOVEF MACRO NOWF,LASTF
LOCAL L1,L2,L3,L4,L5,L6,L7,L8,PASS1
MOV BH,1H
MOV SI,100H
L1: MOV AH,0CH
MOV DX,20H
MOV CX,SI
MOV AL,BH
INT 10H
ADD SI,1H
INC BH
CMP SI,120H
JNE L1
MOV SI,20H
MOV BH,1H
L2: MOV AH,0CH
MOV DX,SI
MOV CX,100H
MOV AL,BH
INT 10H
ADD SI,1H
INC BH
CMP SI,9BH
JNE L2
MOV SI,100H
MOV BH,1H
L3: MOV AH,0CH
MOV DX,9BH
MOV CX,SI
MOV AL,BH
INT 10H
INC BH
INC SI
CMP SI,120H
JNE L3
MOV SI,20H
MOV BH,1H
L4: MOV AH,0CH
MOV DX,SI
MOV CX,120H
MOV AL,BH
INT 10H
ADD SI,1H
INC BH
CMP SI,9BH
JNE L4
MOV FLAG1,1
MOV DI,NOWF ;NOWFLOOR
L6: MOV SI,101H
L5: MOV AH,0CH
MOV DX,DI
MOV CX,SI
MOV AL,1
INT 10H
INC SI
CMP SI,120H
JNE L5
MOV AX,FLAG1
CMP AX,1
JNE PASS1
XOR AX,AX
MOV FLAG1,AX
MOV AH,09H
MOV DX,OFFSET MSGEN
INT 21H
MOV DX,OFFSET MSG3
INT 21H
MOV AH,01H
INT 21H
PASS1:MOV BX,06FFH ;可修改速度
MOV CX,0FFFFH
TIME: LOOP TIME ;延时
DEC BX
CMP BX,0
JNE TIME
MOV SI,101H
L7: MOV AH,0CH
MOV DX,DI
MOV CX,SI
MOV AL,0
INT 10H
INC SI
CMP SI,120H
JNE L7
MOV AX,NOWF
CMP AX,LASTF
JA PASS2
INC DI
JMP PASS3
PASS2: CMP AX,LASTF
JNE PASS4
JMP PASS3
PASS4: DEC DI
PASS3:
CMP DI,LASTF ;LASTFLOOR
JNE L6
MOV SI,101H
L8: MOV AH,0CH
MOV DX,DI
MOV CX,SI
MOV AL,1
INT 10H
INC SI
CMP SI,120H
JNE L8
ENDM
;定义程序中要用到的数据段
DATA SEGMENT
MSG1 DB 'FLOOR YOU SIT NOW(JUST 1-9F):$'
MSG2 DB 'FLOOR YOU WANT GO(JUST 1-9F):$'
MSG3 DB 'INPUT ANY KEY TO START...$'
MSG4 DB 'WANT EXPERIENCE AGAIN (Y/N)..$'
MSGEN DB 0AH,0DH,'$'
NOWF DW ? ;NOWF变量表示原在楼层号码
LASTF DW ? ;LASTF表示目的楼层号码
FLAG1 DW 1 ;起一定小作用的变量
DATA ENDS
;定义程序中用到的堆栈段
STACK SEGMENT
BUFS DB 100 DUP(?)
TOPS LABEL WORD
STACK ENDS
;主代码段CODE1用于程序的执行或结束
CODE1 SEGMENT
ASSUME CS:CODE1, DS:DATA, SS:STACK
MAIN PROC
START: MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,TOPS
MOV AH,0H
MOV AL,04H
INT 10H
REPEAT1:
CALL FAR PTR ELEVATOR
MOV AH,09H
MOV DX,OFFSET MSGEN
INT 21H
MOV DX,OFFSET MSG4
INT 21H
MOV AH,01H
INT 21H
CMP AL,'Y'
JE REPEAT1
CMP AL,'y'
JE REPEAT1
MOV AH,4CH
INT 21H
RET
MAIN ENDP
CODE1 ENDS
;子段码CODE2用于控制楼层状态和运动
CODE2 SEGMENT
ELEVATOR PROC FAR
ASSUME CS:CODE2, DS:DATA, SS:STACK
MOV AX,DATA
MOV DS,AX
MOV AX,SS
MOV SS,AX
REPUT1:MOV AH,09H
MOV DX,OFFSET MSGEN
INT 21H
MOV DX,OFFSET MSG1
INT 21H
MOV AH,01H
INT 21H
CMP AL,'1'
JB REPUT1
CMP AL,'9'
JA REPUT1
SUB AL,30H
XOR AH,AH
DEC AX
MOV DX,08H
MUL DX
MOV DX,AX
MOV AX,9BH
SUB AX,DX
MOV NOWF,AX
SITUATION NOWF
REPUT2: MOV AH,09H
MOV DX,OFFSET MSGEN
INT 21H
MOV DX,OFFSET MSG2
INT 21H
MOV AH,01H
INT 21H
XOR AH,AH
CMP AL,'1'
JB REPUT2
CMP AL,'9'
JG REPUT2
SUB AL,30H
XOR AH,AH
DEC AX
XOR DX,DX
MOV DX,AX
MOV AX,08H
SUB AX,DX
MOV DX,AX
MOV AX,08H
MUL DX
ADD AX,5BH
MOV LASTF,AX
CMP AX,NOWF
JE REPUT2
MOVEF NOWF,LASTF
RETF
ELEVATOR ENDP
CODE2 ENDS
END START
;声明:由于本人能力和时间有限不能把所有的功能都完善,如有需要,可留言
;星云制作
温馨提示:答案为网友推荐,仅供参考