📄 shmapp2.asm
字号:
; SHMAPP2.ASM
;
; This is a shared memory application that uses the static shared memory
; TSR (SHARDMEM.ASM). This program assumes the user has already run the
; SHMAPP1 program to insert a string into shared memory. This program
; simply prints that string from shared memory.
;
.xlist
include stdlib.a
includelib stdlib.lib
.list
dseg segment para public 'data'
ShmID byte 0
dseg ends
cseg segment para public 'code'
assume cs:cseg, ds:dseg, es:SharedMemory
; SeeIfPresent- Checks to see if the shared memory TSR is present in memory.
; Sets the zero flag if it is, clears the zero flag if
; it is not. This routine also returns the TSR ID in CL.
SeeIfPresent proc near
push es
push ds
push di
mov cx, 0ffh ;Start with ID 0FFh.
IDLoop: mov ah, cl
push cx
mov al, 0 ;Verify presence call.
int 2Fh
pop cx
cmp al, 0 ;Present in memory?
je TryNext
strcmpl
byte "Static Shared Memory TSR",0
je Success
TryNext: dec cl ;Test USER IDs of 80h..FFh
js IDLoop
cmp cx, 0 ;Clear zero flag.
Success: pop di
pop ds
pop es
ret
SeeIfPresent endp
; The main program for application #1 links with the shared memory
; TSR and then reads a string from the user (storing the string into
; shared memory) and then terminates.
Main proc
assume cs:cseg, ds:dseg, es:SharedMemory
mov ax, dseg
mov ds, ax
meminit
print
byte "Shared memory application #2",cr,lf,0
; See if the shared memory TSR is around:
call SeeIfPresent
je ItsThere
print
byte "Shared Memory TSR (SHARDMEM) is not loaded.",cr,lf
byte "This program cannot continue execution.",cr,lf,0
ExitPgm
; If the shared memory TSR is present, get the address of the shared segment
; into the ES register:
ItsThere: mov ah, cl ;ID of our TSR.
mov al, 10h ;Get shared segment address.
int 2Fh
; Print the string input in SHMAPP1:
print
byte "String from SHMAPP1 is '",0
lea di, InputLine ;ES already points at proper seg.
puts
print
byte "' from shared memory.",cr,lf,0
Quit: ExitPgm ;DOS macro to quit program.
Main endp
cseg ends
sseg segment para stack 'stack'
stk db 1024 dup ("stack ")
sseg ends
zzzzzzseg segment para public 'zzzzzz'
LastBytes db 16 dup (?)
zzzzzzseg ends
; The shared memory segment must appear after "zzzzzzseg".
; Note that this isn't the physical storage for the data in the
; shared segment. It's really just a place holder so we can declare
; variables and generate their offsets appropriately. The UCR Standard
; Library will reuse the memory associated with this segment for the
; heap. To access data in the shared segment, this application calls
; the shared memory TSR to obtain the true segment address of the
; shared memory segment. It can then access variables in the shared
; memory segment (where ever it happens to be) off the ES register.
;
; Note that all the variable declarations go into an include file.
; All applications that refer to the shared memory segment include
; this file in the SharedMemory segment. This ensures that all
; shared segments have the exact same variable layout.
SharedMemory segment para public 'Shared'
include shmvars.asm
SharedMemory ends
end Main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -