簡體   English   中英

比較匯編中的兩個字符串

[英]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,Inputmov 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM