واضح آرشیو وب فارسی:سایت ریسک: اضافه کردن یک رشته به درون رشته دیگر در زبان اسمبلی the_king 19 خرداد 1388, 16:37گاهی اوقات نیاز به کدی داریم که یک رشته را با رشته دیگری ادغام کند، اما همیشه درج این رشته جدید در انتهای رشته قبلی نیست، کد زیر نشان می دهد که چگونه می توانیم یک رشته را در موقعیت 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 the_king 19 خرداد 1388, 16:45در کد قبلی ما رشته جدید را به رشته قبلی اضافه کردیم مثلا اگر رشته "one" در موقعیت 1 رشته "book" درج می شد، رشته "onebook" بدست می آمد. اما گاهی اوقات نیاز به کدی داریم که یک رشته روی یک رشته دیگری جانشین شود، یعنی بر خلاف کد قبلی، کاراکتر هایی که زیر رشته جدید قرار می گیرند حذف گردند. مثلا اگر رشته "one" در موقعیت 1 رشته "book" جانشین شود، رشته "onek" حاصل گردد. کد زیر نشان می دهد که چگونه می توانیم یک رشته را در موقعیت n ام رشته دیگری جایگزین کنیم، مقدار 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 overwrite :",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 DEC BX MOV AL, string1[1] MOV AH, 0 CMP BX, AX JBE next_2 MOV BX, AX next_2: LEA SI, string1[2] MOV DI, SI ADD DI, BX MOV CL, string2[1] MOV CH, 0 ADD BX, CX CMP BX, AX JA next_3 ADD SI, AX JMP next_4 next_3: ADD SI, BX INC SI next_4: MOV BYTE PTR [SI], "$" LEA SI, string2[2] loop_5: MOV AL, [SI] MOV [DI], AL INC SI INC DI LOOP loop_5 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
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 1351]