王爽汇编程序设计练习题

王爽汇编程序设计项目

程序设计项目一

data segment

     dw ?

data ends

end

要求:

只在定义的数据段'?'中加入相关的内容,使得上面的程序可以在屏幕中间显示一个绿色的字符'A'。

汇编源程序设计如下:

assume  cs:data
data segment

     dw 61h

 start:mov ax,data
       mov ds,ax
       mov bx,0

       mov ax,0b800h
       mov es,ax

       mov cx,0
       mov cl,ds:[bx]
       mov ch,00000010b                     
       mov es:[2000],cx

       mov ax,4c00h
       int 21h

data ends
end start

通过此程序设计学习到了:一个有意义、完整的汇编源程序必须有至少有一个代码段。

程序设计项目二

对加密的字符串进行解密。

要求:

(1)加密的字符串放在Cryptography段。

(2)解密方法:将Cryptography段的每个字符的ASCII值减去1。

(3)用汇编语言实现程序,将Cryptography段的数据按照解密方法进行解密,将解密后的数据放在PlainText段,然后再把解密之后的字符串以白底蓝字方式显示到屏幕中间。

(4)密文和明文的数据段定义如下:

Cryptography segment

        db 'tqsfbe!zpvs!xjoht'

        db '!!cf!zpvs!nbtufs!'

Cryptography ends

 

PlainText segment

        db 2*17 dup (' ')

PlainText ends

汇编源程序设计如下 :

assume ds:cryptography,cs:code
cryptography segment
 db 'tqsfbe!zpvs!xjoht'
 db '!!cf!zpvs!nbtufs!'
cryptography ends
plainText segment
   db 34 dup ('0')
plainText ends
code segment
    start:mov ax,cryptography
          mov ds,ax
          mov bx,0
          mov di,34

          mov ax,0b800h
          mov es,ax

          mov cx,0
          mov al,0
          mov cx,34
       s: mov al, ds:[bx]
          dec al
          mov ds:[di],al
          inc bx
          inc di
          loop s

          mov di,34
          mov bx,46      //列
          mov si,1920    //行
          mov cx,34
      s1: mov ah,01110001b
          mov al,ds:[di]
          inc di
          mov es:[si+bx],ax
          inc si
          inc si
          loop s1

          mov ax,4c00h
          int 21h
code ends
end start

结果:


 通过此程序设计学习到了:定位显示时,列不能取奇数

程序设计项目三   

加、减、除三则运算。

要求:

(1)读取字符串的内容,判断第四个字符是'+'、'-'或'/',然后按照相应的符号进行运算,并把运算结果转换为字符串存放在等号后面,最后把算式显示到屏幕中间,白底蓝字。

(2)注意数字字符的ASCII与数字的对应关系,数字的数值加30H为这个数字的字符所对应的ASCII。

(3)数据段定义如下:

Calculate segment

        db '1. 3/1=         '

        db '2. 5+3=         '

        db '3. 9-3=         '

        db '4. 4+5=         '

Calculate ends

 

汇编源程序设计如下:

assume ds:calculate,cs:code
calculate segment
     db '1. 3/1=         '
     db '2. 5+3=         '
     db '3. 9-3=         '
     db '4. 4+5=         '
calculate ends
stack segment
      dw 64 dup (0)
