如何使用程序集

时间:2016-01-16 06:40:01

标签: assembly printing character

如何在汇编程序中从右到左打印微笑表情符号

#MAKE_COM#        ; .com
ORG    100h  
START:  
   MOV  AH, 0     ; screen 80x25
   MOV  AL, 2     ; character 'smiley face'     
   INT  10h   ; set screen (and clear screen)  
   MOV  DX, 0     ; start position 0,0 (DH dan DL)  
   MOV  CX, 1     ; print 1 character  
set_kursor:  
   MOV  AH, 2  
   INT  10h        ; set cursor position  
   MOV  AH, 10  
   INT  10h    ; print character  
   INC  DH     ; to right  
   INC  DL     ; enter 1 row
   CMP  DH, 25     
   JNE  set_kursor ; try it
   RET             ; finish

END

代码执行此操作

☺
 ☺
  ☺
   ☺
    ☺
     ☺
      ☺

我想要的是像这样的反面

              ☺
             ☺
            ☺
           ☺
          ☺
         ☺
        ☺

1 个答案:

答案 0 :(得分:1)

INC  DH     ; to right  
INC  DL     ; enter 1 row

这些评论错了! DL寄存器具有列,DH寄存器具有行。

要解决您的问题,请先将光标放在远离右侧的位置。我选择了第30列和第0行。然后在每次迭代时递减DL寄存器中的列值。与之前一样,在DH寄存器中递增行值并在处理25行后退出:

#MAKE_COM#        ; .com
ORG    100h  
START:  
   MOV  AH, 0     ; screen 80x25
   MOV  AL, 3    
   INT  10h       ; set screen (and clear screen)  
   MOV  DX, 30    ; start position 30,0  
   MOV  CX, 1     ; print 1 character
   mov  bh, 0     ; display page 0
set_kursor:  
   MOV  AH, 2  
   INT  10h       ; set cursor position  
   MOV  AL, 2     ; character 'smiley face'     
   MOV  AH, 10
   INT  10h       ; print character  
   dec  dl        ; 1 column left 
   inc  dh        ; 1 row down
   CMP  DH, 25     
   JNE  set_kursor
   RET             ; finish

END