Comment afficher la chaîne saisie par l'utilisateur?Comment afficher une entrée de texte centrée par un utilisateur dans un assemblage x86?
Et je dois l'afficher au centre d'un écran 80x25 avec la formule suivante:
colonne = (80 - longueur de la chaîne)/2;
rangée = 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
Ma tâche est de développer un programme exécutable (EXE), qui affiche d'abord (fonction 09h, interruption DOS 21 h) une invitation à entrer dans une chaîne de caractères à partir du clavier. Après avoir entré la ligne (fonction 0Ah, DOS 21h interruption), le programme doit afficher sa chaîne centrée sur l'écran (fonction 13h, interruption BIOS 10h). la coordonnée de la position de l'écran où la sortie doit être mis est calculé comme suit:
colonne = (80 - dlina_stroki)/2;
ligne = 25/2;
Pour entrer dans la chaîne que vous pouvez définir le tampon suivant:
; ...
.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)
; ...
Ensuite, dans le programme de chacun des référencé sbuf
s du tampon, il peut être utilisé comme variables distinctes.