Вычислить значение выражения - Assembler (223019)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Уравнение y = (12 + 3/8+6)*3+12. Ошибки: yyyy.asm(4) : invalid character in file yyyy.asm(5) : must be in segment block yyyy.asm(6) : syntax error : st yyyy.asm(7) : segment, group, or segment register expected Как вывести значение y на экран? И что в этом коде еще не хватает?
data  segment 
y db 0 ; описание переменной y  в сегменте данных 
data ends 
st segment stack ‘stack’   ; описание сегмента стека 
db 128 dup(?) 
st ends 
assume cs: code,  ds: data, ss: st 
code segment   ;описание кодового сегмента 
start: 
mov ax,ds        ; инициализация сегмента данных 
mov ds,ax   
mov ax,12       ; реализация сложения 12+3 
 
add ax,3    
mov bl,8         ; реализация сложения 8+6 
add bl,6 
div bl              ;делим содержимое ax с содержимым bl  
mov ah,0        ; остаток обнуляем и результат умножаем на 3 
mov bl,3 
mul bl 
add ax,12         ; к произведению прибавляем 12  и заносим в y 
mov y,al 
mov ax,4c00h ;завершаем работу программы 
int 21h 
code ends 
end start

Решение задачи: «Вычислить значение выражения»

textual
Листинг программы
st segment stack 'stack'   ; описание сегмента стека

Объяснение кода листинга программы

  1. В коде описывается сегмент стека с названием 'stack'. mov ax, data ; переносим адрес сегмента данных в регистр AX mov ds, ax ; загружаем адрес сегмента данных в регистр DS mov ax, 100h ; переносим значение 100h в регистр AX mov ss, ax ; загружаем значение 100h (адрес сегмента стека) в регистр SS
  2. В регистр AX переносится адрес сегмента данных.
  3. Адрес сегмента данных загружается в регистр DS.
  4. В регистр AX переносится значение 100h.
  5. Значение 100h (адрес сегмента стека) загружается в регистр SS. mov sp, offset top ; загружаем адрес вершины стека              main proc far   ; вход в процедуру main push bx        ; сохранить значение регистра BX в стеке push cx        ; сохранить значение регистра CX в стеке
  6. Адрес вершины стека загружается в регистр SP.
  7. Вход в процедуру 'main'.
  8. Значение регистра BX сохраняется в стеке.
  9. Значение регистра CX сохраняется в стеке. mov bx, 6      ; поместить значение 6 в регистр BX add bx, 3     ; добавить 3 к значению регистра BX
  10. В регистр BX помещается значение 6.
  11. К значению регистра BX добавляется 3. pop cx        ; восстановить значение регистра CX из стека pop bx        ; восстановить значение регистра BX из стека
  12. Значение регистра CX восстанавливается из стека.
  13. Значение регистра BX восстанавливается из стека. ret           ; выход из процедуры main
  14. Выход из процедуры 'main'.

Оцени полезность:

13   голосов , оценка 4.462 из 5