Проверка числа на четность - Assembler
Формулировка задачи:
почему у меня не переходит по метке четности тоесть Evenn?у меня он идет линейно. В чем может быть оишбка?
X dw 5429h Y dw 7844h Z dw 0AD43h Q dw 5622h L dw 0h M dw 0h R dw 0h .code * main: mov ax,@data mov ds,ax xor ax,ax ;... mov bx,0h mov cx,4h one: mov ax, [bx] add ax,1h mov [bx],ax add bx,2h add L,ax loop one mov ax, L mov bx,X and ax,X mov dx,ax mov ax,L and ax,Y sub dx,ax mov M,dx call adddiv;вызов процедуры jmp STe jmp exit adddiv: mov AX, 921Bh cmp M,AX JNe MRe jmp BRe MRe: mov BX, 12B9h mov dx,0h mov ax,M mov cx,2h idiv cx sub ax,BX mov R,ax ret BRe: mov ax,Q mov cx,2h div cx mov dx,ax mov ax,M sub ax,dx mov R,ax STe: test ax,R jnp Odd ;нечетное, переход на метку Odd jp Evenn ;четное, переход на метку Even Odd: mov ax, R sub R,1 mov ax,R Evenn: mov ax,R or R,009Fh mov ax,R ret exit:
считал все на калькуляторе проверял число четное
Решение задачи: «Проверка числа на четность»
textual
Листинг программы
jae label1; переход, если больше или равно mov ax,Q; mov cx,2h; div cx; mov dx,ax; mov ax,M; sub ax,dx mov R,ax
Объяснение кода листинга программы
jae label1;
- это инструкция перехода, которая будет выполнена, если значение в регистрах AX и CX больше или равно.mov ax,Q;
- это инструкция, которая помещает значение переменной Q в регистр AX.mov cx,2h;
- это инструкция, которая помещает значение 2 в регистр CX.div cx;
- это инструкция деления, которая делит значение в регистре AX на значение в регистре CX и помещает результат в регистры AX и DX.mov dx,ax;
- это инструкция, которая помещает значение из регистра AX в регистр DX.mov ax,M;
- это инструкция, которая помещает значение переменной M в регистр AX.sub ax,dx
- это инструкция вычитания, которая вычитает значение из регистра DX из значения в регистре AX и помещает результат обратно в регистр AX.mov R,ax
- это инструкция, которая помещает значение из регистра AX в переменную R.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д