Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Сложение чисел


Автор: N0rd 16.12.2004, 21:56
Разработать программу, которая суммирует произвольное количество одноцифровых чисел. При получении символа "@" суммирование прекращается и сумма выводится на экран. Сумма должна накапливаться в машинном слове. Сделать контроль переполнения.

Помогите пожалуйста с программой.Для начала хотелось бы узнать что такое переполнение и как его проконтролировать?

Добавлено @ 22:00
Кстати забыл добавить,используем TASM 2.0.

Автор: maxim1000 16.12.2004, 23:46
Цитата
Для начала хотелось бы узнать что такое переполнение и как его проконтролировать

это, когда результат не помещается в переменную (например 300 не помещается в байт, т.к. в его двоичной записи участвует 9 бит)
его легко проконтролировать, анализируя старший бит слова (если он изменился с 1 на 0, значит переполнение произошло)

Автор: Akina 17.12.2004, 09:18
Цитата(maxim1000 @ 17.12.2004, 00:46)
его легко проконтролировать, анализируя старший бит слова (если он изменился с 1 на 0, значит переполнение произошло)

не факт. 0FFFFh + 0FFFFh = CF + 0FFFEh. Анализировать надо именно CF после ADD.

Автор: maxim1000 17.12.2004, 09:59
Цитата
не факт. 0FFFFh + 0FFFFh = CF + 0FFFEh. Анализировать надо именно CF после ADD.

да, и про флаг забыл, и с битом перепутал (там надо было не бит смотреть, а уменьшение результата после сложения)

Автор: N0rd 17.12.2004, 21:23
А как это все на языке ассемблера будет выглядеть?Подскажите пожалуйста начинающему програмисту smile .

Автор: Chingachguk 18.12.2004, 10:44
Код

MyNumber db '12345@'

mov si,offset MyNumber
mov bx,0

@@GetSum:

 mov  al,[si]
 inc    si
; Check for end of string
 cmp  al,'@'
 jz     @@GetSumDone
; Convert symbol (AL) to word (AX)
 sub  al,'0'
 mov ah,0
; BX:=BX+AX
 add  bx,ax
; Check for overflow (ex: FFFF->0000, etc)
 jc      @@Overflow
; to next symbol
 jmp   @@GetSum

@@GetSumDone:
...

@@Overflow:
...

Автор: N0rd 22.12.2004, 00:52
Спасибо большое!Программу сдал.
Добавлено @ 00:56
Помогите пожалуйста ещё с одним.Подскажите ответы на теоретические вопросы так или иначе связанные с ассемблером.Завтра зачетная работа за первый семестр smile ,помогите с ответами хоть на некоторые из них(кроме перевода между системами счисления):
1
Необходимость овладения архитектурной культурой.
2
Понятие процессора. Основное назначение и функции центрального
процессора.
3
Перечислить 3 основных компонента системной среды центрального
процессора Intel 8086/8088 и назначение каждого из них.
4
Изобразить в виде блок-схемы основной цикл процессора.
5
Перевод числа из системы с произвольным основанием в 10-ю систему.
6
Перевод числа из 10-й системы в систему с произвольным основанием.
7
Перевод числа из 2-й системы в 8-ю систему и обратно.
8
Перевод числа из 2-й системы в 16-ю систему и обратно.
9
Перевод числа из 8-й системы в 16-ю систему и обратно.
10
С использованием понятий: "двоичная арифметика, дополнительный код,
переполнение" описать процесс вычисления процессором в однобайтовой
ячейке памяти значения выражения 128-45+180.
11
Указать в 16-ричной системе диапазоны возможных значений для
знаковых и беззнаковых чисел, хранящихся в ячейках памяти: байт,
слово, двойное слово. Обосновать ответ.
12
Указать максимальный размер адресного пространства оперативной памяти,
которое способен адресовать центральный процессор при использовании
16-битного режима адресации. Обосновать ответ.
14
Регистры процессора: понятие, свойства, основные группы регистров
процессора 8086.
15
Особенности стекового доступа к памяти в сравнении с адресным.
16
Чем объяснить, что 20-битное значение базового адреса сегмента
кратно 16? Чему равен размер сегмента и чем это объясняется?"
18
В DS записано значение 1234h. В сегменте данных хранится строка
'Ассемблер$', причем между символом конца этой строки и начальным
байтом сегмента данных находится 50 байт. Написать значения near и
far адресов этой строки.
19
Регистр CS и командный сегмент. Почему нельзя напрямую менять
значение CS?
20
Регистр DS и сегмент данных. С какой целью в начале программы
присутствуют строки:
mov ax, @data
mov ds, ax
21
Регистр ES и дополнительный сегмент данных.
22
Регистры SS, SP, BP и стековый сегмент.
23
Написать формулу, связывающую логический и физический адреса ячейки ОП.
Привести пример, демонстрирующий возможность принадлежности одного
физического адреса двум сегментам: командного и данных.
24
Умолчания процессора при выборе сегментных регистров и перемещений.
25
Операционные регистры. Коротко описать назначение каждого. Основное их
отличие от регистров остальных групп.
26
Регистр IP.
27
Регистр флагов и флаги. Отличие флага переноса CF от флага переполнения
OF.
28
Основные возможности отладчика Turbo Debugger.
29
Язык ассемблера, определение, достоинства.
30
Символьное имя в языке ассемблера, именуемые объекты языка, атрибуты
имени.
31
Формат команды языка ассемблера.
32
Машинные команды, директивы ассемблера.
33
Операции OFFSET и SEG. Как с помощью их комбинации определить
логический адрес начала строки, которой соответствует метка данных
Stroka DB 'TURBO ASSEMBLER'?
35
Директивы определения данных.
36
Процесс ассемблирования и текущий счетчик адреса.
37
Перемещение, смещение, исполнительный адрес команды.

Пожалуйста выручите!!

Автор: Akina 22.12.2004, 10:05
А попросить чтобы кто-нить книжку купил по АСМу и подарил ее тебе - мысля не приходила в голову? Значит скоро придет... только не вздумай тут ее высказать...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)