TITLE LAB2_4 KORNEEV
; Лаба 2, Задание 2
; Студент: Корнеев
; Данные: 18.12.2006, оценки 4 и 5, возраст 19
.model small
.stack 512
.data
den DB 18
qwer DW 4321h
mes DW 12
Mas_1 DB 12 dup(19)
Mas_2 DW 20 dup(?)
stroka DB 'Korneev', '$'
.code
start:
; настраиваем сегмент данных
mov ax, @data
mov ds, ax ; особый случай mov: напрямую в сегментный регистр число писать нельзя, только через ax
; год в di
mov di, 07D6h
; грузим переменные в регистры
mov al, den
mov cx, mes
mov ax, mes
mov es, ax ; тут тоже особый случай mov: из памяти в es сразу не закинуть, делаем через регистр
; закидываем в стек den и mes
xor ah, ah ; обнуляем ah, чтобы протолкнуть байт den как слово (стек ест только по 16 бит)
mov al, den
push ax
mov ax, mes
push ax
; меняем qwer и mes местами
mov ax, qwer ; особенность mov: нельзя гонять данные из памяти в память, берем ax как посредник
xchg ax, mes
mov qwer, ax
; адрес den в si
lea si, den
; копируем ds в es через стек (напрямую mov es, ds нельзя)
push ds
pop es
; достаем из стека в обратном порядке (LIFO)
pop dx ; сюда падает mes
pop cx ; сюда падает den
; вывод фамилии
mov ah, 09h
lea dx, stroka
int 21h
; выход в DOS
mov ax, 4c00h
int 21h
end start