Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Ассемблер? Это просто! Учимся программировать


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Советник
Рейтинг: 10861
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Советник
Рейтинг: 4327
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2297
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Assembler (Ассемблер)

Номер выпуска:1517
Дата выхода:06.06.2012, 14:00
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:91 / 38
Вопросов / ответов:1 / 1

Консультация # 186308: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: У меня есть чуть неверно написанная программа для Tasm .386 . Помогите, пожалуйста, исправить ошибки. Решаемое выражение: (a^3-b^2)/c^2

Код :
;y=(a^3 - b^2)/
...

Консультация # 186308:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
У меня есть чуть неверно написанная программа для Tasm .386 . Помогите, пожалуйста, исправить ошибки.
Решаемое выражение: (a^3-b^2)/c^2

Код :
;y=(a^3 - b^2)/c^2

   .model   small
   .stack   100h
   .data

a   db   ?
b   db   ? 
c   db   ?

   .code
start:
   mov   ax,@data
   mov   ds,ax

   mov   al,b
   cbw
   mov bx,ax   
   imul   bx      
   mov   bx,ax
   mov al,c
   cbw
   cwd     

   mov   ecx,eax   
   imul   ecx     
   mov   ecx,eax      
   mov al,a
   cbw
   cwd
   mov eax,ecx
   imul eax
   imul eax
   mov eax,ecx
   
   sub   ax,bx      
   cwd
   cdq
   idiv ecx   

   mov   ax,4c00h
   int   21h

   end   start

Дата отправки: 03.06.2012, 13:26
Вопрос задал: Посетитель - 341182 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Посетитель - 341182!
Предлагаю Вам Вашу программу с исправлениями
и свой вариант программы... smile

Код :
;y=(a^3 - b^2)/c^2

   .model   small
   .stack   100h
   .data

a   db   15		;		!!!надо задать конкретные значения
b   db   7 
c   db   3

   .386			;		!!!указываем, что используются возможности 386 процессора
   .code
start:
   mov   ax,@data
   mov   ds,ax

   mov   al,b		;al = b
   cbw			;ax = b
   mov bx,ax   		;bx = b
   imul   bx    	;dx:ax = b^2
   cwde			;eax = b^2	!!!сразу перейдем к 32-битному регистру
;   mov   bx,ax		;bx = b^2
   mov    ebx, eax	;ebx = b^2
	
   mov al,c		;al = c
   cbw			;ax = c
;   cwd     		;dx:ax = c 	!!!надо cwde, тогда eax = c
   cwde			;eax = c	!!!

   mov   ecx,eax	;ecx = c 	!!!при cwd старшее слово eax - неопределено
   imul   ecx     	;edx:eax = c^2
   mov   ecx,eax      	;ecx = c^2

   mov al,a		;al = a
   cbw			;ax = a
;   cwd			;dx:ax = a 	!!!надо cwde, тогда eax = c
   cwde			;eax = a	!!!
;   mov eax,ecx		;		!!!убрать! затирается а
   mov edi, eax		;		!!!надо сохранить
   imul eax		;eax = a^2
;   imul eax		;eax = a^4	!!!а надо a^3
   imul eax, edi	;eax = a^3	
;   mov eax,ecx		;		!!!убрать! затирается а^3
   
;   sub   ax,bx      	;ax = a^3 - b^2 !!!лучше ранее сразу сохранять в ebx
;   cwd			;dx:ax = b^2	!!!надо cwde, тогда eax = b^2
   sub eax, ebx		;eax = a^3-b^2  !!!лучше так
   cdq			;edx:eax = a^3-b^2
   idiv ecx   		;eax = edx:eax / ecx

   mov   ax,4c00h
   int   21h

   end   start

Можно было написать, например, так:
Код :
;y=(a^3 - b^2)/c^2

   .model   small
   .stack   100h
   .data

a   db   15
b   db   7 
c   db   3

   .386
   .code
start:
   mov   ax,@data
   mov   ds,ax

   movsx eax, c
   imul  eax, eax
   mov   ecx, eax

   movsx eax, b
   imul  eax, eax
   mov   ebx, eax

   movsx eax, a
   mov   edi, eax
   imul  eax, edi
   imul  eax, edi

   sub   eax, ebx
   cdq
   idiv  ecx

   mov   ax,4c00h
   int   21h

   end   start

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 04.06.2012, 02:08

5
нет комментария
-----
Дата оценки: 04.06.2012, 10:59

Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное