ادغام یک در میان کاراکتر های دو رشته در زبان اسمبلی

the_king

مدیرکل انجمن
اگر بخواهیم کاراکتر های دو رشته مثلا "book" و "123" را بصورت یک در میان ادغام کنیم تا رشته "b1o2o3k"
حاصل شود، کد زیر مناسب است :

کد:
.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,"Merged string :",13,10,"$"
    msg4    DB 13,10,"Press any key to continue.",13,10,"$"
    string1 DB 51
            DB ?
            DB 51 DUP (?)
    string2 DB 51
            DB ?
            DB 51 DUP (?)
    string3 DB 101
.CODE
.STARTUP
    MOV     AH, 9
    LEA     DX, msg1
    INT     21h
    MOV     AH, 0ah
    LEA     DX, string1
    INT     21h
    MOV     AH, 9
    LEA     DX, msg2
    INT     21h
    MOV     AH, 0ah
    LEA     DX, string2
    INT     21h
    MOV     AH, 9
    LEA     DX, msg3
    INT     21h
    LEA     SI, string1[2]
    LEA     BX, string2[2]
    LEA     DI, string3
loop_1:
    MOV     AL, [SI]
    CMP     AL, 13
    JE      loop_2
    MOV     [DI], AL
    INC     SI
    INC     DI
    MOV     AL, [BX]
    CMP     AL, 13
    JE      loop_3
    MOV     [DI], AL
    INC     BX
    INC     DI
    LOOP    loop_1
    JMP     next_1
loop_2:
    MOV     AL, [BX]
    CMP     AL, 13
    JE      next_1
    MOV     [DI], AL
    INC     BX
    INC     DI
    LOOP    loop_2
    JMP     next_1
loop_3:
    MOV     AL, [SI]
    CMP     AL, 13
    JE      next_1
    MOV     [DI], AL
    INC     SI
    INC     DI
    LOOP    loop_3
next_1:
    MOV     BYTE PTR [DI], "$"
    MOV     AH, 9
    LEA     DX, string3
    INT     21h
    LEA     DX, msg4
    INT     21h
    MOV     AH, 8
    INT     21h
.EXIT
.STACK
END
 

the_king

مدیرکل انجمن
ادغام یک در میان کاراکتر های دو رشته همطول در زبان اسمبلی

در کد قبلی کاراکتر های دو رشته با طول های مختلف را بصورت یک در میان ادغام کردیم، اما اگر طول دو رشته
یکسان باشند، کد ادغام دو رشته اندکی ساده تر خواهد بود و می توان آنرا چنین پیاده سازی کرد :

کد:
.MODEL SMALL
.STACK
.DATA
    msg1    DB 13,10,"Please enter first string :",13,10,"$"
    msg2    DB 13,10,"Please enter second string (same length) :",13,10,"$"
    msg3    DB 13,10,"Merged string :",13,10,"$"
    msg4    DB 13,10,"Press any key to continue.",13,10,"$"
    str1    DB 80,0,80 DUP(?)
    str2    DB 80,0,80 DUP(?)
    str3    DB 80*2 DUP(?)
.CODE
.STARTUP
    MOV     AH, 9
    LEA     DX, msg1
    INT     21H
try_1:
    MOV     AH, 0AH
    LEA     DX, str1
    INT     21H
    CMP     str1[1], 0
    JZ      try_1
try_2:
    MOV     AH, 9
    LEA     DX, msg2
    INT     21H
try_3:
    MOV     AH, 0AH
    LEA     DX, str2
    INT     21H
    MOV     CL, str2[1]
    CMP     CL, 0
    JZ      try_3
    CMP     CL, str1[1]
    JNE     try_2
    MOV     CH, 0
    MOV     BX, 2
    MOV     AH, 2
    MOV     SI, 0
loop_1:
    MOV     AL, str1[BX]
    MOV     str3[SI], AL
    INC     SI
    MOV     AL, str2[BX]
    MOV     str3[SI], AL
    INC     SI
    INC     BX
    loop    loop_1
    MOV     str3[SI], "$"
    MOV     AH, 9
    LEA     DX, msg3
    INT     21H
    LEA     DX, str3
    INT     21H
    LEA     DX, msg4
    INT     21H
    MOV     AH, 8
    INT     21H
    .EXIT
END
 

جدیدترین ارسال ها

بالا