在屏幕上顯示顏色不斷變化的心形圖案,(字模提取工具)

 

;思路分析:將提取到的十六進制字節型字模數據均除以2
;放到內存段轉化成二進制
;1.主程序     2.除法子程序div2      3.顯示子程序show
;ps:每個段的長度不超過64kB,字模提取時行列改變時代碼中需改變的位置爲(1)(2)(3)(4)(5)
assume cs:code
data segment
DB 000H,000H,000H,01CH,00EH,000H,022H,011H,000H,041H,020H,080H,040H,0C0H,040H,040H
DB 000H,040H,040H,000H,040H,020H,000H,080H,010H,001H,000H,008H,002H,000H,004H,004H
DB 000H,002H,008H,000H,001H,010H,000H,000H,0A0H,000H,000H,040H,000H,000H,000H,000H
db 512 dup(0)
data ends
code segment
start:mov ax,data
      mov ds,ax
      mov si,0
      mov di,48  ;(1)空內存段的首地址

      mov cx,48   ;(2)data段字節總數
   s: mov al,ds:[si]
      mov ah,0
      mov bl,2
      call div2
      inc si
      loop s
    
      mov cx,6    ;顏色循環次數
color:mov di,48   ;(3)轉化後的數據填充到內存段的首地址
      mov dl,04h  
      call show1
      call  delay

      mov di,48
      mov dl,02h
      call show1
      call delay
     
      mov di,48
      mov dl,01h
      call show1
      call delay
      loop color

      mov ax,4c00h
      int 21h
;名稱:div2
;功能:將16進制轉化成二進制數放到內存段中
;參數:ds:[si]指向字符串首地址,ds:[di]指向餘數存放的首地址
  div2:  push cx
         push dx
         mov cx,8
   div2s0:div bl
          mov dl,al ;商暫存於dl中
   mov al,0
         push ax ;餘數入棧
         mov al,dl ;上次除法的商恢復到ax中
  loop div2s0

  mov cx,8
 div2s1: pop ax
         mov ds:[di],ah  ;餘數放入內存段中
  inc di
  loop div2s1
  pop dx
         pop cx
  ret
;名稱:show1
;功能:按字節顯示字符,當爲0時顯示*,當爲1時顯示笑臉
;參數:ds:[di]指向字符串首地址,dl=顏色
   show1:push ax
        push cx
 push si
        mov ax,0b800h
        mov es,ax
 mov bx,5*160
 mov si,2*10
 mov cx,16   ;(4)顯示的行數
shows0: push cx
 mov cx,3*8  ;(5)顯示的列數
 shows1:mov al,ds:[di]
 cmp al,1
 jne next1
 mov byte ptr es:[bx+si],03h;爲1則將此處變爲紅心
 mov byte ptr es:[bx+si+1],dl
 inc di
        add si,2
       loop shows1
       add bx,160
       mov si,2*10
       pop cx
       loop shows0

 next1:mov byte ptr es:[bx+si],0 ;爲0則將此處變爲0
        inc di
 add si,2
 loop shows1
 add bx,160
 mov si,2*10
 pop cx
 loop shows0
     pop si
     pop cx
     pop ax
     ret
     delay:push cx
       mov cx,2fffh
    s0:push cx
       mov cx,2fffh
   s1: nop
       loop s1
       pop cx
       loop s0
       pop cx
 ret
code ends

end start

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章