the_king
مدیرکل انجمن
گاهی اوقات نیاز به کدی داریم که یک رشته را با رشته دیگری ادغام کند، اما همیشه درج این رشته جدید در
انتهای رشته قبلی نیست، کد زیر نشان می دهد که چگونه می توانیم یک رشته را در موقعیت n ام رشته دیگری
اضافه کنیم، مقدار n از 1 شروع می شود. اگر مقدار n برابر 1 باشد، رشته جدید دقیقا در ابتدای رشته قبلی
اضافه می شود و پیش از آن قرار می گیرد.
انتهای رشته قبلی نیست، کد زیر نشان می دهد که چگونه می توانیم یک رشته را در موقعیت n ام رشته دیگری
اضافه کنیم، مقدار n از 1 شروع می شود. اگر مقدار n برابر 1 باشد، رشته جدید دقیقا در ابتدای رشته قبلی
اضافه می شود و پیش از آن قرار می گیرد.
کد:
.MODEL SMALL
.DATA
msg1 DB "Please enter first string :",13,10,"$"
msg2 DB 13,10,"Please enter second string :",13,10,"$"
msg3 DB 13,10,"Please enter number n (n>0) :",13,10,"$"
msg4 DB 13,10,"First string after insert :",13,10,"$"
msg5 DB 13,10,"Press any key to continue.",13,10,"$"
string1 DB 80
DB ?
DB 80 DUP (?)
extra DB 80 DUP (?)
string2 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, string1
INT 21h
CMP string1[1], 0
JZ loop_1
MOV AH, 9
LEA DX, msg2
INT 21h
loop_2:
MOV AH, 0ah
LEA DX, string2
INT 21h
CMP string2[1], 0
JZ loop_2
MOV AH, 9
LEA DX, msg3
INT 21h
loop_3:
MOV AH, 0ah
LEA DX, number
INT 21h
MOV CL, number[1]
CMP CL, 0
JZ loop_3
MOV CH, 0
LEA SI, number[2]
MOV DI, 10
MOV BX, 0
loop_4:
MOV AL, [SI]
CMP AL, "0"
JB next_1
CMP AL, "9"
JA next_1
SUB AL, "0"
MOV AH, 0
XCHG AX, BX
MUL DI
ADD BX, AX
next_1:
INC SI
LOOP loop_4
CMP BX, 0
JZ loop_3
MOV CL, string1[1]
MOV CH, 0
DEC BX
CMP BX, CX
JBE next_2
MOV BX, CX
next_2:
LEA SI, string1[2]
ADD SI, CX
MOV AX, BX
MOV BL, string2[1]
MOV BH, 0
MOV BYTE PTR [SI+BX], "$"
SUB CX, AX
JZ next_3
loop_5:
DEC SI
MOV AL, [SI]
MOV [SI+BX], AL
LOOP loop_5
next_3:
MOV CX, BX
LEA DI, string2[2]
loop_6:
MOV AL, [DI]
MOV [SI], AL
INC SI
INC DI
LOOP loop_6
MOV AH, 9
LEA DX, msg4
INT 21h
LEA DX, string1[2]
INT 21h
LEA DX, msg5
INT 21h
MOV AH, 8
INT 21h
.EXIT
.STACK
END