the_king
مدیرکل انجمن
اگر بخواهیم از کاراکتر n ام به بعد را به اندازه m کاراکتر را حذف کنیم، کد زیر مناسب است :
مثلا در رشته begin از کاراکتر دوم به اندازه 2 کاراکتر حذف کرده و رشته bin حاصل می شود.
کد:
.MODEL SMALL
.DATA
msg1 DB "Please enter a string :",13,10,"$"
msg2 DB 13,10,"Please enter number n (n>0) :",13,10,"$"
msg3 DB 13,10,"Please enter number m (m>=0) :",13,10,"$"
msg4 DB 13,10,"String after remove :",13,10,"$"
msg5 DB 13,10,"Press any key to continue.",13,10,"$"
string DB 80
DB ?
DB 80 DUP (?)
number DB 3
DB ?
DB 3 DUP (?)
.CODE
.STARTUP
MOV AH, 9
LEA DX, msg1
INT 21h
loop_1:
MOV AH, 0ah
LEA DX, string
INT 21h
CMP string[1], 0
JZ loop_1
MOV AH, 9
LEA DX, msg2
INT 21h
loop_2:
CALL get_number
CMP BX, 0
JZ loop_2
DEC BL
CMP BL, string[1]
JB next_1
MOV BL, string[1]
next_1:
PUSH BX
MOV AH, 9
LEA DX, msg3
INT 21h
CALL get_number
LEA SI, string[2]
POP AX
ADD SI, AX
MOV DI, SI
MOV CX, BX
loop_3:
MOV AL, [SI]
CMP AL, 13
JE next_3
CMP CX, 0
JG next_2
MOV [DI], AL
INC DI
next_2:
DEC CX
INC SI
JMP loop_3
next_3:
MOV BYTE PTR [DI], "$"
MOV AH, 9
LEA DX, msg4
INT 21h
LEA DX, string[2]
INT 21h
LEA DX, msg5
INT 21h
MOV AH, 8
INT 21h
.EXIT
get_number:
MOV AH, 0ah
LEA DX, number
INT 21h
MOV CL, number[1]
CMP CL, 0
JZ get_number
MOV CH, 0
LEA SI, number[2]
MOV DI, 10
MOV BX, 0
loop_4:
MOV AL, [SI]
CMP AL, "0"
JB next_4
CMP AL, "9"
JA next_4
SUB AL, "0"
MOV AH, 0
XCHG AX, BX
MUL DI
ADD BX, AX
next_4:
INC SI
LOOP loop_4
RET
.STACK
END
مثلا در رشته begin از کاراکتر دوم به اندازه 2 کاراکتر حذف کرده و رشته bin حاصل می شود.