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

问题描述

我发现了一个类似的搜索,但对我来说不是很清楚。我试图在用汇编语言 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,'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

仅当代码序列(您程序中的push cx)以某种方式更改了保存/恢复的寄存器 pop cx 和如果您需要 inc bx 保持不变。

注意 cxcx 之间循环中不平衡的 pop bx。这会在每次迭代(10 次)时将堆栈指针增加 2,从而导致程序崩溃。

DOS 函数 Int 21/AH=02h 打印 x 中的字符,它会前进光标位置,因此不需要滚动窗口和设置光标位置的所有琐事。

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

Int 21