stack ends
code segment
    start:mov ax,calculate
          mov ds,ax
          mov di,3

          mov ax,stack
          mov ss,ax
          mov sp,128
     

          mov ax,0b800h
          mov es,ax
          mov si,0
          mov bx,1504

          mov cx,4
        s:push cx
          mov ah,0
          mov al,ds:[di]          
          call jian0      
          inc di                     
       
          mov ch,0
          mov cl,ds:[di]

          push cx
          mov dl,cl
        call chufapanduan
          mov cl,dl
          jcxz chufa
       k1:pop cx
          push cx
          mov dl,cl
        call jianfapanduan
          mov cl,dl
          jcxz jianfa
       k3:pop cx
          push cx
          mov dl,cl
       call jiafapanduan
          mov cl,dl
          jcxz jiafa
       k2:pop cx
          pop cx
          add di,12
          loop s
          mov cx,0
          mov cx,4
       g2:push cx
          mov cx,16
       g1:mov ah,01110001b
          mov al,ds:[si]
          inc si
          mov es:[bx],ax
          inc bx
          inc bx
          loop g1
          add bx,128
          pop cx
          loop g2

          
          mov ax,4c00h
          int 21h
      chufa:push ax
            inc di
            mov ch,0
            mov cl,ds:[di]
            mov al,cl
            call jian0
            mov cl,al
            pop ax
            div cl
            inc di
            inc di
            add al,30h
            mov ds:[di],al
            
          jmp short k1
      jiafa:push ax
            inc di
            mov ch,0
            mov cl,ds:[di]
            mov al,cl
            call jian0
            mov cl,al
            pop ax
            add al,cl
            add al,30h
            inc di
            inc di
            mov ds:[di],al      
            jmp short k2
     jianfa:push ax
            inc di
            mov ch,0
            mov cl,ds:[di]
            mov al,cl
            call jian0
            mov cl,al
            pop ax
         s5:dec al
            loop s5
            add al,30h
            inc di
            inc di
            mov ds:[di],al
            jmp short k3

       jian0:                                                      
            mov cx,30h
          s1:dec al
            loop s1
            ret

chufapanduan:mov cx,2fh
           s2:dec dl
              loop s2
              ret
jianfapanduan:mov cx,2dh
           s3:dec dl
              loop s3
            ret
jiafapanduan:mov cx,2bh
          s4:dec dl
             loop s4
             ret
      
code ends
end start

结果:


学会了:

分别设计了三个子程序分别用于除法、减法、加法的判断

通过哪种判断就执行哪种计算方法

从data段的段地址di=3开始扫描

下一行是3+16 、3+16+16以此下去

结果保存等式=后面

最后显示在屏幕中间


程序设计项目四

编程计算x(x>2)的y(y>2)次方。使用add指令实现。

另,若学到第10章,使用两种方式实现:

(1)只使用add指令实现;

(2)只使用mul指令实现;

并将计算式显示在屏幕中央。

 

例如:

计算4的3次方。在屏幕中央显示格式如下:

4

^

3

-----

64

 

注意:结果不能超过16位寄存器可存储的最大值。

汇编源程序设计如下:

1、只使用add指令实现

assume cs:code
code segment
 start:mov ax,0b800h
       mov es,ax
       mov si,1504
    
       mov ax,2
       mov dx,3

       push dx
       push ax
       mov di,ax
       dec dx
       mov cx,dx
       mov dx,ax
    s1:push cx
       mov bx,ax
       dec ax
       mov cx,ax
       inc ax
       mov ax,dx
       mov bx,dx
    s2:add ax,bx
       loop s2
       pop cx
       mov dx,ax
       mov ax,di
       loop s1

       mov ax,dx
       mov cx,ax
       pop ax
       pop dx
     
       
       add ax,30h
       mov ah,00000001b
       add dx,30h
       mov dh,00000001b

       mov es:[si],ax
       add si,160
       mov bh,00000001b
       mov bl,5eh
       mov word ptr es:[si],bx
       add si,160
       mov es:[si],dx
       add si,158
       mov bh,00000001b
       mov bl,2dh
       mov word ptr es:[si],bx
       add si,2
       mov word ptr es:[si],bx
       add si,2
       mov word ptr es:[si],bx
       add si,2
       mov word ptr es:[si],bx
       add si,156

       mov di,0
       mov ax,cx
       mov bx,10

     h:mov dx,0
       div bx
       push dx
       inc di
       mov cx,ax
       jcxz ok1
       jmp short h

   ok1:mov cx,di
   h1: pop dx
       add dx,30h
       mov dh,00000001b
       mov es:[si],dx
       add si,2
     loop h1
     mov ax,4c00h
     int 21h
code ends
end start
结果:

会做项目三的基础上完成此程序并不难

程序设计项目五

定义一个数据段如下:

data segment

    db 'h12E332l@L#O*&^!88nI@cE$%%$T1O m33E44E55t y77O88u!()'

    db '?'

data ends

注意:第一行字符串为待处理的数据,'?'为字符串结束符号。

 

设计程序完成如下操作:

(1)去掉除字母、空格、'!'之外的字符;

(2) 通过内存间的数据交换,将数据段中的字符串修改为'Hello!Nice tomeet you!';

(3)在屏幕正中打印处理好后的数据。

 

完成程序后思考:

(1)如何设计程序,程序代码量最少;

(2)如何设计程序,程序执行速度最快;

(3)如何设计程序,使得程序具有通用性。

注意:

(1)'?'、'!'和空格分别假定为字符串的结束符、一句话的最后的标点和单词间的间隔符,都不属于干扰符号。

(2)这里的通用性是指:任意带有其他符号干扰的一组字符串都能够通过程序被处理为具有如下特点的英文段落:段落中只包含字母、空格、'!'三种符号。段落中的每句话都是以开头字母为大写,'!'为结束标点的句子。

 

汇编源程序设计如下:

 assume cs:code
data segment
   db 'h12E3321@L#o*&^!88nI@cE$T1o m33E44E55t y77o88u!()'
   db '?'
data ends
stack segment
      dw 64 dup (0)
stack ends
code segment

    start:mov ax,data
          mov ds,ax
          mov si,0

          mov ax,0b800h
          mov es,ax
          mov di,1440

          mov ah,0
          mov bh,0          
        s:mov al,ds:[si]
          inc si
         
          mov ah,0
          mov dl,al
          call zifu          
          jcxz xianshizifu
       zf:mov ah,0
           mov al,dl
           call gan
          jcxz xianshigan
       gg:mov ah,0
          mov al,dl
          call kongge
          jcxz xianshikong
       kk:mov ah,0
          mov al,dl
          call wenhao
          jcxz j
          
         jmp short s

xianshizifu:
            mov al,dl
            mov ch,0
            add bh,1
            dec bh
            dec bh
            mov cl,bh
            jcxz daxie
            or al,00100000b
        hh1:mov ah,00000001b                    
            mov es:[di],ax
            add di,2
         jmp short zf

        daxie:mov ch,0
              mov cl,20h
            da:dec al
               loop da
               mov bh,1
             jmp short hh1
xianshigan:mov al,dl
           mov ah,00000001b
           mov es:[di],ax
           add di,2
           mov bh,0
        jmp short gg
xianshikong:mov al,dl
            mov ah,00000001b
            mov es:[di],ax
            add di,2
            
         jmp short kk

        j:mov ax,4c00h
          int 21h


     zifu:
          or al,00100000b
          mov ch,0
          mov cl,60h
       z1:dec al
          loop z1
          mov cl,26       
       z2:mov bl,cl
          dec al
          mov cl,al
          jcxz z3
          mov cl,bl
          loop z2
          jmp short z4

       z3:add bh,1
       z4:mov cl,al
           ret

       gan:mov ch,0
           mov cl,21h
        g1:dec al
           loop g1
           mov cl,al
         ret

    kongge:mov ch,0
           mov cl,20h
     kong1:dec al
           loop kong1
           mov cl,al
        ret

    wenhao:mov ch,0
           mov cl,3fh
        w1:dec al
           loop w1
           mov cl,al
           ret

code ends 
end start   
结果:

此程序也是建立在项目三的基础上的,分别建四个子程序判断字符、

空格、感叹号、问号。

难点是:如何使每一句子开头的字母大写,句子与感叹号‘!’为结尾

       问号‘?’结束

                     

程序设计项目六

 

在屏幕中间显示:“中华”两个字。参看demo0.png示例。

 

提示:

通过字模提取工具,可以提取字的显示信息。


assume ds:data,cs:code
data segment          
      db 0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0
      db 0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0
      db 0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0
      db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
      db 1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1
      db 1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1
      db 1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1
      db 1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1
      db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
      db 0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0
      db 0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0
      db 0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0
      db 0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0
      db 0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0
      db 0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0
      db 0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0

      db 0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0
      db 0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0
      db 0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,0,0,0,0,0        
      db 0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0
      db 0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0
      db 0,0,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0
      db 0,0,1,1,0,0,0,1,1,0,0,1,1,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0
      db 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0
      db 0,0,0,0,0,0,0,1,1,0,0,0,0,1,1,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0
      db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
      db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
      db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
      db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
      db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
      db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
      db 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
      
data ends
stack segment
   dw 64 dup (0)
