حذف کردن بخشی از یک رشته در زبان اسمبلی

the_king

مدیرکل انجمن
اگر بخواهیم از کاراکتر n ام به بعد را به اندازه m کاراکتر را حذف کنیم، کد زیر مناسب است :

کد:
.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 حاصل می شود.
 
  • Like
Reactions: MDP

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

بالا