汇编语言中的大于,小于或等于?

时间:2016-05-17 00:47:46

标签: assembly x86

我真的是汇编语言的初学者。我对语法知之甚少。我在网上研究它但我无法理解它。我发现了一个样本问题需要进行实验,但无法真正理解如何去做。

这是问题

您将获得两个字符串,我们将其称为A和B. A最多5个字符,B最多255个字符。编写一个汇编语言程序,它将计算字符串B中字符串A的出现次数,并将结果保留为AL。因此,如果A是字符串“job”而B是字符串“job I job”,那么你的程序应该在AL中留下2。

到目前为止,我只能打印并显示字符串。如何解决涉及数学逻辑的问题?

if AL > 7, display “Greater than Seven!”,
if AL < 7, display “Less than Seven!”,
if AL = 7, display “Equal to Seven!”.

编辑:

我有一个示例代码但仅适用于字符。如何将其替换为字符串?

DATA SEGMENT
   MSG1 DB 10,13, 'ENTER ANY STRING : - $'
   MSG2 DB 10,13, 'ENTER ANY CHARACTER : -$'
   MSG3 DB 10,13, ' $'
   MSG4 DB 10,13, 'NO CHARACTER FOUND IN THE GIVEN STRING $'
   MSG5 DB ' CHARACTER(S) FOUND IN THE GIVEN STRING $'
   CHAR DB ?
   COUNT DB 0
   P1 LABEL BYTE
   M1 DB OFFH
   L1 DB ?
   P11 DB OFFH DUP ('$')

DATA ENDS
DISPLAY MACRO MSG
   MOV AH, 9
   LEA DX, MSG
   INT 21H
ENDM

CODE SEGMENT
   ASSUME CS:COD,DS:DATA
START:
      MOV AX,DATA
      MOV DS,AX

      DISPLAY MSG1

      LEA DX,P1
      MOV AH,0AH
      INT 21H

      DISPLAY MSG2

      MOV AH,1
      INT 21H
      MOV CHAR,AL

      DISPLAY MSG3

      LEA SI, P11

      MOV CL,L1
      MOV CH,0
CHECK:
      MOV AL,[SI]
      CMP CHAR,AL
      JNE SKIP
      INC COUNT
SKIP:
      INC SI
      LOOP CHECK

      CMP COUNT, 0
      JE NOTFOUND

      DISPLAY MSG3

      MOV DL,COUNT
      ADD DL,30H
      MOV AH,2
      INT 21H

      DISPLAY MSG5
      JMP EXIT
NOT FOUND:
          DISPLAY MSG4
EXIT:   MOV AH, 4CH
        INT 21H

CODE ENDS
END START

1 个答案:

答案 0 :(得分:2)

执行此操作的有效方法是使用

搜索B中A的第一个字符
        repne   scasb

如果找到匹配项,那么你可以使用A进行B和B中当前点的字符串比较。

        repe    cmpsb

我假设您有一份指南,解释这些指令如何使用寄存器。

有一种更快的方法来搜索字符串中的单个字符,使用一个循环中具有相同值的4(或8)个字节的寄存器,但是这个例子过于复杂程序