Проверка на знак числа (and, test) - Assembler
Формулировка задачи:
and bx, 8000h js znakect jns znakanet znakect: mov ah,09h mov dx, offset int3 int 21h jmp @end2 znakanet: mov ah,09h mov dx, offset int4 int 21h jmp @end2
Решение задачи: «Проверка на знак числа (and, test)»
textual
Листинг программы
; проверка на четность ;test dx, dx; and dx, 0001h jz chetnoe jnz nechetnoe chetnoe: mov ah,09h ; испортил AH mov dx, offset int2 int 21h ; испортил AL (эта функция AL портит, записывая в него 24h) jmp @znak nechetnoe: mov ah,09h ; испортил AH mov dx, offset int1 int 21h ; испортил AL (эта функция AL портит, записывая в него 24h) jmp @znak @znak: mov bx, ax ;здесь уже в ax мусор (тонее 924h), причем 9 в AH запихал ты ; проверка на знак ;test bx, bx; and bx, 8000h ;проверяем на знак мусор 924h (к слову он всегда положительный)
Объяснение кода листинга программы
- Проверка на четность:
test dx, dx
- проверяет, является ли значение в регистре dx четным. Если это так, то переходит к меткеchetnoe
, иначе переходит к меткеnechetnoe
.and dx, 0001h
- проверяет последний бит регистра dx. Если он равен 1, то число нечетное, и переходит к меткеnechetnoe
, иначе переходит к меткеchetnoe
.jz chetnoe
- если значение в регистре dx четное, то переходит к меткеchetnoe
.jnz nechetnoe
- если значение в регистре dx нечетное, то переходит к меткеnechetnoe
.mov ah,09h
- перед использованием функцииint 21h
испортить AH, чтобы в нем было значение 9.mov dx, offset int2
- перед использованием функцииint 21h
записать в регистр dx адрес таблицы функций, чтобы функция обработала число как целое.int 21h
- вызывает функцию обработки числа, которая записывает в AL значение 24h, независимо от того, какое число было в регистре dx.jmp @znak
- после использования функцииint 21h
переходит к метке@znak
.
- Проверка на знак:
test bx, bx
- проверяет, является ли значение в регистре bx равным 0. Если это так, то переходит к меткеznak
, иначе переходит к меткеneznak
.and bx, 8000h
- проверяет последний бит регистра bx. Если он равен 1, то число отрицательное, и переходит к меткеneznak
, иначе переходит к меткеznak
.mov bx, ax
- перед проверкой значения в регистре bx, скопировать значение из регистра ax в bx. В ax уже мусор (924h), причем 9 записано в AH.jz znak
- если значение в регистре bx равно 0, то переходит к меткеznak
.jnz neznak
- если значение в регистре bx не равно 0, то переходит к меткеneznak
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д