Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите исправить ошибки в процедуре masm  (Прочитано 1436 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Anbore
Новенький

ru
Offline Offline

« : 06-06-2014 16:18 » 

Помогите пожалуйста исправить ошибки в программе на masm 4.0 (16 бит):
Разработать программу которая вводит массив из 5 элементов типа байт и число C.
Требуется, используя подпрограмму, найти максимальный элемент в массиве если каждый из заданных элементов меньше C. Параметры (указатель на массив, длина массива и число С), в подпрограмму, передаются через стек, а результат возвращается через регистр АХ или регистры AX,DX. Восстановить стек в стиле языка Паскаль. В стиле языка Паскаль стек восстанавливается командой ret с указанием числа байт, на которые надо скорректировать указатель стека.
Не передаются параметры через стек. Выводит из ax одно и то же число.
Код: (ASM)
include io.asm ;подключение операций ввода-вывода

stack segment stack
        dw 128 dup (?)
stack ends

data segment
; место для переменных и констант
x db 5,13,4,14,12
c equ 7
l equ 5
data ends

code segment 'code'
        assume ss:stack, ds:data, cs:code
; место для описания процедур
foo proc
push bp
mov bp, sp

mov bx, [bp+4]
mov al,[bp]
lp:     cmp [bp],al     ;если текущее значение не больше максимального
        jle m1          ;то пропустить
        mov al,[bp]     ;если больше, запомнить новый максимум
m1:     inc bp          ;следующий элемент массива
        loop lp         ;обработать весь массив
        cmp al,c        ;сравнить макс и с
        jge m2          ;если макс не меньше с, то пропустить
        mov al,c        ;если с больше, сделать с максимумом
m2:     pop bp
        ret 4
foo endp
start:
        mov ax,data
        mov ds,ax
mov ax, offset x
push ax
mov ax,l; помещаем длину массива
push ax; в стек
mov ax,c
push ax
call foo
outint ax
newline
    finish
code ends
    end start
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines