Поменять местами два числа из разных сегментов данных используя цепочечные команды - Assembler

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

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

Здравствуйте! Помогите пожалуйста с цепочечными командами. Была лаба и дали задание сделать тоже самое, только с регистрами DS:SI, ES: DI и цепочечными командами. Почитала, ужаснулась и въехать не могу. Помогите плииз.
    
        name    ex_swap ; начало программного модуля
    ; Определение сегмента данных
_data1  segment para public 'DATA'
i       dw      5
_data1  ends
 
_data2  segment para public 'DATA'
j       dw      6
_data2  ends

    ; Определение сегмента стека
_stack segment para stack 'STACK'
       dw   100 dup(?)
_stack ends 
    ; Определение кодового сегмента
_exch  segment  para public 'CODE'
       assume   cs:_exch, ds:_data1, es:_data2, ss:_stack
main   proc far
      ; 1-я фаза инициализации EXE программы
      ; подготовка стека к завершению программы командой ret      
       push ds         ; сохранить DS в стеке
                       ; в DS изначально находится базовый адрес программного сегмента
     push es 
       xor  ax,ax      ; обнулить AX
       push ax         ; записать 0 в стек
       ; 2-я фаза инициализации EXE программы
       ; подготовка регистра DS. Он должен содержать базовый адрес сегмента данных
       mov si,_data1
       mov  ds,si    
     push   ds
     lea    si, i
     push   si
      mov  di,_data2
       mov  es,di
     push   es  
     lea    di, j
     push   di
       
     call exchangenum
       ret     
main   endp   
     
exchangenum proc
       ; cохранение используемых регистров в стеке     
           
       push bx
       push bp     
       push ax
       push dx
       push ds
       push es
       mov  bp, sp   
       lds  bx, [bp]+14
       mov  di, [bx]       
       lds  bx, [bp]+18
       mov  dx, [bx]
       lds  bx, [bp]+14
       mov  [bx], dx
         lds  bx, [bp]+18
         mov  [bx], ax
 
       pop es      
       pop ds 
       pop dx
       pop ax      
       pop bp 
       pop bx      
       ret  8
exchangenum endp       
_exch  ends     
    
        end     main        ; конец описания программного модуля

Решение задачи: «Поменять местами два числа из разных сегментов данных используя цепочечные команды»

textual
Листинг программы
   STOSB  - запись из AL в DI;
   LODSB  - чтение в AL из SI;
   MOVSB  - копирование из SI в DI;
   CMPSB  - сравнивает байт DI, с байтом SI (сравнивает строки);
   SCASB  - сравнивает байт AL, с байтом DI (поиск символа в строке).

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

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