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!