stack ends
code segment

    start:mov ax,0b800h
          mov es,ax
          mov dl,160
          mov al,16
          mul dl

          mov di,ax
          add di,20

          mov ax,stack
          mov ss,ax
          mov sp,64

          mov ax,data
          mov ds,ax
          mov si,0

          call qingp

          mov bh,16
          mov bl,25

          call zhong
          mov di,0

          mov dl,160
          mov al,16
          mul dl

          mov di,ax
          add di,80


          mov bh,16
          mov bl,30

          call hua
          jmp short ok


    zhong:
          mov ch,0
          mov cl,bh
          

       s2:push cx

          mov ch,0
          mov cl,bl
          
       s1:push cx
          mov ch,0
          mov cl,ds:[si]
          inc si
          jcxz buxianshi

          mov ax, 0403h
          mov es:[di],ax
          add di,2
       fh:pop cx
          loop s1
          add di,110
          pop cx
          loop s2
      ret
 buxianshi:mov ax,0000h
           mov es:[di],ax
           add di,2
         jmp short fh
    hua:
          mov ch,0
          mov cl,bh
   
       s3:push cx

          mov ch,0
          mov cl,bl
          
       s4:push cx
          mov ch,0
          mov cl,ds:[si]
          inc si
          jcxz buxianshi1

          mov ax, 0403h
          mov es:[di],ax
          add di,2
      fh1:pop cx
          loop s4
          add di,100
          pop cx
          loop s3

      ret
 buxianshi1:mov ax,0000h
           mov es:[di],ax
           add di,2
         jmp short fh1
  qingp:push cx
        push di
        mov di,0
        mov cx,9000
        mov ax,0000h

    k1:  mov es:[di],ax
         add di,2 
         loop k1
            pop di
            pop cx
         ret

        ok:mov ax,4c00h
          int 21h
code ends
end start
(完)
程序设计项目七
在屏幕上显示一个兔子图形。参看下图示例。
https://img-my.csdn.net/uploads/201505/30/1432952876_4968.gif
源代码如下:
assume ds:data,cs:code
data segment          
      db 0,0,0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0
      db 0,0,0,0,1,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0
      db 0,0,0,0,0,1,0,0,1,0,0,0,0,1,0,0,1,0,0,0,0
      db 0,0,0,0,0,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0
      db 0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0
      db 0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0
      db 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0
      db 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0
      db 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0
      db 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0
      db 1,0,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0,0,1,0
      db 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0
      db 1,0,0,0,2,0,0,0,0,0,3,0,0,0,0,2,0,0,0,1,0
      db 0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0
      db 0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0
data ends
stack segment
   dw 64 dup (0)
stack ends
code segment

    start:mov ax,0b800h
          mov es,ax
          mov dl,160
          mov al,6
          mul dl

          mov di,ax
          add di,60

          mov ax,stack
          mov ss,ax
          mov sp,64

          mov ax,data
          mov ds,ax
          mov si,0

          mov bh,15
          mov bl,21
          call qingp
     xun: call xunhuan

xunhuan:
          mov ah,02h
          call tuxing
          call cpudeng
          call cpudeng
          call cpudeng
          mov si,0
          mov di,1020
          mov ah,01h
          call tuxing
          call cpudeng
          call cpudeng
          call cpudeng
          mov si,0
          mov di,1020
          mov ah,03h
          call tuxing
          call cpudeng
          call cpudeng
          call cpudeng

          mov si,0
          mov di,1020
          mov ah,04h
          call tuxing
          call cpudeng
          call cpudeng
          call cpudeng

          mov si,0
          mov di,1020
           jmp short xun
           ret      
        jmp short ok
    cpudeng: push cx
             push ax
             mov cx,0ffffh
          k2:mov ax,0000h
             mov es:[0],ax
            loop k2
            pop ax
            pop cx
            ret
    tuxing:

          push cx
          mov ch,0
          mov cl,bh
          

       s2:push cx

          mov ch,0
          mov cl,bl
          
       s1:push cx
          mov ch,0
          mov cl,ds:[si]
          inc si
          jcxz xianshidian
          dec cx
          jcxz xianshixing
          dec cx
          jcxz jiuwo
          dec cx
        
          jcxz xianshizui
       fh3:
       fh2:
       fh1:
       fh:pop cx
          loop s1
          add di,118
          pop cx
          loop s2
          pop cx
          ret
 xianshidian:
             mov al,2eh
             mov es:[di],ax
             add di,2
             jmp short fh           
 xianshixing:mov al,2ah
             mov es:[di],ax
             add di,2
             jmp short fh1       
      jiuwo: mov al,03h
             mov es:[di],ax
             add di,2
             jmp short fh2

   xianshizui:mov al,04h
              mov es:[di],ax
              add di,2
              jmp short fh3
  qingp:push cx
        push di
        mov di,0
        mov cx,9000
        mov ax,0000h
    k1:  mov es:[di],ax
         add di,2      
         loop k1
            pop di
            pop cx
         ret
        ok:mov ax,4c00h
          int 21h
