汇编语言编程 编写一程序,使得计算机屏幕上每隔五秒显示一行字符"Good morning",按任意

汇编语言编程 编写一程序,使得计算机屏幕上每隔五秒显示一行字符"Good morning",按任意,第1张

1.调试通过 ,用MASM编译,其实逻辑很简单,用中断21H的9号中断服务程序显示字符串Good morning

(注意,字符串应该以$结束),代码如下:

MOV DX,OFFSET CONTENT

MOV AH,9

INT 21H

2。然后调用延时子程序延时5s,我的延时不一定精确,只是象征性的延时,你可以戚局根据延时时间具册悄体计算,很容易的,延时子程序在DELAY,你只需改变州仔渣BX,CX的值即可改变延时时间

3.最后用中断16H的1号中断服务程序判断是否有按键按下,若有键盘按下,该功能置ZF = 0,否则 ZF = 1,代码如下:

MOV AH,01H

INT 16H

4.判断ZF是否为1 ,为1 ,证明无按键按下,跳转A1继续输出字符串,否则结束程序

以上就是我的程序的思路,是不是很简单啊,具体程序如下,如果有什么问题可以继续问,一定为你解答!

DATA SEGMENT

CONTENT DB 'Good morning ','$'

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

A1:

MOV DX,OFFSET CONTENT

MOV AH,9

INT 21H

CALL DELAY

MOV AH,01H

INT 16H

JZ A1

MOV AH,4CH

INT 21H

DELAY PROC NEAR

MOV BX,25000

A2:MOV CX,20000

LOOP $

DEC BX

JNZ A2

RET

DELAY ENDP

CODE ENDS

END START

        CODE  SEGMENT

              ASSUME    CS:CODE

      START:

              MOV       CX,3         设外循环 3次

         @0:

              PUSH      CX

              MOV       CX,10        设内循环 10次

         @1:

              MOV       AH,2

              MOV       DX,CX

              DEC       DX           将内循环变量 减一 后输出

              OR        DL,30H

            神纯指  INT       21H

              MOV       AX,18        延时 18 个单位 ,约等于1秒

              CALL      DELAY_PROC

              LOOP      @1

              CALL      LFCR         换行回车

              POP       CX

              LOOP      @0

              MOV       AH,4CH

              INT       21H

 

       LFCR:  PUSH      AX

              PUSH      DX

              MOV       AH,2

              MOV       DL,13

              INT       21H

              MOV       DL,10

              INT       21H

              POP       DX

              POP       AX

    游配          RET

 

===============================================================              

  DELAY_PROC  PROC      裤好NEAR        延迟子程式,  延迟   ax/18秒

              PUSH      ES

              PUSH      DX

              MOV       DX,40H

              MOV       ES,DX

              MOV       DX,ES:[006CH]           取系统1/18秒计数

              ADD       DX,AX        延时 x/18

    DELAY10:

              CMP       ES:[006CH],DX           时限到了?

              JBE       DELAY10     没

              POP       DX

              POP       ES

              RET

  DELAY_PROC  ENDP

============================================================

        CODE  ENDS

              END       START

对Sleep()函数不太了解漏棚橡,查了一下,此函数好像是静返旁态类型,只执行一次。对此程序,可和橘自己写一个延时函数,希望下面的代码对你有所帮助。

#include <iostream>

#include <ctime>

using namespace std

void delay( int sec ) // 延时sec秒

{

time_t start_time, cur_time

time( &start_time )

do {

time( &cur_time )

} while(( cur_time - start_time ) <sec )

}

void main()

{

char a[]={"一个一个出现!"}

for(int i=0i<14i++)

{

cout<<a[i]

delay(1)

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12562714.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存