pokk
Помогающий
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
|
|
« Ответ #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
Помогающий
Offline
|
|
« Ответ #2 : 03-04-2011 06:20 » |
|
А почему вы решили, что после замены в регистр должно заноситься то же, что и до нее?
И попутный вопрос: как выглядит представление -8888h в коде с дополнением до двух и почему?
я думал запишется тоже число и поменяется регистр флагов "И попутный вопрос: как выглядит представление -8888h в коде с дополнением до двух и почему?" мне не совсем понятен этот вопрос в дополнительном коде ? дополнительный код =инверсный код +1 в младший разряд но с шестеричной системой исчисления возникают затруднения
|
|
« Последнее редактирование: 03-04-2011 06:47 от pokk »
|
Записан
|
|
|
|
Dale
|
|
« Ответ #3 : 03-04-2011 23:08 » |
|
я думал запишется тоже число и поменяется регистр флагов А теперь подумайте. Регистров несколько, ячеек памяти еще гораздо больше, и каждая из них может содержать некое число. Флаг знака в процессоре всего лишь один. Как он может хранить знаки всех чисел, использованных в программе? но с шестеричной системой исчисления возникают затруднения Пока не разберетесь досконально с двоичной и шестнадцатеричной системами счисления, в ассемблере совершенно нечего делать. Ну и заодно отличать шестнадцатеричную от шестеричной, разумеется.
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #4 : 04-04-2011 10:15 » |
|
.....Ну и заодно отличать шестнадцатеричную от шестеричной, разумеется. это была опечатка щас я разобрался что -8888h в дополнительном коде 7778 теперь остался вопрос как отличить в асемблере дополнительный код от прямого =) в регистр ax у меня записывается как просто 9999 так и 7778 А теперь подумайте. Регистров несколько, ячеек памяти еще гораздо больше, и каждая из них может содержать некое число. Флаг знака в процессоре всего лишь один. Как он может хранить знаки всех чисел, использованных в программе? я пологал что он действует когда записываешь число в регистр но раз вы это говорите значит опять у меня не правильно понимание
|
|
« Последнее редактирование: 04-04-2011 10:22 от pokk »
|
Записан
|
|
|
|
Sla
|
|
« Ответ #5 : 04-04-2011 11:27 » |
|
Команды типа пересылок (mov) состояние флагов НЕ МЕНЯЮТ Для этого предусмотрены другие команды
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dale
|
|
« Ответ #6 : 04-04-2011 11:30 » |
|
Вам нужен хороший учебник ассемблера. Не понимая, как в компьютере представляются данные, бесполезно пытаться программировать на низком уровне.
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
pokk
Помогающий
Offline
|
|
« Ответ #7 : 04-04-2011 12:48 » |
|
Вам нужен хороший учебник ассемблера. Не понимая, как в компьютере представляются данные, бесполезно пытаться программировать на низком уровне. данные представляются в двоичной системе исчисления 01 01 =) а учебник у меня есть "В. И. Юров ASEMBLER 2ое издание" Для этого предусмотрены другие команды ок пойду искать их =)
|
|
|
Записан
|
|
|
|
Basurman
|
|
« Ответ #8 : 04-04-2011 14:56 » |
|
А может стоит все таки вдумчиво почитать учебник? Или взять другой? В ячейке памяти или регистре могут храниться (о ужас): положительное число, отрицательное число, беззнаковое число. И система счисления (двоичная, десятичная и т.д.) никакого значения не имеет. Система счисления для удобства представления - написать на бумажке. Так как все таки в ячейке памяти записано отрицательное число и почему максимальное знаковое число меньше максимального беззнакового?
|
|
|
Записан
|
|
|
|
pokk
Помогающий
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 »
|
Записан
|
|
|
|
|