code ends
end start
程序设计项目八

实现笑脸阶梯走效果。参看demo2.gif示例。

demo2.gif

源代码(此代码在DOSBox下不能运行,在真实的DOS下能运行)

assume cs:code

stack segment

     dw 64 dup (0)

stack ends
code segment
    start:mov ax,0b800h
          mov es,ax
          mov dl,160
          mov al,8
          mul dl
          mov di,ax
          add di,80

          mov ax,stack
          mov ss,ax
          mov sp,64

          call qingp
          call xianshi

          mov dl,160
          mov al,19
          mul dl
          mov di,ax
         
          mov cx,3
       k6:push cx 
          mov cx,20
       k5:push cx


          mov ax,0204h
          mov es:[di],ax
        
          call cpudeng
          mov ax,0000h
          mov es:[di],ax
            add di,2
          pop cx
          loop k5
          call dec1

          pop cx
          loop k6

         
     dec1: mov cx,960
       k7: push cx
          dec di
          pop cx
          loop k7
          ret
          jmp short ok

 cpudeng:push cx
         push ax
         mov cx,1000
      k8:push cx
         mov cx,0ffffh
      k4:push cx
         mov ax,0000h
         mov es:[0],ax
         pop cx
         loop k4
         pop cx
         loop k8
         pop ax
         pop cx
         ret

 xianshi:mov cx,3
      k2:push cx

         mov cx,20
      k3:push cx
          mov ax,022eh
          mov es:[di],ax
          add di,2
          pop cx
          loop k3
          add di,880
          pop cx
          loop k2
          ret
         
    qingp:push cx
          push di
          mov di,0

          mov cx,9000
          mov ax,0000h
       k1:mov es:[di],ax
          add di,2

          loop k1
          pop di
          pop cx
          ret

       ok:mov ax,4c00h
          int 21h

code ends
end start

程序设计项目九

ASCII码按顺序在屏幕上竖列显示。参看demo3.gif示例。

要求:

(1)逐个显示字符,相邻的两个字符之间显示要有时间间隔。

(2)字符颜色为绿色。

(3)每列显示20个字符,列间距为5个字符。显示完128ASCII码,共需7列。

d
源代码 (此代码在DOSBox下不能运行,在真实的DOS下能运行)

assume cs:code

stack segment


     dw 64 dup (0)


stack ends

code segment

    start:mov ax,0b800h

          mov es,ax

          mov dl,160

          mov al,4

          mul dl

          mov di,ax

          add di,120


          mov ax,stack

          mov ss,ax

          mov sp,64


          call qingp

          

         

          call zifu

       ok:

   tuichu:     

          call qingp

          mov di,0

          mov dl,160

          mov al,4

          mul dl

          mov di,ax

          add di,120


           call zifu

         jmp short ok


        

     zifu:


          mov ah,00h

          mov al,00h

          mov cx,134

          

       k5:

          mov bx,cx


          mov cx,20

       k4:push cx          

          

          mov es:[di],ax

          call cpudeng

          call cpudeng

          add di,160

          mov ah,02h


          dec bx

          mov cx,bx

          jcxz tuichu

          add al,1

          pop cx

          loop k4

        

        

          call jdi

          mov cx,bx

          loop k5

        

          ret



     jdi:push cx

         mov cx,3210

       k7:

          dec di


          loop k7

          pop cx

          ret

 

 cpudeng:push cx

         push ax

         mov cx,1000

      k1:push cx

         mov cx,0ffffh

      k2:push cx

         mov ax,0000h

         mov es:[0],ax

         pop cx

         loop k2

         pop cx

         loop k1

         pop ax

         pop cx

         ret        

    qingp:push cx

          push di

          mov di,0


          mov cx,9000

          mov ax,0000h

       k3:mov es:[di],ax

          add di,2


          loop k3

          pop di

          pop cx

          ret


          mov ax,4c00h

          int 21h


