Загрузка данных
.model small
.stack 100h
.data
; === СЕГМЕНТ ДАННЫХ ===
; 1. Основные переменные из п.2 Постановки задачи[cite: 1]
B_TAB db 1Ah, 2Bh, 3Ch, 4Dh, 5Eh, 6Fh, 7Ah, 8Bh
W_TAB dw 1A2Bh, 3C4Dh, 5E6Fh, 7A8Bh
B_TAB1 db 0Ah, 8 dup(1)
W_TAB1 dw 8 dup(1)
W_TAB2 dw 11h, 12h, 13h, 14h, 15h, 16h, 17h, 18h
; 2. Индивидуальное задание (Приложение 2)[cite: 5]
; [ЗАГЛУШКА 1]: Массив из 10 чисел. Если ваш вариант четный - используйте 'db' (байты).
; Если нечетный - используйте 'dw' (слова). Впишите 10 любых чисел.
MY_ARR db 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
; [ЗАГЛУШКА 2]: Впишите свои ФИО.
fio db 'ФАМИЛИЯ ИМЯ ОТЧЕСТВО$'
; [ЗАГЛУШКА 3]: День и месяц рождения в hex-формате.
; Например, 23 февраля = 2302 в десятичной = 08FEh в шестнадцатеричной.
const_v dw 08FEh
; [ЗАГЛУШКА 4]: Уменьшительно-ласкательное имя.
name_v db 'Имя'
; [ЗАГЛУШКА 5]: Вместо 'X' впишите символ, ASCII-код которого равен (Ваш_номер_в_журнале + 14).
; [ЗАГЛУШКА 6]: Замените 23021999 на вашу дату рождения (8 цифр без пробелов).
db 'X'
db ' '
db '23021999'
.code
start:
; Инициализация сегмента данных
mov ax, @data
mov ds, ax
mov es, ax
; === ПРИЛОЖЕНИЕ 1 (Основная часть) ===[cite: 4, 5]
;непосредственная (операнд-источник)
mov al,-3
mov ax,3
mov B_TAB,-3
mov W_TAB,-3
mov ax,2A1Bh
;регистровая
mov bl,al
mov bh,al
sub ax,bx
sub ax,ax
;прямая
mov ax,W_TAB
mov ax,W_TAB+3
mov ax,W_TAB+5
mov al,byte ptr W_TAB+6
mov al,B_TAB
mov al,B_TAB+2
mov ax,word ptr B_TAB
mov es:W_TAB2+4,ax
;косвенная
mov bx,offset B_TAB
mov si,offset B_TAB+1
mov di,offset B_TAB+2
mov dl,[bx]
mov dl,[si]
mov dl,[di]
mov ax,[di]
mov bp,bx
mov al,[bp]
mov al,ds:[bp]
mov al,es:[bx]
mov ax,cs:[bx]
; базовая
mov ax,[bx]+2
mov ax,[bx]+4
mov ax,[bx+2]
mov ax,[4+bx]
mov ax,2+[bx]
mov ax,4+[bx]
mov al,[bx]+2
mov bp,bx
mov ax,[bp+2]
mov ax,ds:[bp]+2
mov ax,ss:[bx+2]
;индексная
mov si,2
mov ah,B_TAB[si]
mov al,[B_TAB+si]
mov bh,[si+B_TAB]
mov bl,[si]+B_TAB
mov bx,es:W_TAB2[si]
mov di,4
mov bl,byte ptr es:W_TAB2[di]
mov bl,B_TAB[si]
;базовая индексная
mov bx,offset B_TAB
mov al,3[bx][si]
mov ah,[bx+3][si]
mov al,[bx][si+2]
mov ah,[bx+si+2]
mov bp,bx
mov ah,3[bp][si]
mov ax,ds:3[bp][si]
mov ax,word ptr ds:2[bp][si]
; === ПРИЛОЖЕНИЕ 2 (Индивидуальное задание) ===[cite: 5]
; [ЗАГЛУШКА 7]: Распределение элементов массива.
; Замените индексы [0], [1] и т.д. на соответствующие цифры вашей даты рождения.
; (Пример: если 1-я цифра дня рождения "2", пишем MY_ARR[2]).
; Примечание: если ваш массив (MY_ARR) задан как 'dw', замените 'al/bl...' на 'ax/bx...'.
xor ax, ax
mov al, MY_ARR[2] ; в AX - 1-я цифра дня
xor bx, bx
mov bl, MY_ARR[3] ; в BX - 2-я цифра дня
xor cx, cx
mov cl, MY_ARR[0] ; в CX - 1-я цифра месяца
xor dx, dx
mov dl, MY_ARR[2] ; в DX - 2-я цифра месяца
xor si, si
mov sil, MY_ARR[1] ; в SI - 1-я цифра года (используем младший байт регистра, если поддерживается ассемблером, иначе MOV SI, word ptr)
xor di, di
mov dil, MY_ARR[9] ; в DI - 2-я цифра года
mov bp, word ptr MY_ARR[9] ; в BP - 3-я цифра года (BP используется как слово)
mov sp, word ptr MY_ARR[9] ; в SP - 4-я цифра года (Осторожно: изменение SP сдвигает стек, делайте это в самом конце отладки)
; [ЗАГЛУШКА 8]: Средняя буква ФИО.
; Сложите ASCII-коды заглавных букв ФИО, разделите на 3 и впишите полученный код сюда (в hex).
mov al, 4Dh ; 4Dh = символ 'M' (пример)
; [ЗАГЛУШКА 9]: Занесение года рождения по адресу, равному дню и месяцу.
; Замените 08FEh на ваш день/месяц в hex, а 07CFh на ваш год в hex (например, 1999 = 07CFh).
mov bx, 08FEh
mov word ptr ds:[bx], 07CFh
; Загрузка константы в регистр CX
mov cx, const_v
; Завершение программы
mov ah, 4Ch
int 21h
end start