Я только начал изучать сборку, как забавный вызов. Я сделал обязательную программу мира привет, а также простой, который просто запрашивает ввод, затем отображает его. Теперь я думаю, что следующий шаг будет простой «угадать номер я имею в виду» программы, здесь нет кодаintel assembly cmp operation
section .data
First: db 'Try and guess the number im thinking of',10
Firstlen equ $-First
Correct: db 'YAY! you guessed my number correctly',10
Correctlen equ $-Correct
Fail: db 'You Suck',10
Faillen equ $-Fail
section .bss
num resb 5
section .text
global _start
_start:
mov eax,4
mov ebx,1
mov ecx,First
mov edx,Firstlen
int 80h
;get users number
mov eax,3
mov ebx,2
mov ecx,num
mov edx,5
int 80h
;compare number
mov edx,num
cmp edx,7
je correct; jump if equal
jne fail; jump if not equal to exit
fail:
mov eax,4
mov ebx,1
mov ecx,Fail
mov edx,Faillen
int 80h
;exit
mov eax,1
mov ebx,0
int 80h
correct:
mov eax,4
mov ebx,1
mov ecx,Correct
mov edx,Correctlen
int 80h
;exit agian
mov eax,1
mov ebx,0
int 80h
Независимо от того, что я действительно терпеть неудачу функция всегда вызывается. Поэтому я предполагаю, что я не сравниваю то, что я думаю, но я не могу найти какую-либо помощь в Интернете. Что я делаю неправильно?
пс. Я использую NASM 2.11.05
Когда вы вводите пользователя с помощью 'int 0x80', буфер заполняется символами, представляющими числа. Поэтому вам нужно преобразовать строку символов ascii, представляющих цифры, в целое число, а затем 'cmp', это число со значением, которое вы хотите проверить. –
Хотя не точный дубликат этого вопроса, и ответ может помочь вам: http://stackoverflow.com/questions/19309749/nasm-assembly-convert-input-to-integer –
А я вижу, имеет смысл. Угадайте, у меня есть намного больше чтения, чтобы сделать –