code ends

end start

程序设计项目十

在屏幕上斜着显示三个‘happy spring festival!’,字符串的颜色分别为蓝色、绿色和红色,并且各个字符串的颜色按规律变换。参看demo4.gif示例。

a10

源代码

assume cs:code

data segment

   

       db 'happy spring festival!',0

 

data ends

stack segment


     dw 64 dup (0)


stack ends

code segment


    start:mov ax,0b800h

          mov es,ax

          mov dl,160

          mov al,3

          mul dl

          mov di,ax

          add di,40


          mov ax,stack

          mov ss,ax

          mov sp,64


          mov ax,data

          mov ds,ax

          mov si,0

          call qingp

       k6:

          mov bh,02h

          mov bl,03h

          mov al,04h

          

          mov cx,3

      k5: 

          push cx

          mov ah,bh

          mov di,520

          mov si,0

          call xianshi3


          mov ah,bl

          mov di,514

          mov si,0

          call xianshi2


          mov ah,al

          mov di,508

          mov si,0

          call xianshi1


          push bx

          mov bh,bl

          mov bl,al

          pop cx

          mov al,ch

          call cpudeng

          call cpudeng

          pop cx

          loop k5

          jmp short k6

 xianshi1:push ax

          push cx

        

         mov cx,0

     s1:

         mov al,ds:[si]

         mov cl,al

         jcxz tuichu1

         mov es:[di],ax


         inc si

         add di,164 

         jmp short s1


  tuichu1:

           pop cx

           pop ax

         ret


 xianshi2:push ax

          push cx

        

         mov cx,0

     s2:

         mov al,ds:[si]

         mov cl,al

         jcxz tuichu2

         mov es:[di],ax


         inc si

         add di,164 

         jmp short s2


  tuichu2:

           pop cx

           pop ax

         ret


 xianshi3:push ax

          push cx

        

         mov cx,0

     s3:

         mov al,ds:[si]

         mov cl,al

         jcxz tuichu3

         mov es:[di],ax


         inc si

         add di,164 

         jmp short s3

  tuichu3:

           pop cx

           pop ax

         ret


 cpudeng:push cx

         push ax

         mov cx,1000

      k1:push cx

         mov cx,0ffffh

      k2:push cx

         mov ax,0000h

         mov es:[0],ax

         pop cx

         loop k2

         pop cx

         loop k1

         pop ax

         pop cx

         ret     

   

    qingp:push ax

          push cx

          push di

          mov di,0

          mov cx,9000

          mov ax,0000h

       k3:mov es:[di],ax

          add di,2

          loop k3

          pop di

          pop cx

          pop ax

          ret      

code ends

end start


程序设计项目十一

动态画出一个棵七彩圣诞树。参看demo5.gif示例。

a11

程序设计项目十二

编写字符雨程序。参看demo6.gif示例。

  

提示:

1)每列是一个单独的单元,在数据段中定义的数据要保证各列要显示的字符和开始显示的时机不一样。

2)每一滴雨完全移出屏幕后,该雨滴所在列生成一个新的雨滴。

源代码

assume cs:code

data segment

   

       db 'ABCDEFGHIJKLNMOPQRSTUVWXYZ123456789ABCDE',0

      

data ends

stack segment


     dw 64 dup (0)


stack ends

