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

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

Вернуться   Форум программистов > Операционные системы > Операционные системы общие вопросы
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2018, 12:28   #1
AskoldoFFF
Новичок
Джуниор
 
Регистрация: 14.05.2018
Сообщений: 7
По умолчанию Assembler. Помогите разобрать код,пожалуйста.

Не могу разобраться с частью кода,что идёт по идее на вывод результата. Ниже позначено,с какого момента непонятно..Помогите,кому не сложно.
Код:
;(c - d/2 + 33 )/(2*a*a - 1)
.MODEL small
.Stack 100h
Datas segment 
  A dw 1
  C dw -1 
  D dw -30
  F dw 2
  E dw 1
  G dw 33
  M dw 48
  Z dw ? 
  X dw ?
  h dw ?
  znam dw ?
  mess db 'Error! Division by zero.$'
Datas ends

Codes segment 
  Assume cs:Codes, ds:Datas
First:  mov ax, Datas
  mov ds, ax

  
  mov ax,D ;d->ax
  cwd
  idiv F    ;d/2->ax
  mov Z,ax ;z->d/2

  mov ax,C ;c->ax
  sub ax,Z ;c - d/2 -> ax

  add ax,G ;c - d/2 + g ->ax
  mov Z,ax ;z = c - d/2 + g

  mov ax,A ;a -> ax
  imul A    ;a*a -> ax
  imul F    ;2*a*a -> ax
  sub ax,E ;2*a*a - 1 -> ax

  ;if (2*a*a - 1 == NULL) divide by zero ->error
  cmp ax,0
  je @err 
  
  mov X,ax ;x = 2*a*a - 1
  mov ax,Z ;c - d/2 + g ->ax
  cwd
  idiv X    ;(c - d/2 + g )/(2*a*a - 1)

  mov Z,ax

(Вот с этого момента)
  
  xor ax, ax
  mov ax, Z
  push ax
  cmp ax, 0
  jns @plus 

  mov dl, '-'
  mov ah, 02h 
  int 21h
  pop ax
  neg ax

@plus:  xor cx, cx
  mov bx, 10

@dvsn:  xor dx, dx
  div bx
  push dx
  inc cx
  test ax, ax
  jnz short @dvsn 
  mov ah, 02h

@vivod: pop dx
  add dl, 30h ;
  int 21h
  loop @vivod
  jmp @end

@err:  mov dx, offset mess
  mov ah, 09h
  int 21h

@end:  mov ax, 4c00h
  int 21h
Codes ends
end First

Последний раз редактировалось Alex11223; 14.05.2018 в 12:37.
AskoldoFFF вне форума Ответить с цитированием
Старый 14.05.2018, 12:38   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так помочь-то каким образом?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.05.2018, 12:55   #3
AskoldoFFF
Новичок
Джуниор
 
Регистрация: 14.05.2018
Сообщений: 7
По умолчанию

Объяснить часть кода
AskoldoFFF вне форума Ответить с цитированием
Старый 14.05.2018, 13:03   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Вы ж не сказали что именно непонятно.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.05.2018, 14:27   #5
AskoldoFFF
Новичок
Джуниор
 
Регистрация: 14.05.2018
Сообщений: 7
По умолчанию

Так в самом коде написано в скобках, с какого момента не понятно.
AskoldoFFF вне форума Ответить с цитированием
Старый 14.05.2018, 15:05   #6
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Я про "что именно", а не "где".
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.05.2018, 15:33   #7
AskoldoFFF
Новичок
Джуниор
 
Регистрация: 14.05.2018
Сообщений: 7
По умолчанию

Каким образом происходит вывод результата?
AskoldoFFF вне форума Ответить с цитированием
Старый 14.05.2018, 15:43   #8
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Незнаю чего тут не понятно?
Код:
  
  xor ax, ax  // обнуляем регистр АХ 
  mov ax, Z // загружаем в него пермененю Z
  push ax  // сохраняем в стек
  cmp ax, 0 // сравниваем с нулём
  jns @plus  // прыгаем если больше

  mov dl, '-'           //Загружаем минус
  mov ah, 02h 
  int 21h               // выводим на дисплей
  pop ax               // выгружаем значение из стека
  neg ax               // меняем знак

// Выполняем перевод числа из машинного (2-чного) представления в десятичное
@plus:  xor cx, cx  // обнуляем счетчик cx в нем будет число цифр
  mov bx, 10         // Загружаем основание 10 для системы счёта

@dvsn:  xor dx, dx  // обнуляем dx
  div bx                 // делим DX:AX на BX 
  push dx               // сохраняем остаток от деления
  inc cx                  // увеличиваем счётчик
  test ax, ax           // проверка на 0. Означает что число мы поделили полностью.
  jnz short @dvsn    // повторяем если не 0. 
  mov ah, 02h

.// вывод
@vivod: pop dx   // достаем из стека сохраненные цифры
  add dl, 30h ;  // переводим их в ASCII - коды
  int 21h           // выводим на экран
  loop @vivod    // повторяем столько раз пока CX не станет 0. Т.е  сколько раз, сколько у нас было цифр
  jmp @end  // выходим

@err:  mov dx, offset mess // Вывод сообщения о ошибке
  mov ah, 09h
  int 21h

@end:  mov ax, 4c00h // корректно завершаем наше приложение, выходим.
  int 21h
Codes ends
end First
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 14.05.2018, 15:48   #9
AskoldoFFF
Новичок
Джуниор
 
Регистрация: 14.05.2018
Сообщений: 7
По умолчанию

Извиняюсь за некорректно поставленый вопрос,буду исправляться)
И спасибо большое за помощь.
AskoldoFFF вне форума Ответить с цитированием
Старый 14.05.2018, 15:50   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Выводится минус отрицательного. Остатки от деления на 10 в цикле запоминаются в стек и потом в другом цикле выводятся из стека как десятичные цифры
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобрать код Delphi Кари Помощь студентам 0 14.05.2015 22:32
Помогите разобрать статью Глава 39 - Украденные байты, украденный код Dimka-novitsek Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 14.09.2014 11:33
Доброго времени суток! Помогите,пожалуйста, разобрать в ошибке. linkoln_7 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 26.05.2014 22:48
Помогите пожалуйста разобрать код!!! vadim93 Помощь студентам 2 24.12.2013 14:56