[英]Comparing two strings in assembly
我正在嘗試在一個簡單的匯編程序中比較兩個字符串,但由於某種原因,它永遠不會跳轉到給定的目的地,但是如果我將5放在eax和ebx中,則相等的跳轉就可以了
我正在使用NASM作為編譯器
SECTION .bss
SECTION .data
EatMsg: db "Eat at Joe's",10
EatLen: equ $-EatMsg
Input: times 100 db 0
ok: db "ok"
oklen: equ $-ok
TastyMsg: db "Its tazty",10
TastyLen: equ $-TastyMsg
SECTION .text
global _start
_start:
nop
mov eax,4
mov ebx,1
mov ecx,EatMsg
mov edx,EatLen
int 80H
mov eax,3
mov ebx,0
mov ecx,Input
mov edx,100
int 80H
mov eax,Input
mov ebx,ok
cmp eax,ebx
je tasty
mov eax,1
mov ebx,0
int 80H
tasty:
mov eax,4
mov ebx,1
mov ecx,TastyMsg
mov edx,TastyLen
int 80H
mov eax,1
mov ebx,0
int 80H
NASM中常見的絆倒危險:使用mov eax,Input
和mov ebx,ok
可以加載相應標簽的地址 ,而不是此位置的內容 。 這兩個地址當然有所不同。 要加載內容,您必須將標簽用方括號括起來。
要比較任何兩個字符串,您必須在循環中逐字節比較它們。 但是,對於您而言,將ok
的兩個字節加載到WORD寄存器中並將它們與Input
的前兩個字節進行比較就足夠了。
更改
mov eax,Input
mov ebx,ok
cmp eax,ebx
至
mov ax, [Input]
mov bx, [ok]
cmp ax, bx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.