;程序运行后,提示输入字符串(字符数大于5个)。
;按右移键则字符以一定速率向右移动,移到右边则字符再从左边出来。
;按左移键,则字符向左移动,再从右边出来.行号不变。
;题目链接:
;http://zhidao.baidu.com/question/1495259981644380779.html
;做而论道编写的程序如下。
;===================================
ASSUME CS:CC, DS:QW
;-----------------------------------
QW SEGMENT
STR DB 81 DUP (20H)
IN_B DB 20, ?, 20 DUP (?)
FH DB 0
TIP1 DB 'Please input a string : $'
TIP2 DB 13, 10, 'You can press keys : '
DB 27, 26, ' change direction,'
DB 24, 25, ' change speed, ESC exit. $'
DL_X DW 800 ;控制移动速度
MAX EQU 3600 ;越大移动越慢
MIN EQU 200 ;越小移动越快
QW ENDS
;-----------------------------------
CC SEGMENT
S_T:
MOV AX, QW
MOV DS, AX
MOV AX, 0B800H
MOV ES, AX
;-------------------------
LEA DX, TIP1
MOV AH, 9
INT 21H
LEA DX, IN_B
MOV AH, 10
INT 21H
MOV BL, IN_B + 1
CMP BL, 5
JA GO_ON ;多于5个,就继续
JMP EXIT ;不足,则退出
GO_ON:
MOV BH, 0
LEA DX, TIP2
MOV AH, 9
INT 21H
MOV CX, BX
MOV SI, 0
LP1:
MOV AL, IN_B[SI + 2]
MOV STR[SI], AL
INC SI
LOOP LP1
M_LOOP:
CALL DISP_STR
CALL DELAY
MOV AH, 1 ;
INT 16H ;仅读状态
JZ YIDS ;为零就是没有按
MOV AH, 0 ;按下则再读
INT 16H ;AH=扫描码,AL=ASCII码
CMP AL, 27
JE EXIT
CMP AH, 48H ;
JE UP
CMP AH, 50H
JE DN
CMP AH, 4BH
JE ZL
CMP AH, 4DH
JE ZR
JMP YIDS ;转去移动
;----------------------------------
UP:
CMP DL_X, MIN
JB YIDS
SUB DL_X, 100
JMP YIDS
DN:
CMP DL_X, MAX
JA YIDS
ADD DL_X, 100
JMP YIDS
ZR: MOV FH, 0 ;改变方向
JMP YIDS
ZL: MOV FH, 1
YIDS: ;移动
TEST FH, 1 ;判别方向
JE RRR
CALL L_SHIFT
JMP M_LOOP
RRR:
CALL R_SHIFT
JMP M_LOOP
;---------------------------
EXIT:
MOV AH, 4CH
INT 21H
;-----------------------------------
DELAY:
PUSH DX
PUSH CX
MOV DX, DL_X
MOV CX, 0
DL_LP1:
NOP
NOP
LOOP DL_LP1
DEC DX
JNZ DL_LP1
POP CX
POP DX
RET
;-----------------------------------
DISP_STR:
MOV SI, 0
MOV DI, 0
MOV AH, 4EH
MOV CX, 80
LP2:
MOV AL, STR[SI]
MOV ES:[DI + 12 * 160], AX
INC SI
ADD DI, 2
LOOP LP2
RET
;-----------------------------------
R_SHIFT:
MOV SI, 79
MOV CX, 80
RS_LOOP:
MOV AL, STR[SI]
MOV STR[SI + 1], AL
DEC SI
LOOP RS_LOOP
MOV AL, STR[80]
MOV STR[0], AL
RET
;-----------------------------------
L_SHIFT:
MOV SI, 0
MOV AL, STR[0]
MOV STR[80], AL
MOV CX, 80
LS_LOOP:
MOV AL, STR[SI + 1]
MOV STR[SI], AL
INC SI
LOOP LS_LOOP
RET
;-----------------------------------
CC ENDS
END S_T
;===================================
以上程序经过编译、连接、执行后,显示的截图如下:
近来,在百度空间插图,都不正常。
在主页的页面,可以看到这篇文章已经插图了,但是,打开本页面,却不显示插图。
看来,百度空间项目组的工资,确实是应该涨一点了。
图片链接:
http://xiangce.baidu.com/picture/detail/9022db56d4d174875dbf619dbd33ec2b792b80e2
虽然给出了图片链接,恐怕,大家也看不到,将会显示“营造绿色网络环境...”。
那么,想要看图,只能看前面给出的题目链接,在百度知道的网页中,可看到我上传的插图。
看来,管理百度知道的工程师们,更敬业一些。