code segment


    start:mov ax,0b800h

          mov es,ax

          mov di,0


          mov ax,stack

          mov ss,ax

          mov sp,64


          mov ax,data

          mov ds,ax

          mov si,0



     ok:

         call qingp

         mov cx,1


          push cx

          call pingmu



          mov bl,8

          mov ax,80

          call sd1


          mov ax,1176

          mov bl,6

          call sd2


          mov bl,10

          mov ax,1352

          call sd1


          mov bl,10

          mov ax,2760

          call sd2



          mov bl,8

          mov ax,2956

          call sd3


          mov bl,2

          mov ax,4080

          call sd2


          mov bl,9

          mov ax,4088

          call sd4



          mov bl,10

          mov ax,2812

          call sd2



          mov bl,10

          mov ax,2684

          call sd5



          mov ax,1212

          mov bl,6

          call sd2



          mov bl,8

          mov ax,1068

          call sd5



          pop cx

         jmp short ok


          mov ax,4c00h

          int 21h

      sd1:push cx

          push ax

          mov cx,0


          mov di,ax

          mov cl,bl


          mov ah,17

      sh1:push cx

          mov al,01h

          mov es:[di],ax

          add di,156

          add ah,17


          call cpudeng

          call cpudeng


          pop cx

          loop sh1

          pop cx

          pop ax

          ret


      sd2:push cx

          push ax


          mov cx,0

          mov di,ax

          mov cl,bl

          mov ah,17


      sh2:push cx

          mov al,01h

          mov es:[di],ax

          add di,4

          add ah,17


          call cpudeng

          call cpudeng


          pop cx

          loop sh2

          pop cx

          pop ax

          ret

      sd3:push cx

          push ax


          mov cx,0

          mov di,ax

          mov cl,bl

          mov ah,17


      sh3:push cx

          mov al,01h

          mov es:[di],ax

          add di,160

          add ah,17


          call cpudeng

          call cpudeng


          pop cx

          loop sh3

          pop cx

          pop ax

          ret



      sd4:push cx

          push ax


          mov cx,0

          mov di,ax

          mov cl,bl

          mov ah,17


      sh4:push cx

          mov al,01h

          mov es:[di],ax

          call j160

          add ah,17


          call cpudeng

          call cpudeng


          pop cx

          loop sh4

          pop cx

          pop ax

          ret




      sd5:push cx

          push ax


          mov cx,0

          mov di,ax

          mov cl,bl

          mov ah,17


      sh5:push cx

          mov al,01h

          mov es:[di],ax

          call j164

          add ah,17


          call cpudeng

          call cpudeng


          pop cx

          loop sh5

          pop cx

          pop ax

          ret


     j164:push ax

          push cx

          mov cx,164

       x6:dec di

          

          loop x6

          pop cx

          pop ax

          ret



     j160:push ax

          push cx

          mov cx,160

       x5:dec di

          

          loop x5

          pop cx

          pop ax

          ret




   pingmu:push ax

          push cx

          push bx


          mov bx,0

          mov ax,4004


          mov cx,26

     x3:  push cx


          mov di,bx

          call xianxia

          mov bx,di


          mov di,ax

          call xianshang

          call j320

          mov ax,di



          call cpudeng

          call cpudeng


          pop cx

          loop x3

          pop bx

          pop cx

          pop ax


          ret




     j320:push ax

          push cx

          mov cx,320

       x4:dec di

          

          loop x4

          pop cx

          pop ax

          ret

xianshang:push ax

          push cx


          mov si,1

          

       x2:mov ah,02h


           mov al,ds:[si]

          mov cx,0

          mov cl,al

          jcxz ling2

         

          mov es:[di],ax

          add si,2


          add di,8

          loop x2

     ling2:


          pop cx

          pop ax            

          ret


  xianxia:push ax

          push cx

          mov si,0

         

       x1:mov ah,02h

          mov al,ds:[si]

          mov es:[di],ax

          

          mov cx,0

          mov cl,al

          jcxz ling1

          add si,2


          add di,8

          loop x1

    ling1:

          pop cx

          pop ax

          ret


 cpudeng:push bx

         push cx

         push ax


         mov cx,1000

      k1:push cx

         mov cx,0ffffh

      k2:push cx

         mov ax,0000h

         mov es:[5000],ax

         pop cx

         loop k2

         pop cx

         loop k1


         pop ax

         pop cx

         pop bx

         ret


    qingp:push ax

          push cx

          push di


          mov di,0


          mov cx,9000

          mov ax,0000h

       k3:mov es:[di],ax

          add di,2


          loop k3

          pop di

          pop cx

          pop ax

          ret


      

code ends

end start


a12

程序设计项目十三 

编写左手逃生法则演示程序。参看demo7.gif示例。

提示:

1)地图中只有三种元素:墙、通道、出口。设计地图时,要给不同的元素赋予不同的编码。

2)什么情况下改变行进的方向。遇到这些情况后根据当前方向决定下一步方向变化的规律是什么。

3)左手逃生法则简述:在一个有出入口,没有回路的迷宫中,一直保持左手贴着墙壁向前走,总能找到迷宫出口。

a13

222

33



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hi竹子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值