Добро пожаловать на форумы Боевого Народа (бывший форум Live.CNews.ru)!

ВАЖНЫЕ ТЕМЫ: FAQ по переезду и восстановлению учеток | Ошибки и глюки форума.
О проблемах с учетными записями писать СЮДА.
Assembler - Форумы Боевого Народа
IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
Assembler, Проверьте код
сообщение 15.12.2010, 12:39
Сообщение #1





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Нужно на ассемблер решить пример С=(А+В)/4-16, есть код, проверьте его на правильность, пожалуйста:
[ calc proc
xor al, al
mov al, a
mov bl, b
add al, bl
mov bl, 4h
div bl
sub al, 10h
mov vsp, al
ret
calc endp
]
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 17.12.2010, 9:51
Сообщение #2





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Цитата(Marusya32 @ Среда, 15 Декабря 2010, 12:39:20) *
Нужно на ассемблер решить пример С=(А+В)/4-16, есть код, проверьте его на правильность, пожалуйста:
[ calc proc

xor al, al
mov al, a
mov bl, b
add al, bl
mov bl, 4h
div bl
sub al, 10h
mov vsp, al
ret

calc endp
]


че-то я уже совсем подзабыл 16-битный x86 асм smile.gif
Но если мне не изменяет память, то выделенная операция делит AX на BL.
Это автоматически означает, что первая часть кода не очень корректная.

То есть, финальный вариант
Цитата
calc proc

xor ax, ax
xor bx, bx
mov al, a
mov bl, b
add ax, bx
mov bl, 4h
div bl
sub al, 10h
mov vsp, al
ret

calc endp

Может быть, не на 100% идеал, но правильнее предыдущего yes.gif
Изменения выделил.

Есть вариант вообще без операции деления, потому как идет деление на 4 (2 в степени 2)
Вместо

mov bl, 4h
div bl

можно вставить

shr ax, 2

Это побитовый сдвиг регистра ax на 2 бита вправо, что равносильно делению без остатка на 4
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 27.1.2011, 13:35
Сообщение #3





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



VARP_9l ну вероятно переменная-результат
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 28.1.2011, 19:56
Сообщение #4





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



EdTambov shr вместо деления катит только для беззнаковых целых. Для целых со знаком sar нужен.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 29.1.2011, 2:49
Сообщение #5





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Цитата(orlusha @ Пятница, 28 Января 2011, 19:56:34) *
EdTambov shr вместо деления катит только для беззнаковых целых. Для целых со знаком sar нужен.

Орлуша, там старший байт всегда 0, т.е. всегда без знака, так что в данном случае пофиг, но насчет знака замечание верное (см. ниже)

Там более страшная проблема, возможно переполнение если вы складываете два байта, результат может быть больше 255 и потому необходимо проверить флаг переноса, если я не ошибаюсь CF, либо использовать комманду ADC (Add with carry)

Опять же правильное замечание Орлушы, насчет знака. A и В это числа со знаком или нет?

Для корректного решения необходимо более корректно поставить условие задачи, определите область значений A и В, а также как интерпретируются их значения (знаковые/беззнаковые). После этого данную задачу можно будет решить...
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 29.1.2011, 14:03
Сообщение #6





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Это же не ядерный реактор программируют smile.gif
Задача из школы/универа - решения простейшие, без извратов (обычно).


Цитата(ideatum @ Суббота, 29 Января 2011, 02:49:41) *
Там более страшная проблема, возможно переполнение если вы складываете два байта, результат может быть больше 255 и потому необходимо проверить флаг переноса, если я не ошибаюсь CF, либо использовать комманду ADC (Add with carry)

В моем ответе add ax, bx для мебели написано?
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 26.6.2012, 4:15
Сообщение #7





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Во первых что за ассемблер? MASM32 или старый TASM ? Судя по коду уклон делается на старый. (В нем, кстати
mov не проходит, но примем что все в порядке). Тогда xor явно лишний. Да, и proc calc near не забыть. Откуда берутся
a и b и vsp ведь параметров в процедурах на ассемблере нет!? Деление совершенно законно, хотя неплохо бы
использовать shr al,1h shr al,1h (c СL возится неохота). На первый взгляд все.
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 19.6.2014, 14:32
Сообщение #8





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



Прям кошмар из школы вернулся...
Перейти в начало страницы
Вставить ник
+Цитировать сообщение
сообщение 21.6.2014, 15:23
Сообщение #9





Группа:
Сообщений: 0
Регистрация: --
Пользователь №:



VSEM PIZDEC!
Перейти в начало страницы
Вставить ник
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 19.4.2024, 13:53
Консультации адвоката по уголовным делам. Бесплатно. По всей России