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

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


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

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

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

Boriss
Статус: Академик
Рейтинг: 2673
∙ повысить рейтинг »
Жерар
Статус: Профессор
Рейтинг: 2447
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2238
∙ повысить рейтинг »

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

Номер выпуска:1461
Дата выхода:07.06.2011, 19:30
Администратор рассылки:Лысков Игорь Витальевич (Старший модератор)
Подписчиков / экспертов:214 / 63
Вопросов / ответов:1 / 1

Вопрос № 183488: Здравствуйте! Прошу помощи в следующем вопросе:требуется написать 3 варианта заданной подпрограммы ( на встроенном ассемблере, с использованием модели памяти PASCAL (листинг) и без использования директивы MODEL (листинг)). Программу, вызывающую эти п...



Вопрос № 183488:

Здравствуйте! Прошу помощи в следующем вопросе:требуется написать 3 варианта заданной подпрограммы ( на встроенном ассемблере, с использованием модели памяти PASCAL (листинг) и без использования директивы MODEL (листинг)). Программу, вызывающую эти подпрограммы с указанием автора и варианта задания (26-ый). Задание- подсчитать количество элементов >x в массиве Byte[n]. АСС- TASM. Очень рассчитываю на Вашу помощь ...

Отправлен: 02.06.2011, 15:05
Вопрос задал: Дмитрий (Посетитель)
Всего ответов: 1
Страница вопроса »


Отвечает Зенченко Константин Николаевич (Модератор) :
Здравствуйте, Дмитрий!

Код pascal TP7.0:
Код :
const
  n=10;
type
  tmass=array[1..n]of byte;
var
  a:tmass;
  b,x:byte;
function FA(var q:tmass;w,e:byte):byte;
  begin
    asm
      lds  si,dword ptr q
      mov  cl,w
      xor  ch,ch
      mov  ah,e
      xor  bx,bx
 @01: lodsb
      cmp  al,ah
      jae  @@02
      inc  bx
 @02: loop @@01
      mov  ax,bx
    end
  end;
begin
  for b:=1 to n do
    begin
      write('a[',b,']:=');
      readln(a[b])
    end;
  x:=random(255);
  writeln('F(',x,'):=',FA(a,n,x));
  writeln('F(',x,'):=');
  writeln('F(',x,'):=');
  readln;
end.


Код на ассемблере с упрощенным описанием сегмента:
Код :
model small;,pascal
public FB
code
FB proc
 push bp
 mov bp,sp
 lds si,dword ptr[bp+8]
 mov cx,[bp+6]
 mov ax,[bp+4]
 xor bx,bx
 @01: lodsb
 cmp al,ah
 jbe @@02
 inc bx
 @02: loop @@01
 mov al,bl
 pOp bp
 ret 8
endp
end


и полным описанием:
Код :
_TEXT segment word public 'CODE'
public FC
assume cs:_TEXT
FC proc
 push bp
 mov bp,sp
 lds si,dword ptr[bp+8]
 mov cx,[bp+6]
 mov ax,[bp+4]
 xor bx,bx
 @01: lodsb
 cmp al,ah
 jbe @@02
 inc bx
 @02: loop @@01
 mov al,bl
 pOp bp
 ret 8
endp
ends
end

Удачи!
-----
Итерация от человека. Рекурсия — от Бога. — Л. Питер Дойч

Ответ отправил: Зенченко Константин Николаевич (Модератор)
Ответ отправлен: 03.06.2011, 10:56
Номер ответа: 267558
Украина, Киев
Тел.: +38-097-238-60-03
Адрес: Украина, Киев

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 267558 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.



    В избранное