Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 14.05.2018, 13:28   #1
AskoldoFFF
Новичок
 
Регистрация: 14.05.2018
Сообщений: 7
Репутация: 10
По умолчанию 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 в 13:37.
AskoldoFFF вне форума   Ответить с цитированием
Старый 14.05.2018, 13:38   #2
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,008
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

Так помочь-то каким образом?
Alex11223 вне форума   Ответить с цитированием
Старый 14.05.2018, 13:55   #3
AskoldoFFF
Новичок
 
Регистрация: 14.05.2018
Сообщений: 7
Репутация: 10
По умолчанию

Объяснить часть кода
AskoldoFFF вне форума   Ответить с цитированием
Старый 14.05.2018, 14:03   #4
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,008
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

Вы ж не сказали что именно непонятно.
Alex11223 вне форума   Ответить с цитированием
Старый 14.05.2018, 15:27   #5
AskoldoFFF
Новичок
 
Регистрация: 14.05.2018
Сообщений: 7
Репутация: 10
По умолчанию

Так в самом коде написано в скобках, с какого момента не понятно.
AskoldoFFF вне форума   Ответить с цитированием
Старый 14.05.2018, 16:05   #6
Alex11223
Модератор
Заслуженный модератор
 
Регистрация: 12.01.2011
Сообщений: 17,008
Репутация: 3316

icq: 512-765
skype: alexp.frl
По умолчанию

Я про "что именно", а не "где".
Alex11223 вне форума   Ответить с цитированием
Старый 14.05.2018, 16:33   #7
AskoldoFFF
Новичок
 
Регистрация: 14.05.2018
Сообщений: 7
Репутация: 10
По умолчанию

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

Незнаю чего тут не понятно?
Код:

  
  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, 16:48   #9
AskoldoFFF
Новичок
 
Регистрация: 14.05.2018
Сообщений: 7
Репутация: 10
По умолчанию

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите разобрать код Delphi Кари Помощь студентам 0 14.05.2015 23:32
Помогите разобрать статью Глава 39 - Украденные байты, украденный код Dimka-novitsek Assembler 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


08:05.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru