80x86汇编语言编程:用光标键控制字符串的移动


;程序运行后,提示输入字符串(字符数大于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


虽然给出了图片链接,恐怕,大家也看不到,将会显示“营造绿色网络环境...”。


那么,想要看图,只能看前面给出的题目链接,在百度知道的网页中,可看到我上传的插图。


看来,管理百度知道的工程师们,更敬业一些。


  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值