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
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值