Загрузка данных


.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