Перестановка чисел местами - Assembler
Формулировка задачи:
Добрый день, уважаемые друзья! Я написал программу на языке ассемблер по такой задаче:
В сегменте данных определить три области: А – 1 байт под одно число; B – по 1 байту под три числа; S – по 1 байту под шесть чисел.
В области S поменять местами 1 и 4, 2 и 5, 3 и 6 числа (адресация по базе с индексированием). В качестве буфера можно использовать или регистр BX или область А.
ВОТ МОЙ КОД ПРОГРАММЫ,ПОДСКАЖИТЕ ПОЖАЛУЙСТА,КАК ПОМЕНЯТЬ ЧИСЛА МЕСТАМИ?
Листинг программы
- title ex_prog
- page ,132
- stack segment para stack 'stack'
- db 64 dup('stack ')
- stack ends
- dseg segment para public 'data'
- A db 1 dup(?)
- B db 3 dup(?)
- S db 6 dup(?)
- F db 35,12,46
- dseg ends
- cseg segment para public 'code'
- our_prog proc far
- assume cs:cseg,ds:dseg,ss:stack
- push ds
- mov ax,0
- push ax
- mov ax,dseg
- mov ds,ax
- mov al,F
- mov B,al
- mov al,F+1
- mov B+1, al
- mov al,F+2
- mov B+2, al
- mov BX, offset B
- mov al,[BX]
- mov S+2, al
- mov al,[BX]+1
- mov S+1,al
- mov al,[BX]+2
- mov S,al
- mov S+3,43
- mov S+4,23
- mov S+5,37
- mov A,0
- ret
- our_prog endp
- cseg ends
- end our_prog
Решение задачи: «Перестановка чисел местами»
textual
Листинг программы
- org 100h
- jmp start
- mes0 db 13,10,' Digits: $'
- mes1 db 13,10,' Result: $'
- B db 3 dup(0) ; буфер
- S db 6 dup(0),'$' ; массив чисел (с маркером для fn.9)
- start:
- mov ah,9 ; запрос на ввод чисел
- mov dx,mes0 ;
- int 21h ;
- mov cx,6 ; макс.6 чисел
- mov di,S ; адрес приёмника
- mov ah,8 ; ввод без эха средствами DOS
- input: ;
- int 21h ; сл.символ..
- cmp al,'0' ; ингорируем всё,
- jb input ; ..кроме чисел
- cmp al,'9' ;
- ja input ;
- stosb ; запись символа в DI
- int 29h ; вывод его на экран
- loop input ; мотаем 6 раз..
- ;====================================================
- mov cx,3 ; сколько символов копировать
- push cx cx ; запомним..
- mov si,S ; источник
- mov di,B ; приёмник
- rep movsb ; скопировали первую триаду в буфер
- pop cx ; восстановили СХ
- mov di,S ; приёмник = источнику
- rep movsb ; скопировали вторую триаду в первую
- pop cx ;
- mov si,B ; меняем источник на буфер
- rep movsb ; скопировали первую триаду во-вторую
- ;====================================================
- mov ah,9 ; мессага
- mov dx,mes1 ;
- int 21h ;
- mov dx,S ; выводим результат на экран
- int 21h ;
- exit: ;
- xor ax,ax ;
- int 16h ;
- int 20h ; выход
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д