• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >汇编语言 > 汇编语言编写DOS下的内存驻留程序(2)

汇编语言编写DOS下的内存驻留程序(2)

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了汇编语言dos,dos汇编,dos 调试汇编 简书,汇编dos功能,汇编dos功能调用等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

基本原理
2.1 8086/8088
IBM PC中央处理单元(Central Processing Unit)是微处理器Inter 8088,8088是8086是小的版本.对于编写程序而言,两者几乎完全相同.两者之间的差别是在于:它们对外的沟通.8086和外界沟通时是经由16位的输入输出通道,内存存取也是每次以16位为单位,8088和8086极为相似,但是它和外界沟通时就必须经由16位的通道.
2.1.1 寄存器
8086/8088的结构简单,其中包含了一组一般用途的16位寄存器.AX,BX,CX,DX,BP,SI,DI.其中AX,BX,CX,DX还可以分成8位的寄存 器,譬如:AX可分为AH,AL;BX可分为BH,BL;CX可分为CH,CL;DX可分为DH,DL.寄存器BP,SI,DI的用途也没有特别的限制,但是却不能分成两个字节.另外寄存器SP主要是用来当做堆栈指针.除此之外,还有四个非常重要的段寄存器(Segment Register):CS,DS,SS,ES.指令指针(Instru -ction pointer)IP是用来控制目前CPU执行到哪一个指令.
8086设计时考虑到要和8位的CPU8080兼容.8位的计算机是使用两个字节(亦即16位)来定址,因此其定址空间可以达64K字节.16位的CPU在地址设定上选择了完全不同的方法.CPU以段(Segment)为单位,每一段范围内包括64K字节,而内存中则可以包含许多段.所以,操作系统可以在一个段内执行.而使用者的程序则可以在另一个段内执行.在一个段内,程序包可以把计算机视为只有64K字节内存空间.因此原先8位计算机上执行的程序就可以很容易地移植到16位计算机上.除此之外,内存段也可以彼此重叠,因而两个不同的程序就可以共用某一块内存.段值是以寄存器来设定的,而实际的地址值则是把段值(16位)往左移4位,然后再加上16位的位移(Offset),因此构成20位的地址值.所以8086可以直接做20位的地址,也就是可能存取到一兆字节的内存.在这一兆字节的内存中,IBM PC保留了最前面的320K字节给系统的ROM BIOS和显示内存,因此使用者最多也就能使用640K字节.
2.1.2 寻址方式
寻址方式(Addressing mode)是一台计算机上许多复杂操作的关键所在.8086提供了以下几种寻址方法:立即寻址,内存间接寻址, 寄存器间接寻址等.
立即寻址,直接使用数字.
内存间接寻址,数值存放在数据段中的某个位置.
mov bx,foo
foo dw 5
寄存器间接寻址.有两种寄存器可以使用在这种寻址方式下:基址寄存器(Base Register)和索引寄存器(Index Register).基址寄存 器分别是BX和BP,索引寄存器则是SI和DI.在这种寻址方式下,寄存器存放了数据段中的地址值.
mov ax,0F000h
mov es,ax
mov si,0FFFEh
mov dl,byte ptr es:[si]
上面的程序使用间接寻址方式,由寄存器SI读出位于F000:FFFE位置的数据.寄存器间接存取时,最多只能使用玛个基址寄存器各 一个索引寄存器.
以上的寻址方式可以做不同的结合,因此组合后的结果很多.
2.1.3 标志
8086有9个一位的标志(Flag),它们可以用指示CPU的各种状态.以下是9个标志的简介:
CF(Carry Flag):CF为1时就表示算术运算的结果超出正确的长度.
PF(Parity Flag):PF为1就表示使用偶校验,PF为0就表示使用奇校验.
AF(Auxiliary Carry Flag):和CF相同,只是它使用在低4位的结果.AF通常都使用在20位的地址计算上.
ZF(Zero Flag):ZF为1就表示运算结果是0,否则ZF就为0.
SF(Sign Flag):SF为1就表示运算结果的最高位是1,否则SF就为0.
TF(Trap Flag):TF为1,CPU就单步地执行,在这种模式下每完成一个指令就发生一个特殊的中断.
IF(Interrupt Enable Flag):IF为1,允许CPU接收外界的中断,否则IF就为0.
DF(Direction Flag):这个标志使用在循环指令,譬如:MOVS,MOVSB,MOVSW,CMPS,CMPSB和CMPSW.如果DF为1,循环运行时就使地 址值往前增加.如果DF为0,则使地址往后减少.
OF(Over Flag):OF为1,表示一个考虑正负号的运算超出了正确的字节的长度.
2.1.4 循环
所有的循环指令都是以CX作为计数器.一个循环会反复地执行直到CX等于某一特定值为止.以下的程序就是利用反复地相加,完成 两个数的相乘.
mov ax,0
mov cx,4
next: add ax,6
loop next
在上面的程序中,LOOP指令执行时会把CX减1,并且检查CX的内容;如果CX等于0,就转移到下一条指令,否则就跳到NEXT标示的地方 执行.
也可以用下面的程序完成相同的功能:
mov ax,0
mov cx,4
next:
add ax,6
dec cx
cmp cx,0
jne next
2.1.5 内存的数据结构
8088是以字节为存取数据的基本单位.计算机的存储结构是8位的字节,但是CPU本身处理数据则是以16位为单位.在内存中,都遵 循一个原则,即:高高低低的存储方式.高字节对应高地址,低字节对应低地址.
下面是一个简单程序,在AX中放入一个字节的内容并显示:
cseg segment
org 100h
assume cs:cseg,ds:cseg
start:
mov bx,cs
mov ds,bx
mov ah,'H'
mov al,'L'
mov test,ax
mov al,[si] ;First byte of test
call dchar
mov al,[si+1] ;Second byte of test
call dchar
ret
;Display the character contained in AL
dchar proc
push ax
push bx
mov bh,1
mov ah,0eh
int 10h
pop bx
pop ax
ret
dchar endp
test dw ?
cseg ends 
end start

 

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 汇编语言编写DOS下的内存驻留程序(5)
  • 汇编语言编写DOS下的内存驻留程序
  • 汇编语言编写DOS下的内存驻留程序(2)
  • 汇编语言编写DOS下的内存驻留程序(3)
  • 汇编语言编写DOS下的内存驻留程序(4)

相关文章

  • 2017-06-28汇编语言程序设计(三)
  • 2017-06-28(汇编源代码 )侦测CPU型号
  • 2017-06-28汇编源码系列之col
  • 2017-06-28汇编教程之基本概念(win32)
  • 2017-06-28汇编语言技术指标
  • 2017-06-28汇编源代码之图形显示方式屏幕的保存和恢复
  • 2017-06-28汇编教程:汇编语言编程实例
  • 2017-06-28如何使用DLL中的资源
  • 2017-06-28Casl汇编语言辅导
  • 2017-06-28驱动程序的动态加载

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 汇编源码系列之driver
    • 几种基本的逻辑运算
    • 汇编教程:控制寄存器和系统地址寄存器
    • debug命令详解
    • 建立汇编语言的工作环境
    • Mixer Volume Ctrler V1.0
    • 驱动程序的编译和连接
    • 如何创建汇编工作环境
    • 分支程序设计
    • 汇编语言的艺术-观念正误(五)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有