繁体   English   中英

将空格打印到 8086 程序集中的每个输入

[英]Print spaces to every inputs in 8086 assembly

我发现了一个类似的搜索,但对我来说并不是很清楚。 我正在尝试在以汇编语言 8086 打印的每个字母中添加空格。到目前为止,我所做的是将空格放在循环内,但它显示了不同的字符并打印了完全相同的字符,并为嵌套循环,但没有任何效果。

我想知道我是否做错了什么,因为大部分数据都存储在 DL 寄存器中。

.stack
.code
start:
    mov ah, 6 
        mov bh, 02h
        mov cx, 0
        mov dx, 184fh
        int 10h

    mov ah,2 
        mov bh,0
        mov dh,11
        mov dl,14
        int 10h

mov cx,10
mov ah,2
mov dl,' '
push bx
mov ah,2
mov dl,'J'
x: int 21h

dec dl

push cx
inc bx
pop cx

pop bx

loop x


pop cx 


mov ah,4ch
int 21h
end start

你似乎不明白什么是pushpop的好处。

push cx
inc bx
pop cx

仅当代码序列(程序中的inc bx )以某种方式更改已保存/恢复的寄存器cx并且您需要序列未更改的cx时,才需要使用push cxpop cx封装部分代码。

当心xloop x之间的循环中的不平衡pop bx 这将在每次迭代中将堆栈指针增加 2(10 次),这会使程序崩溃。

DOS function Int 21/AH=02h prints the character in DL and it will advance cursor position, so all the chores with scrolling window and setting cursor position is not necessary.

此代码与 TASM 4.0 组装为tasm Connor.asm并与 TLINK 3.01 链接
因为tlink /t Connor.obj给出了打印JIHJFEDCBA Connor.com
如果您打算在每个字母后面添加一个空格,只需在循环中插入另一个Int 21调用(并且不要忘记在打印空格时保存/恢复DL )。

model tiny
.code
org 256
start:
  mov cx,10  ; Number of characters.
  mov ah,2   ; DOS function WRITE CHARACTER
  mov dl,'J' ; Start with this character.
x:int 21h ; Write DL and advance cursor.
  dec dl     ; Prepare the next character.
  loop x     ; Repeat 10 times
  ret        ; Terminate COM program.
end start

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM