PDA

View Full Version : گرفتن رشته با وقفه های بایوس؟



one hacker alone
شنبه 09 شهریور 1392, 23:51 عصر
با سلام
میخواستم بدونم چجوری میتونم رشته ای رو از کاربر بگیرم و مقایسه اش کنم
با وقفه ی 21 امکان پذیر هست اما من نمیتونم از وقفه های داس استفاده کنم برا همین نیاز به وقفه های بایوس دارم

fjm11100
یک شنبه 10 شهریور 1392, 13:47 عصر
با وقفه 16h باید کاراکتر به کارکتر بگیری
برای اتمام هم یک شرط بزار که کد Enter بود از حلقه گرفتن کارکترها بیاد بیرون

one hacker alone
یک شنبه 10 شهریور 1392, 19:19 عصر
اینارو میدونم اما میخوام بدونم کاراکترهای گرفته شده رو تو چی ذخیره کنم؟

darknes666
یک شنبه 10 شهریور 1392, 20:28 عصر
این کد من رو تحلیل کن اونوقت میتونی این کار رو کنی.

این برنامه رشته ی شما رو میگیره تو خط بعد چاپش میکنه.(اخر رشته اینتر میزنی)

DATA SEGMENT
NUM1 DB 1000 DUP(0)
NEL DB 0AH,"$"
ENDS
STACK SEGMENT
DW 128H DUP(0)
ENDS
CODE SEGMENT
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA SI,NUM1
LABEL1:
MOV AH,1
INT 21H
CMP AL,0DH
JE LABEL2
MOV [SI],AL
INC SI
JMP LABEL1
LABEL2:
INC SI
MOV [SI],"$"
MOV AH,9H
LEA DX,NEL
INT 21H
MOV AH,9H
LEA DX,NUM1
INT 21H
MOV AX, 4c00H
INT 21H
ENDS
END START

فرقی هم نمیکنه که با int 21h باشه یا int 16h

milad1340
شنبه 02 آذر 1392, 11:08 صبح
این کدیه که من نوشتم البته نمیدونم بهینه هست یا نه اما کار راه اندازه
در ضمن پیشنهاد میکنم که بجای وقفه های داس از وقفه های بایوس استفاده کنین
درسته سختره اما هم سرعتش بیشتره هم مثل وقفه 21h فقط مخصوص داس و تو سیستم عامل های دیگه هم جواب میده
data segment
string db 10 dup('$')




ends

stack segment
dw 128 dup(0)
ends

code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
mov [string+9],0

lea si,string
mov bx,0fh ; set color
mov ah,3
int 10h ;get Cursor position
mov cx,1 ;nomber of char for print
str:
mov ah,00
int 16h ;
cmp al,0dh ;'enter-key' test
je end_str ;if al='enter-key' jomp to end of string
mov [si],al ; store char
mov ah,9
int 10h ;print char
inc dl ;go to next column
mov ah,2
int 10h ;set Cursor position
inc si
cmp [si],0;test end of string
jne str

end_str:
mov [si],0 ; set null for end

mov ax, 4c00h ; exit to operating system.
int 21h
ends

end start ;