مقایسه دو رشته با هم (غیر حساس به بزرگی و کوچکی حروف) در زبان اسمبلی

the_king

مدیرکل انجمن
اگر بخواهیم دو رشته را با هم مقایسه کنیم بطوریکه نسبت به بزرگی و کوچکی حروف حساس نباشد
و فرقی بین حروف کوچک مثل a و حروف بزرگ مثل A قائل نشود، کد زیر مناسب است.
این برنامه بر اساس تساوی یا بزرگتر بودن یکی از دو رشته، پیغام مناسبی را چاپ می کند. بدیهی است
که در این مقایسه رشته "BoOk" با رشته "bOoK" برابر است.

کد:
.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,"First string is bigger.",13,10,"$"
    msg4    DB 13,10,"Second string is bigger.",13,10,"$"
    msg5    DB 13,10,"Two strings are equal.",13,10,"$"
    msg6    DB 13,10,"Press any key to continue.",13,10,"$"
    string1 DB 101
            DB ?
            DB 101 DUP (?)
    string2 DB 101
            DB ?
            DB 101 DUP (?)
.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
    LEA     SI, string1[2]
    LEA     DI, string2[2]
loop_1:
    MOV     AL, [SI]
    MOV     AH, [DI]   
    INC     SI
    INC     DI
    CMP     AL, 'A'
    JB      next_1
    CMP     AL, 'Z'
    JA      next_1
    ADD     AL, 32
next_1:
    CMP     AH, 'A'
    JB      next_2
    CMP     AH, 'Z'
    JA      next_2
    ADD     AH, 32
next_2:
    CMP     AL, AH
    JNE     next_3
    CMP     AL, 13
    JNE     loop_1
    LEA     DX, msg5
    JMP     next_4
next_3:
    LEA     DX, msg3
    JA      next_4
    LEA     DX, msg4
next_4:
    MOV     AH, 9
    INT     21h
    LEA     DX, msg6
    INT     21h
    MOV     AH, 8
    INT     21h
.EXIT
.STACK
END
 

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

بالا