ユーザーが入力した文字列を表示するにはどうすればよいですか?x86アセンブリでユーザーが入力したテキストを出力する方法は?
そして、私は次の式での80x25テキスト画面の中央に表示する必要があります
カラム=(80 - 文字列の長さ)/ 2。
行 = 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
私の仕事は、最初は(関数09H、21H DOSの割り込み)、キーボードから文字列を入力するための招待状を表示する実行ファイル(EXE)プログラムを、開発することです。
(関数0Ah、DOS 21h割り込み)行を入力すると、プログラムはその文字列を画面中央に表示する必要があります(関数13h、BIOS 10h割り込み)。次のように は、出力が置かれなければならないスクリーン位置の座標が計算される:
では、次のバッファを定義することができ、文字列を入力します。カラム=(80 - dlina_stroki)/ 2。
行25/2;; ... .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) ; ...
次に、バッファの参照
sbuf
Sのそれぞれのプログラムの中で、それは別の変数として使用することができます。