Поменять местами два числа из разных сегментов данных используя цепочечные команды - 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 (поиск символа в строке).