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

the_king

مدیرکل انجمن
برای محاسبه تعداد تکرار یک کاراکتر مثلا o در درون یک رشته، مثلا رشته "open book" کد زیر مناسب است.
اگر کاراکتر مورد نظر در آن رشته وجود نداشت، پیغام No و در غیر اینصورت پیغام Yes به همراه تعداد تکرار
آن کاراکتر نمایش داده می شود :

کد:
.MODEL      SMALL
.DATA
    msg1    DB "Please enter a string :",13,10,"$"
    msg2    DB 13,10,"Please enter a character :",13,10,"$"
    msg3    DB 13,10,"Yes ($"
    msg4    DB 13,10,"No$"
    msg5    DB 13,10,"Press any key to continue.",13,10,"$"
    string  DB 80
            DB ?
            DB 80 DUP (?)
    char    DB 2
            DB ?
            DB 2 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:
    MOV     AH, 0ah
    LEA     DX, char
    INT     21h
    CMP     char[1], 0
    JZ      loop_2
    MOV     BX, 0
    LEA     SI, string[2]
    MOV     AH, char[2]
    MOV     CL, string[1]
    MOV     CH, 0
loop_3:
    CMP     AH, [SI]
    JNE     next_1
    INC     BX
next_1:
    INC     SI
    LOOP    loop_3
    CMP     BX, 0
    JZ      next_2
    MOV     AH, 9
    LEA     DX, msg3
    INT     21h
    MOV     CX, 0
    MOV     AX, BX
    MOV     BX, 10
loop_4:
    MOV     DX, 0
    DIV     BX
    PUSH    DX
    INC     CX
    CMP     AX, 0
    JNE     loop_4
    MOV     AH, 2
loop_5:
    POP     DX
    ADD     DL, "0"
    INT     21H
    LOOP    loop_5
    MOV     DL, ")"
    INT     21h
    JMP     next_3
next_2:
    MOV     AH, 9
    LEA     DX, msg4
    INT     21h
next_3:
    MOV     AH, 9
    LEA     DX, msg5
    INT     21h
    MOV     AH, 8
    INT     21h
.EXIT
.STACK
END
 

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

بالا