Assembly-programming-assembly-cmps-instruction

提供:Dev Guides
移動先:案内検索

アセンブリ-CMPS命令

CMPS命令は2つの文字列を比較します。 この命令は、DS:SIおよびES:DIレジスタが指す1バイトの2つのデータ項目(ワードまたはダブルワード)を比較し、それに応じてフラグを設定します。 また、この命令とともに条件付きジャンプ命令を使用できます。

次の例は、CMPS命令を使用して2つの文字列を比較する方法を示しています-

section .text
   global _start            ;must be declared for using gcc

_start: ;tell linker entry point
   mov esi, s1
   mov edi, s2
   mov ecx, lens2
   cld
   repe  cmpsb
   jecxz  equal             ;jump when ecx is zero

   ;If not equal then the following code
   mov eax, 4
   mov ebx, 1
   mov ecx, msg_neq
   mov edx, len_neq
   int 80h
   jmp exit

equal:
   mov eax, 4
   mov ebx, 1
   mov ecx, msg_eq
   mov edx, len_eq
   int 80h

exit:
   mov eax, 1
   mov ebx, 0
   int 80h

section .data
s1 db 'Hello, world!',0      ;our first string
lens1 equ $-s1

s2 db 'Hello, there!', 0     ;our second string
lens2 equ $-s2

msg_eq db 'Strings are equal!', 0xa
len_eq  equ $-msg_eq

msg_neq db 'Strings are not equal!'
len_neq equ $-msg_neq

上記のコードをコンパイルして実行すると、次の結果が生成されます-

Strings are not equal!