Не запускается программа с Лабораторной работы - 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
Объяснение кода листинга программы
Список элементов:
- .model small - устанавливает модель памяти для программы (малый модель)
- .stack 256 - определяет размер стека в 256 байт
- .data - указывает на то, что следующий блок кода относится к данным
- a dw 11 - определяет переменную
a
как 16-битное беззнаковое число со значением 11 - b dw 64 - определяет переменную
b
как 16-битное беззнаковое число со значением 64 - c dw 12 - определяет переменную
c
как 16-битное беззнаковое число со значением 12 - d dw 58 - определяет переменную
d
как 16-битное беззнаковое число со значением 58 - .code - указывает на то, что следующий блок кода относится к коду программы
- Calc Proc - определяет процедуру с именем
Calc
- mov AX,b - перемещает значение переменной
b
в регистр AX - sub AX,c - вычитает значение переменной
c
из регистра AX - add AX,d - прибавляет значение переменной
d
к регистру AX - mov BX,a - перемещает значение переменной
a
в регистр BX - sub BX,b - вычитает значение переменной
b
из регистра BX - sub BX,d - вычитает значение переменной
d
из регистра BX - sub BX,2 - вычитает 2 из регистра BX
- sub BX,b - вычитает значение переменной
b
из регистра BX - sub BX,AX - вычитает значение регистра AX из регистра BX
- add BX,5 - прибавляет 5 к регистру BX
- add BX,a - прибавляет значение переменной
a
к регистру BX - add BX,c - прибавляет значение переменной
c
к регистру BX - mov a,BX - перемещает значение регистра BX в переменную
a
- ret - завершает выполнение процедуры
Calc
и возвращает управление в предыдущую процедуру или программу - Start: - определяет точку входа в программу
- mov ax, @data - перемещает адрес таблицы данных в регистр AX
- mov ds, ax - устанавливает сегмент данных равным значению регистра AX
- mov es, ax - устанавливает сегмент стека равным значению регистра AX
- call Calc - вызывает процедуру
Calc
- mov ah, 04Ch - устанавливает регистр AH равным 4C (для выполнения функции вывода строки)
- int 21h - выполняет функцию вывода строки на экран
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д