Проверка байт статуса - Assembler

Формулировка задачи:

Напишите программу которая проверяет байт STATUS и переходит к ROUTINE_1, если биты 1, 3 или 5 содержат 1. В противном случае она переходит к ROUTINE_2, если оба бита 1 и 3 содержат 1, и к ROUTINE_3, если биты 1 и 3 содержат 0. Во всех остальных случаях программа переходит к ROUTINE_4.
.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
Программа работает некорректно. После запуска программа выводит 4. Даже если убрать jmp routine_4 все равно выводит 4 или добавить routine_5: mov ebx,99 после routine_4: mov ebx,4 и routine_5 не как не вызывать, то программа всё ровно выведет 99. Как решить эту проблему. Заранее спасибо.


textual

Код к задаче: «Проверка байт статуса - Assembler»

1
2
3
4
Эта работа вам не подошла?

Вы всегда можете заказать любую учебную работу у наших авторов от 20 руб.


СДЕЛАЙТЕ РЕПОСТ

15   голосов, оценка 3.800 из 5

Источник