В сегменте данных определить три области - Assembler

Узнай цену своей работы

Формулировка задачи:

Нужна помощь по выполнению данного задания.Совсем недавно начали изучать ассемблер.Еще не совсем понимаю как там все устроено. Задание: В сегменте данных определить три области: А – 1 байт под одно число; B – по 1 байту под три числа; C – по 1 байту под шесть чисел. В программе * Обнулить область A. * В область B записать три любых числа (прямая адресация). * В первые три ячейки области C записать числа из области B в обратном порядке (адресация по базе). * В оставшиеся ячейки области С записать три любых числа. * Просмотреть сегмент данных. * В области С поменять местами 1 и 4, 2 и 5, 3 и 6 числа (адресация по базе с индексированием). В качестве буфера можно использовать или регистр BX или область А.

Решение задачи: «В сегменте данных определить три области»

textual
Листинг программы
LOCALS
 
.model small
 
.stack 100h
 
.data
        A       db      ?
        B       db      3 dup(?)
        C       db      6 dup(?)
 
.code
 
main    proc
        mov     ax,     @data
        mov     ds,     ax
 
        ;Обнулить область A.
        mov     A,      0
        ;В область B записать три любых числа (прямая адресация).
        mov     B,      1
        mov     B+1,    2
        mov     B+3,    3
        ;В первые три ячейки области C записать числа из
        ;области B в обратном порядке (адресация по базе).
        mov     al,     B[2]
        mov     C[0],   al
        mov     al,     B[1]
        mov     C[1],   al
        mov     al,     B[0]
        mov     C[2],   al
        ;В оставшиеся ячейки области С записать три любых числа.
        mov     C[3],   byte ptr 4
        mov     C[4],   byte ptr 5
        mov     C[5],   byte ptr 6
        ;Просмотреть сегмент данных.
        ;В области С поменять местами 1 и 4, 2 и 5, 3 и 6 числа
        ;(адресация по базе с индексированием).
        ;В качестве буфера можно использовать или регистр BX или область А.
        xchg    C[0],   bx      ;обмен 1 и 4, 2 и 5
        xchg    C[4],   bx
        xchg    C[0],   bx
        xchg    C[3],   bl      ;обмен 3 и 6
        xchg    C[6],   bl
        xchg    C[3],   bl
 
        mov     ax,     4C00h
        int     21h
main    endp
 
end     main

Объяснение кода листинга программы

  1. Названия переменных: A, B, C Значения переменных: однобайтная область памяти (db)
  2. Начало сегмента кода и данных.
  3. Начало процедуры main.
  4. Перемещение адреса сегмента данных в регистр AX и его загрузка в регистр DS.
  5. Обнуление переменной A.
  6. Запись трех чисел (1, 2, 3) в область B, используя прямую адресацию.
  7. Запись трех чисел из области B в обратном порядке в первые три ячейки области C, используя адресацию по базе.
  8. Запись трех чисел в оставшиеся три ячейки области C.
  9. Обмен значений в области C: 1 и 4, 2 и 5, 3 и 6, используя адресацию по базе с индексированием и регистр BX в качестве буфера.
  10. Завершение процедуры main.
  11. Конец программы.

Оцени полезность:

14   голосов , оценка 4.143 из 5
Похожие ответы