- •Глава 1 Введение в семейство персональных компьютеров ibm pc
- •Глава 2 Выполнение программ
- •Глава 3 Требования языка ассемблер
- •Глава 4 Ассемблирование и выполнение программ
- •Глава 5 Определение данных
- •Глава 8 Экранные операции I: Основные свойства
- •Глава 9 Экранные операции II: Расширенные возможности
- •Глава 10 Экранные операции III: Цвет и графика
- •Глава 11 Команды обработки строк
- •Глава 12 Арифметические операции I: Обработка двоичных данных
- •Глава 13 Арифметические операции II:
- •Глава 14 Обработка таблиц
- •Глава 15 Дисковая память I: Организация
- •Глава 16 Дисковая память II: Функции базовой версии dos
- •Глава 17 Дисковая память III: Расширенные функции dos
- •Глава 18 Дисковая память IV: Функции bios
- •Глава 19 Печать
- •Глава 20 Макросредства
- •0000 Csig segment para 'Code'
- •0100 Eb 00 begin: jmp short main
- •0102 Main proc near
- •0109 Main endp
- •0109 Cseg ends
- •20.1. Напишите необходимые директивы: а) для подавления всех команд,
- •04Af в регистр cs. Комбинация этих адресов указывает на первую выполняемую
- •0000 Stacksg segment para stack 'Stack'
- •0000 Codesg segment para 'Code'
- •13D40 плюс 0000. Обратите внимание, что основная программа начинается по
- •0000 Stacksg segment para stack 'Stack'
- •0000 Codesg segment para public 'code'
- •0000 Stacksg segment para stack 'Stack'
- •0000 Codesg segment para public 'code'
- •Ibm Personal Computer Linker
- •0000 Stacksg segment para stack 'Stack'
- •0000 Codesg segment para public 'Code'
- •1. Инициализирующая команда push ds заносит адрес сегмента в стек. Этот
- •010 Clear ,32768!
- •1. Наберите ассемблерную подпрограмму, сохраните ее под именем
- •Ibm Personal Computer Linker
- •Version 2.30 (c) Copyright ibm Corp. 1981, 1985
- •00000H 00011h 00012h codesg code
- •Ibm Personal Computer Basic
- •00 Указатель блока вызывающей программы
13D40 плюс 0000. Обратите внимание, что основная программа начинается по
адресу в регистре CS, содержащему шест.13D2, т.е. адрес 13D20. Из карты
компановки видно, что подпрограмма начинается по относительному адресу
шест.0020. Складывая эти два значения, получим действительный адрес
кодового сегмента для подпрограммы:
Адрес в CS 13D20
Смещение в IP 0020
Действительный адрес 13D40
Компоновщик определяет это значение точно таким же образом, и подставляет
его в операнд команды CALL.
ПРОГРАММА: ИСПОЛЬЗОВАНИЕ ДИРЕКТИВЫ PUBLIC В КОДОВОМ СЕГМЕНТЕ
________________________________________________________________
__________________________________________________________________________
page 60,132
TITLE CALLMUL2 (EXE) Вызов подпрограммы умнож.
EXTERN SUBMUL:FAR
;----------------------------------------------
0000 Stacksg segment para stack 'Stack'
0000 40 [????] DW 64 DUP(?)
0080 STACKSG ENDS
;----------------------------------------------
0000 DATASG SEGMENT PARA 'Data'
0000 0140 QTY DW 0140H
0002 2500 PRICE DW 2500H
0004 DATASG ENDS
;----------------------------------------------
0000 CODESG SEGMENT PARA PUBLIC 'Code'
0000 BEGIN PROC FAR
ASSUME CS:CODESG,DS:DATASG,SS:STACKSG
0000 1E PUSH DS
0001 2B C0 SUB AX,AX
0003 50 PUSH AX
0004 B8 ---- R MOV AX,DATASG
0007 8E D8 MOV DS,AX
0009 A1 0002 R MOV AX,PRICE ;Загрузить стоимость
000C 8B 1E 0000 R MOV BX,QTY ; и количество
0010 9A 0000 ---- E CALL SUBMUL ;Вызвать подпрограмму
0015 CB RET
0016 BEGIN ENDP
0016 CODESG ENDS
END BEGIN
________________________________________________________________________
Segments and Group:
N a m e Size Align Combine Class
CODESG . . . . . . . . . . . . .0016 PARA PUBLIC 'CODE'
DATASG . . . . . . . . . . . . .0004 PARA NONE 'DATA'
STACKSG. . . . . . . . . . . . .0080 PARA STACK 'STACK'
Symbols:
N a m e Type Value Attr
BEGIN. . . . . . . . . . . . . F PROC 0000 CODESG Lenght=0016
PRICE. . . . . . . . . . . . . L WORD 0002 DATASG
QTY. . . . . . . . . . . . . . L WORD 0000 DATASG
SUBMUL . . . . . . . . . . . . L FAR 0000 External
page 60,132
TITLE SUBMUL2 Вызываемая подпрограмма умножения
;----------------------------------------------