;程序運行後,提示輸入字符串(字符數大於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
雖然給出了圖片鏈接,恐怕,大家也看不到,將會顯示“營造綠色網絡環境...”。
那麼,想要看圖,只能看前面給出的題目鏈接,在百度知道的網頁中,可看到我上傳的插圖。
看來,管理百度知道的工程師們,更敬業一些。