急求电梯的汇编程序代码

程序设计要求:
楼房共九层;
在2-8层有上、下楼呼叫按钮,1层有上楼呼叫,9层有下楼呼叫(用鼠标点击);
电梯内有开、关门控制,可通过键盘输入1-9指定所去楼层;
电梯根据呼叫请求按一定的策略运行,并对其运行过程在屏幕上进行模拟.

经过两天的编写,,写了一个大概样子吧
功能如下: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

;声明:由于本人能力和时间有限不能把所有的功能都完善,如有需要,可留言
;星云制作
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-12
经过两天的编写,,写了一个大概样子吧
功能如下: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
查看原帖>>
第2个回答  2008-09-01
高难度的问题,百度可能无法求解,还是建议和同事或同学共议!!
第3个回答  2008-08-30
实验设计吧。。
呵呵 我去年做过
不过笔记丢不见了