Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите с задачей

77K
22 января 2012 года
gil9red
5 / / 22.01.2012
Здравствуйте, помогите разобраться в чем ошибка моей программы)

Смысл такой: есть два массива по 10 элементов, они содержат однобайтовые целые числа без знака нужно определить двухбайтовую сумму эл-тов массивов, какого массива больше, и вывести на экран строку с соответствующим сообщением

Код:
.MODEL SMALL
.STACK 100h
.DATA
; массивы
 mas1 db 2,3,1,1,4,5,2,1,2,2
 mas2 db 4,1,1,4,4,3,3,5,1,2

 msg1 db 'Mas1 > Mas2', 13, '$'
 msg2 db 'Mas2 > Mas1', 13, '$'

 sum1 dw 0
 sum2 dw 0

 count equ 10

.CODE

 start:

 ; текущий индекс массива
 mov ax, 0

 ; кол-во повторений цикла
 mov cx, count

 l1:
 mov bx, mas1[ax]
 add sum1, bx
 inc ax
 loop l1

 mov ax, 0
 l2:
 mov bx, mas2[ax]
 add sum2, bx
 inc ax
 loop l2

 cmp sum1, sum2
 JG end1
 JL end2

 end2:
 ; выводим строку
 lea dx, [msg2]
 mov ah,9h
 int 21h

 ; ждем пока пользователь не нажмет какой нибудь символ
 mov ah,1h
 int 21h
 ; выход в ос
 ret

 end1:
 ; выводим строку
 lea dx, [msg1]
 mov ah,9h
 int 21h

 ; ждем пока пользователь не нажмет какой нибудь символ
 mov ah,1h
 int 21h
 ; выход в ос
 ret

 end start
43K
23 февраля 2012 года
Павел_AF
6 / / 19.10.2008
Думаю, за это время ты и сам нашёл ошибки в строках, на которые указывает компилятор.
Но, навсякий случай подскажу:
1. Нет инициализации сегментного регистра ds
2. Это попытка присвоения элемента массива размером в 1 байт двухбайтному регистру bx.
3. Неправильная индексация (не тем регистром) массива.
4. Перед суммированием второго массива не инициализируется cx.
5. Перевод строки - в DOS и Windows - два символа - 13, 10.
Код:
.MODEL SMALL
 .STACK 100h
 .DATA
 ; массивы
  mas1 db 2,3,1,1,4,5,2,1,2,2
  mas2 db 4,1,1,4,4,3,3,5,1,2

  msg1 db 'Mas1 > Mas2', 13, 10, '$'
  msg2 db 'Mas2 > Mas1', 13, 10, '$'

  sum1 dw 0
  sum2 dw 0

  count equ 10

 .CODE

  start:

  mov   ax, @data
  mov   ds, ax

  ; текущий индекс массива
  mov bx, 0
  ; кол-во повторений цикла
  mov cx, count
l1:
  mov al, byte ptr mas1[bx]
  cbw
  add sum1, ax
  inc bx
  loop l1

  ; кол-во повторений цикла
  mov cx, count
  ; текущий индекс массива
  mov bx, 0
l2:
  mov al, mas2[bx]
  cbw
  add sum2, ax
  inc bx
  loop l2

  cmp sum1, ax
  JG end1
  JL end2

end2:
  ; выводим строку
  lea dx, msg2
  mov ah,9h
  int 21h

  ; ждем пока пользователь не нажмет какой нибудь символ
  mov ah,1h
  int 21h
  ; выход в ос
  mov     ax, 4c00h
  int     21h

end1:
  ; выводим строку
  lea dx, msg1
  mov ah,9h
  int 21h

  ; ждем пока пользователь не нажмет какой нибудь символ
  mov ah,1h
  int 21h
  ; выход в ос
  mov     ax, 4c00h
  int     21h

  end start

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог