Wie würde ich die Zeichenfolge anzeigen, die der Benutzer eingegeben hat?Wie ausgegebene zentrierte Texteingabe von einem Benutzer in x86-Assembly ausgeben?
und ich brauche es in der Mitte von einem 80x25 Textbildschirm mit der folgenden Formel anzuzeigen:
column = (80 - Stringlänge)/2;
Reihe = 25/2;
.MODEL TINY
.386
STACK 256
DATASEG
msg db 'Enter string:$'
sbuf label word ;адрес буфера для функции 0Ah
max db 0 ;максимальное количество символов
len db 0 ;количество фактически введенных
string db 254 DUP('#') ;буфер для строки (адрес строки)
;string db 255,0, 256 dup (' ')
new db 0ah, 0dh, '$'
CODESEG
start:
mov ax,@data
mov ds,ax
mov ah,09h
mov dx,offset msg
int 21h
mov ah, 0Ah
mov dx,offset string
int 21h
xor ax,ax
mov al,offset string+1
inc dx
add dx, ax
mov si,dx
mov ah,09h
mov dx,offset new ;output new line symbol
int 21h
std ;устанавливаем флаг направления дляпрохода обратно
print_next_char:
lodsb ;читаем символ из DS:SI и уменьшаем SI на 1
cmp si,offset string+1 ;конец строки? (то есть начало)
jb endprog ; если да, то переход к концу программы
cmp al,0dh
je skip
cmp al,023h
je skip
movzx bx,al
dec bx
inc byte[bx+len]
skip:
mov dl, al ;загружаем прочитанный из строки символ в DL
mov ah,02h ;DOS-функция вывода символа
; int 21h ;вызов DOS
jmp print_next_char ;возвращаемся к следующему символу
endprog:
mov dx,offset new
mov ah,09h
int 21h
mov DX, OFFSET string ; ds:dx points to string
mov AH, 09h
int 21h
mov AX, 4C00h ; Return to DOS with ERRORLEVEL=0
int 21h
end start
Meine Aufgabe ist es, eine ausführbare Datei (EXE) Programm zu entwickeln, das zunächst zeigt (Funktion 09h, DOS 21h-Interrupt) eine Einladung zu einer Kette von Zeichen über die Tastatur eingeben.
Nach Eingabe der Zeile (Funktion 0Ah, DOS 21h Interrupt) sollte das Programm seinen String zentriert auf dem Bildschirm anzeigen (Funktion 13h, BIOS 10h interrupt). Die Koordinate der Bildschirmposition, wo der Ausgang gelegt werden muss wie folgt berechnet wird:
column = (80 - dlina_stroki)/2;
Reihe = 25/2;
die Zeichenfolge geben Sie den folgenden Puffer definieren:
; ...
.data
; ...
sbuf label word ; buffer address 0Ah function
max db 0 ; the maximum number of characters
len db 0 ; the number is actually imposed
string db 254 dup (0) ; buffer line (row address)
; ...
Dann wird in dem Programm jedes der referenzierten sbuf
s des Puffers, kann sie als separate Variablen verwendet werden.