Не запускается программа с Лабораторной работы - Assembler

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

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

Data    Segment     para 'code'
a       dw          11
b       dw              64
c       dw              12
d       dw              58
Data    Ends
Code    Segment   para 'code'
Main  Proc far
 
Main  Endp
Calc    Proc  near       
            mov AX,b
        sub AX,c
        add AX,d
        mov BX,a
        sub BX,b
        sub BX,d
        sub BX,2
        sub BX,b
        sub BX,AX
        add BX,5
        add BX,a
        add BX,c
        mov a,BX        
            ret                     
Calc    Endp                
Code    Ends    Main
Помогите найти ошибку! Пытаюсь сделать задание с ЛР, но при запуске выдает такую ошибку:
08.05.2017 17:58:31 : Assembling file - D:\Soft\TASM\lr.asm 08.05.2017 17:58:32 : Turbo Assembler Version 4.1 Copyright (c) 1988, 1996 Borland International 08.05.2017 17:58:32 : 08.05.2017 17:58:32 : Assembling file: lr.asm 08.05.2017 17:58:32 : **Error** lr.asm(12) Can't address with currently ASSUMEd segment registers 08.05.2017 17:58:32 : **Error** lr.asm(13) Can't address with currently ASSUMEd segment registers 08.05.2017 17:58:32 : **Error** lr.asm(14) Can't address with currently ASSUMEd segment registers 08.05.2017 17:58:32 : **Error** lr.asm(15) Can't address with currently ASSUMEd segment registers 08.05.2017 17:58:32 : **Error** lr.asm(16) Can't address with currently ASSUMEd segment registers 08.05.2017 17:58:32 : **Error** lr.asm(17) Can't address with currently ASSUMEd segment registers 08.05.2017 17:58:32 : **Error** lr.asm(19) Can't address with currently ASSUMEd segment registers 08.05.2017 17:58:32 : **Error** lr.asm(22) Can't address with currently ASSUMEd segment registers 08.05.2017 17:58:32 : **Error** lr.asm(23) Can't address with currently ASSUMEd segment registers 08.05.2017 17:58:32 : **Error** lr.asm(24) Can't address with currently ASSUMEd segment registers 08.05.2017 17:58:32 : **Error** lr.asm(27) Extra characters on line 08.05.2017 17:58:32 : **Fatal** lr.asm(29) Unexpected end of file encountered 08.05.2017 17:58:32 : Error messages: 12 08.05.2017 17:58:32 : Warning messages: None 08.05.2017 17:58:32 : Passes: 1 08.05.2017 17:58:32 : Remaining memory: 467k 08.05.2017 17:58:32 :

Решение задачи: «Не запускается программа с Лабораторной работы»

textual
Листинг программы
.model small
.stack 256
 
.data
a   dw  11
b   dw  64
c   dw  12
d   dw  58
 
.code
 
Calc    Proc
    mov AX,b
    sub AX,c
    add AX,d
    mov BX,a
    sub BX,b
    sub BX,d
    sub BX,2
    sub BX,b
    sub BX,AX
    add BX,5
    add BX,a
    add BX,c
    mov a,BX
    ret                     
Calc    Endp
 
Start:
;------------------------------------------------------
    mov ax, @data
    mov ds, ax
    mov es, ax
 
    call Calc
 
    mov ah, 04Ch
    int 21h
End Start

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

Список элементов:

  1. .model small - устанавливает модель памяти для программы (малый модель)
  2. .stack 256 - определяет размер стека в 256 байт
  3. .data - указывает на то, что следующий блок кода относится к данным
  4. a dw 11 - определяет переменную a как 16-битное беззнаковое число со значением 11
  5. b dw 64 - определяет переменную b как 16-битное беззнаковое число со значением 64
  6. c dw 12 - определяет переменную c как 16-битное беззнаковое число со значением 12
  7. d dw 58 - определяет переменную d как 16-битное беззнаковое число со значением 58
  8. .code - указывает на то, что следующий блок кода относится к коду программы
  9. Calc Proc - определяет процедуру с именем Calc
  10. mov AX,b - перемещает значение переменной b в регистр AX
  11. sub AX,c - вычитает значение переменной c из регистра AX
  12. add AX,d - прибавляет значение переменной d к регистру AX
  13. mov BX,a - перемещает значение переменной a в регистр BX
  14. sub BX,b - вычитает значение переменной b из регистра BX
  15. sub BX,d - вычитает значение переменной d из регистра BX
  16. sub BX,2 - вычитает 2 из регистра BX
  17. sub BX,b - вычитает значение переменной b из регистра BX
  18. sub BX,AX - вычитает значение регистра AX из регистра BX
  19. add BX,5 - прибавляет 5 к регистру BX
  20. add BX,a - прибавляет значение переменной a к регистру BX
  21. add BX,c - прибавляет значение переменной c к регистру BX
  22. mov a,BX - перемещает значение регистра BX в переменную a
  23. ret - завершает выполнение процедуры Calc и возвращает управление в предыдущую процедуру или программу
  24. Start: - определяет точку входа в программу
  25. mov ax, @data - перемещает адрес таблицы данных в регистр AX
  26. mov ds, ax - устанавливает сегмент данных равным значению регистра AX
  27. mov es, ax - устанавливает сегмент стека равным значению регистра AX
  28. call Calc - вызывает процедуру Calc
  29. mov ah, 04Ch - устанавливает регистр AH равным 4C (для выполнения функции вывода строки)
  30. int 21h - выполняет функцию вывода строки на экран

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

12   голосов , оценка 4.5 из 5
Похожие ответы