首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在8086 (汇编)模式之间打印空格?

问如何在8086 (汇编)模式之间打印空格?
EN

Stack Overflow用户
提问于 2022-07-14 14:16:06
回答 1查看 114关注 0票数 1

也许这个问题已经得到了回答。我试着用心在装配中创建一个平行四边形图案,但遗憾的是,每当我试图在字符之间添加空格时,它们中的大多数就消失了。我想这是因为CL注册,或者是我忽略了一些地方。我尝试了不同的试验和错误,以获得预期的输出。不幸的是,我仍然是这个推送和流行方法的初学者,所以请容忍这些评论。另外,这是一个直角三角形的代码,我已经把它调整成一个平行四边形。

我在DOSBOX上使用TLINK进行了仿真。

下面的代码如下:

代码语言:javascript
复制
.MODEL TINY
.386
.DATA
.CODE
    ORG 100H

BEGIN:
    MOV BL,4
    MOV CL,4
    
    ;    * * * *
    ;   * * * *
    ;  * * * *          ; THE EXPECTED PATTERN
    ; * * * *
    
    ;PUSH BX 
    
    L1:
    PUSH CX
    MOV AH,2
    MOV DL,20H ;INCREMENT SPACES
    
    ;SPACE:
    ;MOV AH,02
    ;MOV DL,20H
    ;INT 21H
    
    ;LOOP SPACE 
    ;POP CX 
       
    L2:
     INT 21H
     LOOP L2 
     
     MOV CL,BL 
     DEC CL
     MOV AH,2 ; PRINT THE CHARACTERS
     MOV DL,03H
     INT 21H
     ;MOV AH,02
     ;MOV DL,20H
     ;INT 21H
     
    L3:
     INT 21H
     LOOP L3 
     
     MOV AH,2 ; GENERATE NEW LINES
     MOV DL,10
     INT 21H
     MOV DL,13
     INT 21H

    DEC BH ; DECREMENT BH REGISTER TO TRIM PARALLELOGRAM 
    ;INC BH?
    POP CX
    ;PUSH BX 
    
    LOOP L1
       
    
    EXIT:
    MOV AH,4CH
    INT 21H
    INT 20H

END BEGIN

谢谢你花时间回答这个问题。所有美好的祝愿!

EN

回答 1

Stack Overflow用户

发布于 2022-07-16 19:35:27

一些细微之处

MOV,4 MOV,4

因为您的程序将使用依赖于loop的指令--即CX寄存器的整个16位,所以您应该通过mov cx, 4进行设置,而不是从清空寄存器开始依赖您的环境!

DEC;减缩BH寄存器修剪平行四边形;

你根本不需要这个指令。这里没什么可修剪的!在BL寄存器中设置的平行四边形的维数保持不变的。

出口: MOV,4CHIN21H INT20H

mov ah, 4Ch int 21h DOS.TerminateWithReturncode已经结束了您的程序。int 20h DOS.TerminateProgram 永远不会执行,因此在这里是完全无用的。

Your comment表示您已经成功地重写了程序。尽管如此,请看我的解决方案如下:

代码语言:javascript
复制
    MOV  AH, 02h   ; DOS.PrintCharacter
    MOV  BX, 4     ; Dimension of the parallelogram, 2 or more
    MOV  CX, BX    ; Leading whitespace
L1: PUSH CX        ; (1)
    MOV  DL, ' '
L2: INT  21h
    DEC  CX
    JNZ  L2

    MOV  DL, 3     ; Heart
    INT  21h
    LEA  CX, [BX-1]
L3: MOV  DL, ' '
    INT  21h
    MOV  DL, 3     ; Heart
    INT  21h
    DEC  CX
    JNZ  L3

    MOV  DL, 10
    INT  21h
    MOV  DL, 13
    INT  21h

    POP  CX        ; (1)
    DEC  CX
    JNZ  L1

因此,您不必在以后不学习它,您不使用loop指令。请参阅Why is the loop instruction slow? Couldn't Intel have implemented it efficiently?

预期输出(4个空格开始第一行):

代码语言:javascript
复制
    ♥ ♥ ♥ ♥
   ♥ ♥ ♥ ♥
  ♥ ♥ ♥ ♥
 ♥ ♥ ♥ ♥
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72982014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档