Intereting Posts
Неофициальные / локальные хранилища и как они отличаются от PPA в Launchpad очень простой вопрос о ppa Lenovo g5030 не имеет аппаратного переключателя для Wi-Fi или Bluetooth после установки ubuntu 14.04 Как найти строки, соответствующие шаблону, и удалить их? После закрытия крышки экран дисплея и компьютер не зависают. Необходимо перезапускать каждый раз. (14.10) Как заставить светодиод перестать мигать во время сетевой активности с помощью Intel PRO / Wireless 5100 AGN? Могу ли я удалить и переустановить Ubuntu Software Center? Ярлыки клавиш больше не работают в xfce Есть ли в Ubuntu список обновлений пакетов? Как быть предупрежденным о сбое RAID 1 на Ubuntu 10.04 Перемещение файлов определенного типа / расширения из одного каталога в другой? Что случилось с новой темой значков для 12.04? «Пожалуйста, запустите команду« make modules_prepare »при установке NDISWrapper Модуль ядра Alsa snd-aloop для сервера 16.04 или 14.04? Работает ли Pentium 2 с i386 iso?

Почему мое сравнение с регистром не работает в Ассамблее NASM?

Изучение сборки NASM в 32-битном Ubuntu.

Это дает мне головные боли: предположим, что у меня есть массив (я называю его вектором в программе) в .data :

 vector db 1,2,3,4 size equ $-vector 

И у меня также есть номер 0 :

 index db 0 

Я хочу сохранить size в EBX , а затем сохранить index в ECX и, наконец, проверить, если ECX < EBX . В этом примере это будет 0 < 4 . Моя программа просто не делает этого:

 SECTION .data vector db 1,2,3,4 size equ $-vector index db 0 ; Vocabulary msg1 db "ECX = EBX",10 msg2len equ $-msg2 SECTION .text global main main: ; ----------------------------------------------- ; MAIN ; ----------------------------------------------- mov EBX,size ; EBX = 4 mov ECX,[index] ; ECX = 0 call check ; Check ECX < EBX (0 < 4) ; ----------------------------------------------- ; EXIT ; ----------------------------------------------- mov EAX,1 int 0x80 ; ----------------------------------------------- ; Check ; Checks whether ECX < EBX ; ----------------------------------------------- check: cmp ECX,EBX jge greater_or_equal mov EAX,4 mov EBX,0 mov ECX,msg1 mov EDX,msg1len int 0x80 jmp end_check greater_or_equal: mov EAX,4 mov EBX,0 mov ECX,msg2 mov EDX,msg2len int 0x80 end_check: ret 

Он выводит:

ECX> = EBX

Но это не так. ECX должен быть 0, а EBX – 4.

Я не вижу проблемы, но у меня есть наблюдение:

 mov EBX,size 

Эта строка меня беспокоит – я хотел сделать это:

 mov EBX,[size] 

Но я получаю ошибку сегментации. Я не знал, что это произойдет, но я предполагаю, что это потому, что size не является адресом – это просто номер, поэтому я не могу использовать скобки на нем. Возможно, я ошибаюсь (в этом случае это может быть причиной проблемы).

 index db 0 msg1 db "ECX < EBX",10 mov ecx, [index] 

index определяется как db , поэтому команда переместится в ecx этот 0 и еще 3 байта из msg1

Использование:

 index dd 0