Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: отрицательные числа  (Прочитано 20667 раз)
0 Пользователей и 1 Гость смотрят эту тему.
pokk
Помогающий

ru
Offline Offline

« : 03-04-2011 03:02 » 

Здравствуйте  помогите понять где у меня закралась ошибка или что я не правильно понимаю

у меня задание такое  "   Сформировать массив из 10 двухбайтных чисел. Переписать во второй массив все положительный числа."

я его разбил  не  более простые  задание что бы разобраться 
дня начало я хотел  просто  записать  числа из памяти в регистр   

Код:
V1 dw 9999h,8888h,777h,6666h,5555h,4444h,3333h,2222h,1111h,1000h
V2 dw 10 DUP(?)
n dw 0
.code
mov ax,@data
mov ds,ax
mov cx,10 ;число циклов(количесво элиментов)
mov bx,0 ;индекс
next:
clc
mov ax,v1[bx]
add bx,2
loop next



это всё работает хорошо    но вот  когда я заменил  8888h на  -8888h
Код:
V1 dw 9999h,8888h,777h,6666h,5555h,4444h,3333h,2222h,1111h,1000h
то вот тут  почему-то  он не записывает в регистр  число  8888 а пишет    7778 
подскажите что   неправильно
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 03-04-2011 05:55 » 

это всё работает хорошо    но вот  когда я заменил  8888h на  -8888h
Код:
V1 dw 9999h,8888h,777h,6666h,5555h,4444h,3333h,2222h,1111h,1000h
то вот тут  почему-то  он не записывает в регистр  число  8888 а пишет    7778 
подскажите что   неправильно

А почему вы решили, что после замены в регистр должно заноситься то же, что и до нее?

И попутный вопрос: как выглядит представление -8888h в коде с дополнением до двух и почему?
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
pokk
Помогающий

ru
Offline Offline

« Ответ #2 : 03-04-2011 06:20 » 

А почему вы решили, что после замены в регистр должно заноситься то же, что и до нее?

И попутный вопрос: как выглядит представление -8888h в коде с дополнением до двух и почему?

я думал  запишется тоже число и поменяется регистр флагов

"И попутный вопрос: как выглядит представление -8888h в коде с дополнением до двух и почему?"
мне не совсем понятен этот вопрос   в дополнительном коде ?
дополнительный код =инверсный код +1 в младший разряд
но с шестеричной системой исчисления возникают затруднения
« Последнее редактирование: 03-04-2011 06:47 от pokk » Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 03-04-2011 23:08 » 

я думал  запишется тоже число и поменяется регистр флагов

А теперь подумайте. Регистров несколько, ячеек памяти еще гораздо больше, и каждая из них может содержать некое число. Флаг знака в процессоре всего лишь один. Как он может хранить знаки всех чисел, использованных в программе?

но с шестеричной системой исчисления возникают затруднения

Пока не разберетесь досконально с двоичной и шестнадцатеричной системами счисления, в ассемблере совершенно нечего делать. Ну и заодно отличать шестнадцатеричную от шестеричной, разумеется.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
pokk
Помогающий

ru
Offline Offline

« Ответ #4 : 04-04-2011 10:15 » 

Цитата
.....Ну и заодно отличать шестнадцатеричную от шестеричной, разумеется.
это была опечатка   щас я разобрался что   -8888h  в дополнительном коде 7778
теперь остался вопрос  как   отличить в асемблере  дополнительный код от прямого  =)
в регистр  ax  у меня записывается как  просто  9999  так и  7778  
Цитата
А теперь подумайте. Регистров несколько, ячеек памяти еще гораздо больше, и каждая из них может содержать некое число. Флаг знака в процессоре всего лишь один. Как он может хранить знаки всех чисел, использованных в программе?
я пологал что он действует когда записываешь число в регистр   но раз вы это говорите значит опять у меня не правильно понимание
« Последнее редактирование: 04-04-2011 10:22 от pokk » Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 04-04-2011 11:27 » 

Команды типа пересылок (mov) состояние флагов НЕ МЕНЯЮТ
Для этого предусмотрены другие команды
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 04-04-2011 11:30 » 

Вам нужен хороший учебник ассемблера. Не понимая, как в компьютере представляются данные, бесполезно пытаться программировать на низком уровне.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
pokk
Помогающий

ru
Offline Offline

« Ответ #7 : 04-04-2011 12:48 » 

Код:
Вам нужен хороший учебник ассемблера. Не понимая, как в компьютере представляются данные, бесполезно пытаться программировать на низком уровне.
данные представляются в двоичной системе исчисления  01 01  =)
а учебник у меня есть "В. И. Юров ASEMBLER 2ое издание"

Код:
Для этого предусмотрены другие команды
ок пойду искать их =)
Записан
Basurman
Опытный

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 04-04-2011 14:56 » 

А может стоит все таки вдумчиво почитать учебник? Или взять другой?
В ячейке памяти или регистре могут храниться (о ужас): положительное число, отрицательное число, беззнаковое число.
И система счисления (двоичная, десятичная и т.д.) никакого значения не имеет. Система счисления для удобства представления - написать на бумажке.
Так как все таки в ячейке памяти записано отрицательное число и почему максимальное знаковое число меньше максимального беззнакового?
Записан
pokk
Помогающий

ru
Offline Offline

« Ответ #9 : 17-04-2011 15:13 » 

Разобрался я с этой задачей
получилось нечто такое
Код:
model small
.data
V1 dw 999h,8888h,7777h,-6666h,5555h,4444h,-3333h,2222h,1111h,1000h
V2 dw 10 DUP(?)
.code
mov ax,@data
mov ds,ax
mov cx,10 ;число циклов(количесво элиментов)
mov bx,0 ;индекс
                mov Si,0
next: ;метка
mov ax,v1[bx] ;записываем значения из массива в регистр ах
add bx,2 ;увеличиваем индекс на 2
add ax,0000h ;опереляем знак
js next2 ;переход  если  ax<0 то перейти на метку next2(пропускаем запись в массив)
mov v2[SI],ax ;записываем орицательно число в другой массив
                        add   SI,2
next2:
loop next
mov ax,4c00h
int 21h
end
всем спасибо за помощь   Улыбаюсь
« Последнее редактирование: 18-04-2011 09:22 от pokk » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines