在装配中写入行而不返回行的开头(阶梯文本)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在装配中写入行而不返回行的开头(阶梯文本)相关的知识,希望对你有一定的参考价值。
我找不到在瀑布结构中用汇编语言编写单词的方法,例如:
one
two
three
我试图在10到13之间分开,但它没有用。这是迄今为止的代码:
.MODEL SMALL
.STACK 100h
.DATA
MyProgram DB 'word1',10,'word2',10,'word3','$'
.CODE
ProgStart:
MOV AX,@DATA
MOV BX,OFFSET MyProgram
MOV DS,AX
MOV AH,9
MOV DX,OFFSET MyProgram
INT 21h
MOV AH,4ch
INT 21h
答案
你将不得不回到线的起点,因为你需要一个换行符。换行,换行符将光标移动到下一行的开头。对于换行符,您需要一个空格和一个计数器来显示空白n次。此计数器随着您显示的每一行而增加。在EMU8086中制作的示例(只需复制,粘贴和运行):
.STACK 100h
.DATA
text DB 'hello world',13,10,'$'
space DB ' $' ;BLANK SPACE.
spaces dw 1 ;COUNTER FOR BLANK SPACES.
.CODE
MOV AX,@DATA
MOV DS,AX
mov bx,10 ;HOW MANY LINES TO DISPLAY.
display_text:
mov cx, spaces
display_spaces:
mov ah, 9
mov dx, offset space
int 21h
loop display_spaces ;CX-1. IF CX!=0 : DISPLAY NEXT SPACE.
inc spaces ;MOVE NEXT INDENT ONE SPACE TO THE RIGHT.
;DISPLAY TEXT.
MOV AH,9
MOV DX,OFFSET text
INT 21h
dec bx ;LINES COUNTER.
mov cx, bx
loop display_text
MOV AH,4ch
INT 21h
如果要缩进一个空格,请将计数器增加1,如果要缩进两个空格,则增加2,依此类推。
现在没有换行符,通过使用GOTOXY,这样你就不需要回到行的开头,因为没有换行符:
.STACK 100h
.DATA
text DB 'hello world',13,10,'$'
row db 1 ;LINE NUMBER.
col db 1
.CODE
MOV AX,@DATA
MOV DS,AX
mov cx,10 ;HOW MANY LINES TO DISPLAY.
display_text:
;GOTOXY.
mov ah, 2
mov bh, 0
mov dl, col
mov dh, row
int 10h ;Bios SCREEN SERVICES.
;DISPLAY TEXT.
MOV AH,9
MOV DX,OFFSET text
INT 21h
inc row ;Y COORDINATE ONE LINE DOWN.
inc col ;X COORDINATE ONE COLUMN RIGHT.
loop display_text
MOV AH,4ch
INT 21h
另一答案
Re:@AlexanderZhak BIOS电传打字功能0Eh不依赖于任何分隔符。它输出AL寄存器中的单个字符。
其工作原理如下:
print:
mov bx, 7
mov ah, 0x0e
next_char:
lodsb
test al, al
jz exit
int 0x10
jmp next_char
exit:
ret
print proc在DS:SI中接收指向字符串的指针 称之为
mov si, offset my_string
call print
比移动光标更简单,更快捷
以上是关于在装配中写入行而不返回行的开头(阶梯文本)的主要内容,如果未能解决你的问题,请参考以下文章