目录 上一页 下一页 附录A

第11章 更高级的技术 -309-

  一"节"内存包含16个连续的BYTE,但这16个BYTE的起始地址必须是16的整数倍。比如从0B800H:0000H处开始的16个BYTE可以看作是一节,而从0B800H:0001H处开始的16个字节就不是一节。
  如果这个功能正确地执行了,则DOS将通过AX寄存器返回这块内存的段地址,偏移地址就是0。下面这个程序演示了这个功能的应用,它可以向DOS申请10KB连续内存块,然后在这10KB空间内填写一些信息并将其段地址显示在屏幕上:
GETMEM.ASM
data

errmsg1
errmsg2
init
data
code

main






;******第












fill:






segment
assume
db
db
db
ends
segment
assume
proc
push
mov
push
mov
mov

一个插入

mov
mov
int
jc

call

mov
mov

mov

push
mov
mov
rep
pop


ds:data
'MCB is error!!!',07h,
'Mem NOT enought!'
'ABCDEFG--HIJKLMN'


cs:code
far
ds
ax,0
ax
ax,data
ds,ax

点******

ah,48h
bx,640
21h
error

outseg

es,ax
di,0

cx,640

cx
cx,16
si,offset init
movsb
cx



0dh,0ah,24h
,07h,0dh,0ah,24h





;初始化堆栈


;初始化DS寄存器




;申请640节的内存


;若内存申请出错,则显示错误信息

;输出申请到的内存段地址

;ES:DI寄存器指向申请到的内存段


;准备向申请到的内存中填入数据

;暂存CX寄存器
;在内存中传送16个字节
;SI指向数据串
;传送数据串
;恢复CX寄存器

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 附录A