Перестановка чисел местами - 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 ; выход
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д