Пример программы на ассемблере, реализующей условный переход:
section .text global _start _start: ; Установка значения переменной в регистр eax mov eax, 5 ; Сравнение значения переменной с 5 cmp eax, 5 ; Если переменная равна 5, перейти к метке equal je equal ; Вывод сообщения, что переменная не равна 5 mov eax, 4 ; sys_write mov ebx, 1 ; file descriptor 1 (stdout) mov ecx, not_equal ; указатель на сообщение mov edx, len_not_equal ; длина сообщения int 0x80 ; вызов системного вызова ; Завершение программы mov eax, 1 ; sys_exit xor ebx, ebx ; код завершения 0 int 0x80 ; вызов системного вызова ; Метка equal equal: ; Вывод сообщения, что переменная равна 5 mov eax, 4 ; sys_write mov ebx, 1 ; file descriptor 1 (stdout) mov ecx, equal_msg ; указатель на сообщение mov edx, len_equal_msg ; длина сообщения int 0x80 ; вызов системного вызова ; Завершение программы mov eax, 1 ; sys_exit xor ebx, ebx ; код завершения 0 int 0x80 ; вызов системного вызова section .data equal_msg db "Переменная равна 5", 0xa ; сообщение о равенстве len_equal_msg equ $ - equal_msg ; длина сообщения not_equal db "Переменная не равна 5", 0xa ; сообщение о не равенстве len_not_equal equ $ - not_equal ; длина сообщения
Для тестирования программы можно использовать следующий набор исходных данных:
Переменная равна 5: значение переменной в регистре eax равно 5Переменная не равна 5: значение переменной в регистре eax не равно 5
Проверьте правильность работы программы, выполнив её с данными из предложенного набора.
Пример программы на ассемблере, реализующей условный переход:
section .textglobal _start
_start:
; Установка значения переменной в регистр eax
mov eax, 5
; Сравнение значения переменной с 5
cmp eax, 5
; Если переменная равна 5, перейти к метке equal
je equal
; Вывод сообщения, что переменная не равна 5
mov eax, 4 ; sys_write
mov ebx, 1 ; file descriptor 1 (stdout)
mov ecx, not_equal ; указатель на сообщение
mov edx, len_not_equal ; длина сообщения
int 0x80 ; вызов системного вызова
; Завершение программы
mov eax, 1 ; sys_exit
xor ebx, ebx ; код завершения 0
int 0x80 ; вызов системного вызова
; Метка equal
equal:
; Вывод сообщения, что переменная равна 5
mov eax, 4 ; sys_write
mov ebx, 1 ; file descriptor 1 (stdout)
mov ecx, equal_msg ; указатель на сообщение
mov edx, len_equal_msg ; длина сообщения
int 0x80 ; вызов системного вызова
; Завершение программы
mov eax, 1 ; sys_exit
xor ebx, ebx ; код завершения 0
int 0x80 ; вызов системного вызова
section .data
equal_msg db "Переменная равна 5", 0xa ; сообщение о равенстве
len_equal_msg equ $ - equal_msg ; длина сообщения
not_equal db "Переменная не равна 5", 0xa ; сообщение о не равенстве
len_not_equal equ $ - not_equal ; длина сообщения
Для тестирования программы можно использовать следующий набор исходных данных:
Переменная равна 5: значение переменной в регистре eax равно 5Переменная не равна 5: значение переменной в регистре eax не равно 5Проверьте правильность работы программы, выполнив её с данными из предложенного набора.