Рубрики

Программа 8086 для нахождения суммы нечетных чисел в данной серии

Проблема — Напишите программу на языке ассемблера, чтобы найти сумму нечетных чисел в данной серии, содержащей 8-битные числа, хранящиеся в непрерывной ячейке памяти, и сохранить результат в другой ячейке памяти.

Пример —

Пример объяснения —

  1. Смещение 500 хранит значение счетчика серии, а элементы серии начинаются с 501 до 504 смещения.
  2. В этом примере у нас есть только 4 условия. Добавление нечетных терминов (найдено в регистре BL) 15 + 07 в регистре AL, и результат сохраняется (1C) в регистре AL.
  3. Результат из регистра AL сохраняется в смещении 600.

Предположения —

  1. Значение счетчика, которое сообщает, что количество чисел в серии хранится в ячейке памяти 500.
  2. Элементы серии хранятся в ячейке непрерывной памяти, начиная с 501.
  3. Результат сохраняется в ячейке памяти 600.
  4. Начальный адрес программы 400.

Тестовое задание —

Syntax: TEST d, s 

Он выполняет операцию И для пункта назначения (d) и источника (ов), но результат не сохраняется, только измененные флаги.

Алгоритм —

  1. Загрузить данные со смещения 500 в регистр CL.
  2. Увеличьте значение смещения.
  3. Загрузите 00H в регистр CH.
  4. Загрузите 00H в регистр AL.
  5. Загрузить данные со смещения в регистр BL.
  6. Используйте инструкцию TEST, чтобы проверить, являются ли данные в BL четными или нечетными, если установлен нулевой флаг, означает, что данные четные, затем перейдите к шагу 7, в противном случае данные нечетные, а затем перейдите к шагу 8.
  7. Перейти в ячейку памяти 413H.
  8. Добавьте данные регистров AL и BL и сохраните результат в регистр AL.
  9. Увеличьте значение смещения.
  10. Перейдите к ячейке памяти 40AH, если содержимое CX не равно нулю, в противном случае перейдите к шагу 11.
  11. Загрузите данные из регистра AL в ячейку памяти 600.
    1
  12. Конец

Программа —

AddressMnemonicsComments
400MOV SI, 500SI<-500
403MOV CL, [SI]CL<-[SI]
405INC SISI<-SI+1
406MOV CH, 00CH<-00
408MOV AL, 00AL<-00
40AMOV BL, [SI]BL<-[SI]
40CTEST BL, 01BL.01
40FJZ 413Jump to 413 memory location if zero flag is set
411ADD AL, BLAL<-AL+BL
413INC SISI<-SI+1
414LOOP 40Ajump to 40A memory location if content of CX is not equal to zero
416MOV [600], AL[600], AL
41AHLTend

Пояснение —

  1. MOV SI, 500 загрузить значение 500 в SI.
  2. MOV CL, [SI] загружает данные смещения SI в регистр CL.
  3. INC SI увеличивает значение SI на единицу.
  4. MOV CH, 00 загружает значение 00 в регистр CH.
  5. MOV AL, 00 загружает значение 00 в регистр AL.
  6. MOV BL, [SI] загружает данные смещения SI в регистр BL.
  7. ТЕСТ BL, 01 И операция содержимого BL и значения 01 и флаговые регистры изменены.
  8. JZ 413 перейти к 413 ячейке памяти, если установлен нулевой флаг.
  9. ADD AL, BL добавляют содержимое регистров AL и BL и сохраняют результат в регистре AL.
  10. INC SI увеличивает значение SI на единицу.
  11. LOOP 40A перейти к ячейке памяти 40A, если значение CX не равно нулю.
  12. MOV [600], AL загружает содержимое регистра AL в ячейку памяти 600.
  13. HALT конец

Рекомендуемые посты:

Программа 8086 для нахождения суммы нечетных чисел в данной серии

0.00 (0%) 0 votes