Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.08.2012, 01:55   #1
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию как выполняется деление в ассемблере

Всем здравствуйте, у меня к вам несколько вопросов, а точнее просьб)))), 1) Нужно чтобы вы мне помогли пользоваться операцией DIV; как я знаю данные будут хранится в регистрах АХ:DX как это понять? Если возможно объясните на простом примере как: вводятся два числа делятся одно на другое.

2) нужно написать программу, в которую вводется символ, а на экран выводется его ASKII-код, есть предположение как это проделать сцифрами, но с остальными символами не получается

Заранее спасибо
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 02.08.2012, 16:31   #2
sauvage
Пользователь
 
Регистрация: 08.08.2011
Сообщений: 18
По умолчанию

1) Например 100 / 6
Код:
mov edx, 0
mov eax, 100d
mov ebx, 6d
div ebx
В EDX:EAX заноситься делимое, в EBX делитель, после операции DIV EBX в EAX будет результат (целое число), а в EDX остаток.

2) Ввод символов я бы попробовал сделать через ReadConsole, потом преобразование через wsprintf.
sauvage вне форума Ответить с цитированием
Старый 02.08.2012, 20:15   #3
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Цитата:
В EDX:EAX заноситься делимое, в EBX делитель, после операции DIV EBX в EAX будет результат (целое число), а в EDX остаток.

2) Ввод символов я бы попробовал сделать через ReadConsole, потом преобразование через wsprintf.
Это под Windows или другие x32 системы. А TC скорее всего нужно под DOC
Цитата:
1) Нужно чтобы вы мне помогли пользоваться операцией DIV; как я знаю данные будут хранится в регистрах АХ:DX как это понять? Если возможно объясните на простом примере как: вводятся два числа делятся одно на другое.
Разрешите не объяснять вам, а дать ссылку? http://asmworld.ru/uchebnyj-kurs/011...nie-i-delenie/ Думаю, что все будет понятно.

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 04.08.2012, 23:57   #4
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

спасибо, а если можете код сам написать на вопрос 2, пошется под дос
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 19.08.2012, 02:22   #5
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

ответ на второй вопрос я сам смог написать, вот код))))), а возможно ли упростить алгоритм?

Код:
 

Code Segment Para public 'Code'
   Assume CS:Code,DS:Code,SS:Code,ES:Code
   ORG 100h 
   Mov DX,Code
   Mov DS,DX
   Mov SS,DX
   Mov ES,DX
jmp m2
np1 db 'BaLLL CIMBOL..$'
np2 db 'OTBET: $'
np3 db 'BbIXOD-Lybaya klaBisha $'
m2:mov ah,09h
lea dx,np1
int 21h
mov cx,0
mov bx,0
mov ah,1
int 21h 
mov bl,al
mov ah,2
mov dl,0ah
int 21h
mov ah,2
mov dl,0dh
int 21h
mov ah,09h
lea dx,np2
int 21h
mov cl,2
m1:shl bx,4
mov ah,2
add bh,30h
mov ah,2
mov dl,bh
int 21h
mov bh,0
loop m1
mov ah,2
mov dl,'h'
int 21h
mov ah,2
mov dl,0ah
int 21h
mov ah,2
mov dl,0dh
int 21h
mov ah,09h
lea dx,np3
int 21h
mov ah,1
int 21h
   Mov AH,4Ch
   Int 21h
   Code Ends
   end
а с делением разобрался, спасибо, но вот еще вопрос: возможно делить строку на строку?
например вводится 1212121212 и делится на 121212 и выводит 10000,0099,,,,, это всего лишь пример, но вводится может что угодно
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 19.08.2012, 09:48   #6
Fedor666
Пользователь
 
Регистрация: 22.02.2010
Сообщений: 71
Радость

Цитата:
Сообщение от Алексей_2012 Посмотреть сообщение
возможно делить строку на строку?
например вводится 1212121212 и делится на 121212 и выводит 10000,0099,,,,, это всего лишь пример, но вводится может что угодно
Нет. Надо преобразовать строки в числа, поделить и преобразовать обратно.
Fedor666 вне форума Ответить с цитированием
Старый 19.08.2012, 15:52   #7
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

ну да, это понятно, отнять 30h, потом вернуть, но как реализовать такое длинное деление, когда делитель должен находится в АХ? а в АХ поместиться число в диапозоне от 0 до 99
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 20.08.2012, 11:46   #8
_PROGRAMM_
Участник клуба
 
Аватар для _PROGRAMM_
 
Регистрация: 30.07.2009
Сообщений: 1,601
По умолчанию

Цитата:
ну да, это понятно, отнять 30h,
Не-а. Это если один символ. От 0 до 9. Для преобразования нужно описать небольшой алгоритм, который можно с легкостью найти во всемирной паутине.
Цитата:
но как реализовать такое длинное деление, когда делитель должен находится в АХ?
Предвидел вопрос, но не стал заранее отвечать. Деление осуществляется примерно также, как вы делали это в школе - столбиком. Только по 16бит(в зависимости от алгоритма деления) В книге Зубкова - Ассемблер есть пример. Можно поискать в интернете. Их множество.
Цитата:
а в АХ поместиться число в диапозоне от 0 до 99
Неверно в AX поместится 2^16. Т.е. 65536 значений или число до 65535(включительно).

В мире нет вечных двигателей, зато есть вечные тормоза...

Блог
_PROGRAMM_ вне форума Ответить с цитированием
Старый 24.08.2012, 03:31   #9
Алексей_2012
t45t
Участник клуба
 
Аватар для Алексей_2012
 
Регистрация: 20.03.2012
Сообщений: 1,849
По умолчанию

хм спасобо вам)) обязательно найду все что нужно)
from dark to light)
Алексей_2012 вне форума Ответить с цитированием
Старый 24.08.2012, 07:28   #10
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
ну да, это понятно, отнять 30h,
Совсем не обязательно. Существует множество кодировок и отниматься могут очень разные вещи. Вдобавок, вы получите неупакованное десятичное число, с которым логика работы процессора не сможет правильно работать.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Деление числа в ассемблере Настя22 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 23.01.2011 13:12
как узнать выполняется ли bat файл? wm_leviathan Общие вопросы Delphi 1 24.03.2010 11:32
помогите пожалуйста, задача с табуляцией, ошибка деление на 0.. как её убрать? Валюшка Помощь студентам 3 20.01.2009 21:01
Деление на 0. Как обработать ошибку? Bravo Общие вопросы C/C++ 7 22.10.2008 02:30
Как создать событие(которое выполняется в определённое время) micaell Общие вопросы Delphi 5 13.12.2006 18:35