Не запускается программа с Лабораторной работы - 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 - выполняет функцию вывода строки на экран
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д