МЕТОДИЧЕСКИЕ УКАЗАНИЯ. Реализовать функцию Sum = х + у для данных типа integer
Реализовать функцию Sum = х + у для данных типа integer. Это можно сделать на чистом Паскале — см. вариант 1, с применением встроенного Ассемблера (см. варианты 2 и 3), а также с помощью ассемблерной функции — вариант 4. Варианты 3 и 4 используют специальную переменную Паскаля @Result для возврата из функции значения. Вариант 4 — самый близкий вариант к чистому Ассемблеру. Именно его рекомендуется использовать при отладке тем, кто изучает Ассемблер. Исходный текстпрограммы AsmlnPa& pas ProgramAsmlnPas; { Sum = x + у для данных типа integer. Входные данные и результат на ДОПУСТИМЫЙ диапазон !!!!!!!!!!!! НЕ ПРОВЕРЯЮТСЯ!!!!!!!!!!!! } Var x.y.s: Integer; {Вариант 1 — ПАСКАЛЬ} Function Sum1 (x, y: Integer): Integer; Begin Sum1: = x+yEnd; {Вариант 2 — Встроенный Ассемблер — передача параметров по ЗНАЧЕНИЮ} Function Sum2 (x, y: lnteger): lnteger; Begin ASM mov ax, x add ax.y mov @Result, ax END End; {Вариант 3 — ВстроенныйАссемблер — передачапараметровпоССЫЛКЕ} Function Sum3 (Var x, y: lnteger): lnteger; Begin ASM lesbx.x {КОСВЕННАЯ адресация — берем значение по адресу} mov ax, es: [bx] les bx.y addax, es: [bx] mov @Result, ax END End; {Вариант 4 Ассемблернаяфункция} Function Sum4 (x, y: lnteger): lnteger; ASSEMBLER; ASM mov axtx add ax, y End; begin WritelnfВычислить: Sum = x + удляданныхтипаInteger; "); Write ('Введите значение х '); Readln(x); Write ('Введите значение у '); Readln(y); s: = Sum1(x, y); writeln ('ПАСКАЛЬ: Sum = \ х, 1 + \ у, 1 = \s); s: = 0; {для ЧИСТОТЫэксперимента} s: = Sum2(x, y); writeln (' Встроенный Ассемблер'); writeln (— передача параметров по ЗНАЧЕНИЮ: Sum =, х, +, у, =, s); s: = 0; s: = Sum3(x, y); writeln (' — передача параметров по ССЫЛКЕ: Sum =, х, +, y, =, s); s: = 0; s: = Sum4(x, y); writeln ('Ассемблернаяфункция: Sum = ', x, ' + ', y, ' = \s); writeln ('Нажмителюбуюклавишу '); Readlnend. Ассемблер, встроенный в программу на языке C/C++ Поскольку язык С++ и компиляторы, его поддерживающие, продолжают развиваться, команды, которые поддерживает встроенный Ассемблер, существенно зависят от версии компилятора и от его разработчиков. ИнтегрированнаясредапрограммированияMicrosoftVisualС++ Здесь необходимо учитывать, что компилятор VC++ является 32-разрядным. Поэтому, чтобы СОХРАНИТЬ исходную постановку задачи, наш пример 6.1 немного видоизменится: 1)описания данных типа int нужно ВСЮДУ заменить на тип shortint; 2)оператор asm должен быть с ДВУМЯ символами подчерка asm. Исходныйтекстпрограммы 1срр //1.срр: Defines the entry point for the console application. // include " stdafx.h" #include " iostream.h" #include " typeinfo.h" short int funcCi(short int x) { return x/3; } short int funcCu (unsigned short int x) { return x/3; } short int funcAsml (short int x) {mov ax, x cwd
|