یکی دیگر از دستورات مربوط به جمع و تفریق در زبان اسمبلی دستور CMP است که دستوالعمل (compare) cmp مانند دستور sub است با این تفاوت که حاصل تفریق را ذخیره نمی کند(dest-src). نحوه کلی آن به صورت زیر است:
cmp dest.src
به صورت های زیر می تواند استفاده شود:
cmp register, register
cmp register, memory
cmp memory, register
cmp register, immediate data
cmp memory, immediate data
cmp AX/AL, immediate data
فلگ ها مانند دستورالعمل sub با توجه به نتیجه تفریق تغییر می کنند.
دستور زیر را درنظر بگیرید:
cmp AX, BX
این دستور حاصل AX-BX را محاسبه می کند و با توجه به حاصل فلگ ها را تنظیم می کند. فلگ ها به صورت زیر تغییر می کنند و می توانند برای بررسی نتیجه مقایسه بکار برده شوند:
• فلگ Zero یک می شود اگر AX=BX باشد. مساوی یا نامساوی بودن دو عملوند را مشخص می کند.
• فلگ Carry وقتی یک می شود که در محاسبات بدون علامت AX<BX باشد. یعنی تفریق BX از AX احتیاج به رقم قرضی داشته باشد.
• فلگ Sign به همراه فلگ Overflow در محاسبات علامتدار نشان می دهد کدام عملوند بزرگتر است.
• دستورالعمل cmp روی فلگ های Parity و Auxiliary Carry هم تاثیر دارد ولی بندرت هنگام مقایسه مورد بررسی قرار می گیرند.
به طور خلاصه برای مقایسه دو عملوند با توجه به فلگ های زیر می توان نتیجه گیری کرد: