Язык ассемблера nasm подсчитывает вхождение двух символов a и b в строку geven. в моем коде всегда вхождение добавляется двумя с реальным значением

section .text
    global _start       ;must be declared for using gcc
_start:                     ;tell linker entry point

    mov eax, msg
    mov ebx, 0
    mov ecx, 0

loop:  

    cmp byte[eax], 0
    je exit
        
    cmp byte[eax], 98
    je countb
    
    cmp byte[eax], 97
    je counta
    
    inc eax
    jmp loop
  
countb:
    inc eax
    inc ecx
    jmp loop
    
counta:
    inc eax
    inc ebx
    
    jmp loop

exit:
    add ecx, '0'
    mov [cou2], ecx
    
    push ebx
    
    mov edx, 1      ;message length
    mov ecx, cou2      ;message to write
    mov ebx, 1      ;file descriptor (stdout)
    mov eax, 4      ;system call number (sys_write)
    int 0x80  
    
    pop ebx
    
    add ebx, '0'
    mov [cou1], ebx
 
    mov edx, 1      ;message length
    mov ecx, cou1      ;message to write
    mov ebx, 1      ;file descriptor (stdout)
    mov eax, 4      ;system call number (sys_write)
    int 0x80  

    mov eax, 1      ;system call number (sys_exit)
    mov ebx, 0
    int 0x80        ;call kernel

section .data

msg db  'bbc'   ;our dear string
len equ $ - msg         ;length of our dear string
m db 'equal'
len1 equ $-m
s db 'not equal'
len2 equ $-s

section .bss
cou1 resb 1
cou2 resb 1

Для какой ОС вы программируете? Это для Linux?

fuz 02.04.2021 23:28

Кроме того, в чем ваш вопрос?

fuz 02.04.2021 23:28

Ваш код полагается на завершающий ноль, но вы не добавляли его в свою строку. Ни db, ни одинарные кавычки этого не делают. Явно добавьте , 0.

Jester 02.04.2021 23:31

Я использую онлайн-компилятор - jdoodle (компилятор nasm)

Inshaf 02.04.2021 23:32

если строка «bbc», мне нужен ответ «b» 2 раза и «a» 0 раз. но он дает и "а", и "б" два раза ..

Inshaf 02.04.2021 23:34

Потому что, как я уже сказал, вы не завершили строку нулем. Таким образом, он также будет считать a в equal и not equal.

Jester 02.04.2021 23:35

@ Шут, я работаю. Спасибо

Inshaf 02.04.2021 23:49
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
7
32
0

Другие вопросы по теме