Уважаемые участники форума, прошу помочь решить задачу с лабораторной работы. Я новичок и не могу разобраться с командами условного перехода. Задача Вычислить функциии 7*x+x*x-1 при x<10 и z=0 5*y/z при x>5 и y=0 5*x + 3*y +3 все стальные значения x,y,z (значения задаються в коде произвольно и изначально) Мои код То что получись написать без ошибок, но логика программы никуда не годиться, поэтому прошу помоши. Код (Text): data segment x db 5 y db 3 z db 4 f dw ? data ends ;code code segment assume cs:code, ds:data main: mov ax, data mov ds,ax mov al, x cmp al , 10 jb f1 cmp al, 10 jg f3 mov bl ,z cmp bl , 0 je f1 cmp bl , 0 jne f3 mov cl , x cmp cl, 5 jg f2 cmp cl,5 jl f3 mov dl , y cmp dl,0 je f2 cmp dl, 0 jne f3 ;f1 f1: mov al,7 mul x mov bl, x mul x add al,bl sub al,1 ;f2 f2: mov cl,5 mul y mov dl,al div z ;f3 f3: mov al,5 mul x mov bl,al mov cl, 3 mul y add cl , al add al , 3 rs: mov ax,4c00h int 21h code ends end main Код написан и откомпелирован под TASM/TLINK Заранее спасибо.
Непонятны (или неполны) условия. Что значит "х<10"? А может х быть "-5"? Если отрицательные значения будут, тогда используются инструкции JG/JL - переход если больше/переход если меньше. Если отрицательных нет, тогда используются инструкции JA/JB - переход если больше/переход если меньше. И дважды сравнивать не надо, можно переходить пару раз после одного сравнения: Код (Text): cmp al, 10 jg .GREATER je .EQUAL ; ; AL < 10 -- at this point ; Совет: напиши логику на другом языке или на псевдо-языке и потом просто переведи на ассемблер. Например: Код (Text): IF ((Z=0) AND (X<10)) GOTO F1 IF ((Y=0) AND (X>5)) GOTO F2 F3: F1: F2: На сложных условиях (там где более одного сравнивания) поставь метки: Кроме того, после вычисления F1,F2,F3 у тебя нет переходов на общую ветку и на пример после F1 код "упадёт" на F2, что неверно. Код (Text): IF ((Z=0) AND (X<10)) GOTO F1 CHECK2: IF ((Y=0) AND (X>5)) GOTO F2 F3: ; calculation ... jmp .done F1: ; calculation ... jmp .done F2: ; calculation ... .done: Далее просто: переводи условия последовательно. Например, если Z НЕ ноль, то переходим сразу на CHECK2. Иначе, проверка условия после "AND" и если оно истинно - тогда F1. И т.п.