Перестановка чисел местами - 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 ; выход