Другие языки программирования и технологии

Пожалуйста решите задачу на Ассемблере

Положить в стек 7 целых чисел размером в слово. Используя, хотя бы 2 режима адресации
выполните следующие действия:
a) К 2-ому элементу прибавить 10
b) Из 5-ого элемента вычесть -5
c) 4-ый элемент умножить на 3
d) 1-ый и 6-ой элемент приравнять к нулю.
Вывести на экран элементы до и после преобразования.
Вычесть -5, значит прибавить 5 или это опечатка?
Не понятно, как должны класться числа в стек.
Размещение чисел в стеке и операции над ними с использованием различных адресаций:

.model small
.stack 100h

.data
  a dw -1
  b dw 2
  c dw -3
  d dw -4
  e dw 5
  f dw -6
  g dw 7
  Txt1 db 'Элементы до преобразования: ',13,10,36
  Txt2 db 10,10,'Элементы после преобразования: ',13,10,36

.code
.386
N84899773:
    push @data
    pop ds
    mov ah,9
    lea dx,Txt1
    int 21h
    sub sp,12
    mov si,sp; регистровая адресация
    mov bp,sp
    mov di,sp
    mov ax,a; прямая адресация
    push ax; стековая адресация
    call Print
    mov bx,sp
    mov ax,b
    mov ss:[si],ax; индексная адресация
    call Print
    mov ax,c
    add bp,2
    mov [bp],ax; базовая адресация
    call Print
    mov ax,d
    mov ss:[di+4],ax; индексная адресация со смещением
    call Print
    mov ax,e
    mov ss:[bx+8],ax; базовая адресация со смещением
    call Print
    mov ax,f
    mov di,10; непосредственная адресация
    mov ss:[bx+di],ax; базово-индексная адресация
    call Print
    mov ax,g
    mov [bp+di-2],ax; базово-индексная адресация со смещением
    call Print

;Заданные действия с помощью различных адресаций прямо в стеке
    add ss:[si],di
    sub word ptr ss:[bx+di-2],-5
    mov ax,ss:[si+4]
    shl word ptr ss:[si+4],1
    add [bp+2],ax
    xor ax,ax
    mov ss:[bx],ax
    mov di,sp
    mov ss:[di+10],ax

    mov ah,9
    lea dx,Txt2
    int 21h
    mov cx,7
Repeat:
    pop ax
    call Print
    loop Repeat
   
    mov ah,8
    int 21h
    mov ah,4Ch
    int 21h
   
PrintInt proc
    xor dx,dx
    mov bx,10
    div bx
    push dx
    test ax,ax
    jz PrintRet
    call PrintInt
PrintRet:
    pop ax
    or al,30h
    int 29h
    ret
PrintInt endp

Print proc
    push ax
    push dx
    push bx
    cwd
    xor ax,dx
    sub ax,dx
    xchg ax,dx
    and al,0Dh
    or al,20h
    int 29h
    mov ax,dx
    call PrintInt
    mov al,13
    int 29h
    mov al,10
    int 29h
    pop bx
    pop dx
    pop ax
    ret
Print endp

    end N84899773

Игорь Серов
Игорь Серов
51 590
Лучший ответ