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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.12.2013, 09:23   #1
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию Арифметические операции при разных типах данных(Pascal+asm)

Почему, если ввести w=22222, то z будет
в паскале: 45574
в асме: 111110

Файл
MULwordp.pas
Код:
program MULwordp;
{$l MULword}
{$f+}
USES CRT;
var w     :word;
    z     :LongInt;
    ch    :char;
Procedure MULword; external;
Procedure MULp;
Begin
   z:=5*w;
End;
Begin
  ch:='y';
  while (ch='y') or (ch='Y') do
    begin
       write ('Введите w [0..65535]:  ');
       readln (w);
       MULword;
       writeln ('АССЕМБЛЕР:  z=',z);
       MULp;
       writeln ('ПАСКАЛЬ:  z=',z);
       writeln ('продолжать? (y/n)');
       ch:=ReadKey;
    end
End.


Файл
MULword.asm
Код:
        title MULword
        ;z=5*w
data    segment para public
        Extrn   w:word,z:Dword
data    Ends
code    segment para public
	assume  cs:code,ds:data
	Public  MULword
MULword proc    far
        mov     cx,5
        mov     AX,w
        MUL     cx
        mov     WORD PTR z,ax
        mov     WORD PTR z+2,DX
        ret
MULword endp
code	ends
        end

Последний раз редактировалось zla9_kolu4ka; 30.12.2013 в 09:26.
zla9_kolu4ka вне форума Ответить с цитированием
Старый 30.12.2013, 09:33   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

5*w даст Word со всеми вытекающими последствиями и только после этого поместится в LongInt
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.12.2013, 09:48   #3
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию

111110-65535=45575, а в Паскале 45574
zla9_kolu4ka вне форума Ответить с цитированием
Старый 30.12.2013, 09:57   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Насчет вытекающих последствий не поняли. 5*w даст 111110, но поскольку w типа Word, то и результат выражения word. Вот хвост от 111110 и останется. И именно этот хвост и поместится в z. И не важно, что z типа longint. Тип результата выражения справа от оператора присваивания не учитывает тип переменной слева

22222*5=111110=$1B206 -> $B206=45574

111110-65536=45574
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 30.12.2013 в 10:16.
Аватар вне форума Ответить с цитированием
Старый 30.12.2013, 10:05   #5
zla9_kolu4ka
Форумчанин
 
Регистрация: 16.09.2013
Сообщений: 149
По умолчанию

Цитата:
Насчет вытекающих последствий не поняли. 5*w даст 111110, но поскольку w типа Word, то и результат выражения word. Вот хвост от 111110 и останется. И именно этот хвост и поместится в z. И не важно, что z типа longint. Тип результата выражения справа от оператора присваивания не учитывает тип переменной слева
Это понятно, а хвост почему паскаль неправильно посчитал?
zla9_kolu4ka вне форума Ответить с цитированием
Старый 30.12.2013, 10:06   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от zla9_kolu4ka Посмотреть сообщение
Это понятно, а хвост почему паскаль неправильно посчитал?
Это вы его не правильно посчитали, а паскаль молоток, верно поступил
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Арифметические операции nikita-92 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 11.04.2013 00:08
Арифметические операции. Saintpatrick38 Помощь студентам 2 05.04.2013 09:04
Арифметические операции swillrocker Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 02.10.2012 21:31
Занесенение данных в БД (Delphi). Арифметические операции с часами (Delphi)) Andrey_RTF Помощь студентам 2 29.05.2012 17:20