[英]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
你似乎不明白什么是push
和pop
的好处。
push cx
inc bx
pop cx
仅当代码序列(程序中的inc bx
)以某种方式更改已保存/恢复的寄存器cx
并且您需要序列未更改的cx
时,才需要使用push cx
和pop cx
封装部分代码。
当心x
和loop 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.