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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.05.2011, 13:07   #1
Ksy
Пользователь
 
Регистрация: 07.06.2009
Сообщений: 64
Восклицание Функция сравнения

Объясните, пожалуйста, почему в выделенных строчках мы сравниваем сx и dx, и в каких ситуациях они могут быть равными или не равными.


; Выполнили студентки Пасека Ксения и Хошимова Мунисса (гр. 621п ХАИ, 16.03.2011)
; Компиляция: tasm asmfile.asm /l /ml
; Вычислить заданное целочисленное выражение для исходных данных
; в знаковых форматах длиной 8 и 16 бит: signed char и int:
; Вариант № 35) (a-b*4-1)/(c/31+a*b);
; Вариант № 12) (25/c - d + 2)/(b + a*a-1);

Код:
.model large, C
CODESEG

Extrn c abs:byte
Extrn c cbs:byte
Extrn c dbs:byte
Extrn c bbs:byte

Extrn c aws:word
Extrn c cws:word
Extrn c dws:word
Extrn c bws:word

Extrn c n:word
Extrn c dn:word
Extrn c res_16:word
Extrn c f:byte

Public c proc_byte_s
Public c proc_word_s


;Данные 8 бит
proc_byte_s proc far
;Считаем знаменатель (c/31+a*b)
  
   mov al, cbs           ;<al>=cbs
   CBW                   ;<al>=><ax>
   mov bl, 31            ;<bl>=31
   Idiv bl               ;<al>=<ax>/<bl>
   push al               ;<al> заносим в стек
   Imul bbs              ;<al> = <al>*bbs
   mov bx, ax            ;<bx>=<ax>
   pop al                ;<al> извлукаем из стека
   CBW
   add ax, bx            ;<ax>=<ax>+<bx>
   mov dn, ax            ;dn=<ax>


;Считаем числитель (a-b*4-1)
   mov al, bbs           ;<al>=bbs
   mov bl,4				 ;<bl>=4
   Imul bl               ;<ax>=<al>*<bl>//*4
   mov bx,ax             ;<bx>=<ax>
   mov al, abs           ;<al>=abs
   CBW                   ;<al>=> <ax>//abs
   sub ax, bx            ;<ax>=<ax>-<bx>//a-b*4
   dec ax                ;<ax>=<ax>-1//a-b*4-1
   mov n, ax             ;n=<ax>
;Результат
   CWD                   ;<ax>=> <dx:ax>
   Idiv dn               ;<ax>=<dx:ax>/dn
   mov res_16, ax        ;res_16=<ax>
   ret
proc_byte_s endp


;Данные 16 бит
proc_word_s proc far
;Считаем знаменатиль
   mov f, 0                    ;f = 0
   mov ax, aws             ;<ax>=aws
   Imul ax                    ;<dx:ax>=<ax>*<ax>
   mov cx, dx               ;<cx>=<dx>
   CWD                       ;<ax>=> <dx:ax>
   cmp cx, dx               ;Сравниваем <cx> и <dx>
   jne Error_perepoln     ;Если <cx> и <dx> не равны, то прейти на метку Error_perepoln
   dec ax                     ;<ax>=<ax>-1
   mov dn, ax               ;dn=<ax>//dn=a*a-1
   mov ax, bws             ;<ax>=b
   adc ax, dn               ;<ax>=<ax>+dn
   jc Error_perepoln      ;Если CF=1
   mov dn, ax              ;dn=<ax>
;Считаем числитель
   mov ax, 25              ;<ax>=25
   CWD                      ;<ax>=> <ax:dx>
   Idiv cws                  ;<ax>=<dx:ax>/c
   sub ax, dws            ;<ax>=<ax>-d
   jc Error_perepoln     ;Если CF=1
   adc ax, 2                ;<ax>=<ax>+2
   jc Error_perepoln     ;Если CF=1
   mov n, ax               ;n=<ax>
;Результат
   CWD                      ;<ax> => <ax:dx>
   Idiv dn                     ;<ax>=<dx:ax>/dn
   mov res_16, ax        ;res_16=<ax>
   jmp Short Exit         ;Перейти на метку Exit
   Error_perepoln: mov f, 1
   Exit: ret
   proc_word_s endp
      end
Вложения
Тип файла: rar нашиЛабы.rar (632.7 Кб, 10 просмотров)

Последний раз редактировалось rpy3uH; 16.05.2011 в 18:08.
Ksy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
функция сравнения двух дат Don Karleone Общие вопросы Delphi 6 05.12.2010 20:46
Функция сравнения sanya94 Общие вопросы C/C++ 3 02.12.2010 22:24
функция сравнения bank_notes Microsoft Office Excel 3 12.02.2010 22:08
Матрицы(функция сравнения). С++ Anaraida Помощь студентам 3 24.05.2009 18:01