矩形同心螺旋圈

來源:互聯網
上載者:User
d_seg  segment
       row_u    db      0  ;行上方的邊界->r
       row_d db 25 ;行下方的邊界->l
       col_l db 0  ;列左邊的邊界->u
       col_r    db 80 ;列右邊的邊界->d
       end_flag db      0  ;1為結束,0為繼續
       walkdirect db    'r';當前前進的方向,初始向右
d_seg  ends
;
code   segment
      assume cs:code,ds:d_seg
     start:
     ;**
     ;*
     ;主程式段代碼
      main proc far
          push  ds
   xor  ax,ax
   push  ax
   ;
   mov  ax,d_seg
   mov  ds,ax
   ;
   call          clear;   清屏
   ;
   mov  dx,0        ;游標置0行0列
   mov  bh,0
   mov  ah,2
   int           10h
   ;
   call  drawdirect  ;輸出圖形
   ;按任意鍵退出
      mAgain:
   mov           ah,7
   int           21h
   cmp           al,'q'
   je  mExit
   jmp           mAgain
      mExit:
          call         clear
   ret
      main endp
      ;-----
      ;**
      ;*
      ;繪圖方向的控制
      drawdirect proc near
       d_continue:
          ;跟col_l比較,如果col_l>=dl,則walkdirect='u'
   cmp  walkdirect,'l'  ;是否是左邊
   jnz  no_left  ;不是
      coll_next:
          call  char_disp ;輸出字元
   dec  dl              ;往左移一列
   cmp  col_l,dl        ;比較是否該轉方向
   jl  coll_next       ;不用轉,繼續輸出
   inc  dl              ;往右回退一列
   inc  col_l           ;左邊界加一
   inc           col_l
   mov  walkdirect,'u'  ;轉方向為向上
   jmp  dcmp         ;退出
          ;
      no_left:
   ;跟col_r比較,如果col_r<=dl,則walkdirect='d'
   cmp  walkdirect,'r'   ;是否是右邊
   jnz  no_right  ;不是
      colr_next:
          call  char_disp        ;輸出字元
   inc  dl   ;往右移一列
   cmp  col_r,dl         ;比較是否該轉方向
   jg  colr_next  ;不用轉,繼續輸出
   dec  dl               ;往左回退一列
   dec  col_r   ;右邊界減一
   dec           col_r
   mov  walkdirect,'d'   ;轉方向為向下
   jmp  dcmp   ;退出
   ;
      no_right:
          ;跟row_u比較,如果row_u>=dh,則walkdircet='r'
   cmp  walkdirect,'u'   ;是否向上走
   jnz  no_up   ;不是
      rowu_next:
          call  char_disp  ;輸出字元
   dec  dh   ;往上移一行
   cmp  row_u,dh  ;比較是否該轉方向了
   jl            rowu_next  ;不用轉,繼續輸出
   inc  dh               ;往下回退一行
   inc  row_u   ;上邊界加一
   ;inc           row_u
   mov  walkdirect,'r'   ;轉方向為向右
   jmp           dcmp   ;退出
   ;
      no_up:
          ;跟row_d比較,如果row_d<=dh,則walkdirect='l'
      rowd_next:
   call  char_disp
   inc  dh               ;往下移一行
   cmp         row_d,dh         ;比較是否該轉方向了
   jg  rowd_next  ;不用轉,繼續輸出
   dec  dh          ;往上回退一行
   dec  row_d            ;下邊界減一
   ;dec           row_d
   mov         walkdirect,'l'   ;轉方向為向左
      dcmp:
          push  ax   ;儲存al
   mov  al,row_u
          inc  al               ;上邊界試加一
   cmp  al,row_d         ;上邊界是否和下邊界重合
   pop           ax               ;恢複al
   jge  d_Exit   ;如果將要重合,退出
   push  ax   ;儲存al
   mov  al,col_l
   inc  al               ;左邊界試加一
   cmp  al,col_r  ;如果將要重合,退出
   pop           ax               ;恢複al
   jge  d_Exit           ;如果將要重合,退出
   jmp  d_continue       ;接著輸出
      d_Exit:
          ret
      drawdirect endp
      ;--------
      ;**
      ;*
      char_disp  proc  near
           push  cx               ;儲存cx
    ;
    mov          ah,2
           mov          bh,0             ;0頁顯示
    int          10h              ;置游標位置
    ;
           mov          al,2             ;置入笑臉ASCII碼
    mov          bl,07            ;黑底白字元
    mov  cx,1   ;輸出字元1次
    mov          ah,9
    int         10h              ;輸出笑臉
    pop          cx
    ret
      char_disp  endp
      ;--------
      ;**
      ;*
      clear proc near
           mov          ax,0600h        ;全螢幕空白
    mov         bh,7         ;正常顯示
    sub         cx,cx  ;起點(0,0)
           mov  dx,184fh        ;終點(24,79)
    int  10h
    ret
      clear endp
      ;--------
   code ends
         end start

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.