我將如何顯示用戶輸入的字符串?如何在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
我的任務是建立一個可執行文件(EXE)計劃,該計劃最初顯示(功能09H,21H DOS中斷)的邀請,從鍵盤輸入字符的字符串。
進入(函數0Ah,DOS 21h中斷)行後,程序應該在屏幕上顯示其居中的字符串(函數13h,BIOS 10h中斷)。 其中輸出具有被投入計算如下畫面位置的座標:
柱=(80 - dlina_stroki)/ 2;
row = 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中的緩衝區的方案,它可以被用來作爲獨立變量。