Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2013, 20:23   #1
vladis222
Пользователь
 
Регистрация: 26.09.2011
Сообщений: 24
По умолчанию Программа с ветвлениями на ассемблере

Здравствуйте,у нас лабораторная работа по ассемблеру в университете-программирование ветвлений ,я написал код программы, но не уверен в его правильности,посмотрите пожалуйста.
задание:
(a+b)/a+23b*a**3, если a > b
4. y = { (a-b)**4 , если а < b
a , если a = b

Код программы:
PHP код:
.386
.model flatstdcall
include kernel32.inc
includelib kernel32
.lib
.data
    
данные программы
    a db 
-6
    b db 
-6
    y dw 
?    
.
code
main proc
    
код главной функции
    movsx ax
,a        ;ax=a
    movsx cx
,b        ;cx=b
    cmp ax
,cx        ;ax bx сравнение(ax-bx)
    
jg greater        ;ax>bx (a>b)
    
jl less            ;ax<bx (a,b)
    
jmp eql            ;ax=bx (a=b)

    ;
если a>b
    greater
:
        ;
то y=(a+b)/a+23b*a^3
        
;movsx ax,a        ;ax=a
        test ax
,ax        ;если a==0 то
        jz divnull        
переход на метку divnull
        add ax
,cx        ;ax=a+b
        cwd
        movsx cx
,a
        idiv cx            
;ax=ax/a
        mov y
,ax        ;y=ax
        mov ax
,23        ;ax=23
        movsx cx
,b
        imul ax
,cx        ;ax=23b
        movsx cx
,a        ;cx=a
        imul cx            
;ax=23b*a
        imul cx            
;ax=23b*a^2
        imul cx            
;ax=23b*a^3
        add ax
,y
        mov y
,ax        ;y=(a+b)/a+23b*a^3
        jmp endlbl        
;в конец программы

    less
:
    ;
если a<b
        
;то y=(a-b)^4
        movsx ax
,a        ;ax=a
        sub ax
,cx        ;ax=a-b
        mov y
ax        ;y=ax=(a-b)
        
imul y            ;ax=(a-b)^2
        imul y            
;ax=(a-b)^3
        imul y            
;ax=(a-b)^4
        mov y
ax        ;y=(a-b)^4
        
        jmp endlbl        
;в конец программы

    eql
:
    ;
если a=b
        
;то y=a
        movsx ax
,a        ;ax=a
        mov y
,ax        ;y=ax=a
        jmp endlbl        
;в конец программы

    divnull
:            ;на 0 делить нельзя!
    
endlbl:
    
invoke ExitProcess0    завершение работы
main endp
end main 
vladis222 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа на ассемблере chpok1 Помощь студентам 1 07.06.2013 17:12
Алгоритмы с ветвлениями Олечка12 Помощь студентам 3 31.03.2013 22:08
Цикл с ветвлениями Jalced Помощь студентам 0 12.10.2011 06:47
Программа на Ассемблере!! ToKS Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 20 16.05.2010 22:19
Алгоритмы с ветвлениями.(Delphi) flyfry Помощь студентам 2 29.03.2010 14:42