Проверка байт статуса - Assembler
Формулировка задачи:
Напишите программу которая проверяет байт STATUS и переходит к ROUTINE_1, если биты 1, 3 или 5 содержат 1. В противном случае она переходит к ROUTINE_2, если оба бита 1 и 3 содержат 1, и к ROUTINE_3, если биты 1 и 3 содержат 0. Во всех остальных случаях программа переходит к ROUTINE_4.
Программа работает некорректно. После запуска программа выводит 4. Даже если убрать jmp routine_4 все равно выводит 4
или добавить routine_5: mov ebx,99 после routine_4: mov ebx,4 и routine_5 не как не вызывать, то программа всё ровно выведет 99. Как решить эту проблему. Заранее спасибо.
.686 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\masm32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\masm32.lib includelib \masm32\lib\kernel32.lib .data message db "5",0; mestitle db "вывод ",0 buffer db 128 dup (0) format db "%d",0 .code start: sub ebx,ebx xor eax,eax mov eax,10101b bt eax,1 jc routine_1 bt eax,3 jc routine_1 bt eax,5 jc routine_1 bt eax,1 jc routine_2 bt eax,3 jc routine_2 bt eax,1 jnc routine_3 bt eax,3 jnc routine_3 jmp routine_4 routine_1: mov ebx,1 routine_2: mov ebx,2 routine_3: mov ebx,3 routine_4: mov ebx,4 invoke wsprintf, addr buffer,addr format,ebx invoke MessageBox,0,addr buffer,addr mestitle,MB_OK invoke ExitProcess,0 call ExitProcess end start
Решение задачи: «Проверка байт статуса»
textual
Листинг программы
1 2 3 4
Объяснение кода листинга программы
- Создается переменная
байт_статуса
для хранения значения статуса в виде байта. - Запрашивается у пользователя ввод значения статуса и сохраняется в переменную
байт_статуса
. - Проверяется значение переменной
байт_статуса
с помощью условного оператора. - Выводится соответствующее сообщение пользователю в зависимости от значения переменной
байт_статуса
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д