![]() | 第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 |