- 浏览: 2060527 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (1409)
- asp/asp.net学习 (241)
- oracle (10)
- delphi (295)
- java (27)
- pb (1)
- 每日点滴 (49)
- 学习方法 (40)
- 思想方面 (104)
- C语言 (5)
- C++ (1)
- 代码重构经验 (5)
- 软件工程 (3)
- 数据库 (99)
- 英语学习 (3)
- mysql (1)
- 该关注的网站或者网页 (42)
- 总结 (7)
- 要去做的事情 (33)
- 算法 (1)
- 网络方面 (29)
- 随感 (96)
- 操作系统 (36)
- UML (12)
- 常用工具的使用 (55)
- 脚本 (7)
- 汇编 (62)
- 数据结构 (2)
- 财务 (38)
- 语文作文 (16)
- 法律 (1)
- 股票 (88)
最新评论
-
devwang_com:
可以,学习了~~
列出文件夹下所有文件夹的树形结构--Dos命令 tree的使用 -
hvang1988:
不管用啊 frxrprt1.PreviewForm.Pare ...
fastReport预览时嵌入到别的窗体 -
00915132:
我也有这个疑问,非常 感 谢
left join加上where条件的困惑 --SQL优化 -
zhuyoulong:
学习了,高效读书
软件架构师要读的书 -
nTalgar:
非常感谢分享!
Application.ProcessMessages用法:
转自:http://www.x86asm.com/DisplayArticle.asp?BoardID=5&ArticleID=11
基本原理
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
发表评论
-
用汇编写的病毒代码
2010-05-29 08:04 1898转自:http://www.programfan.com ... -
堆和栈(堆栈)的区别
2010-05-20 16:47 865转自:http://www.360doc.com/sho ... -
OllyDBG 入门系列(三)-函数参考
2010-05-06 14:07 1389转自:http://bbs.pediy.com/s ... -
OllyDBG 入门系列(二)-字串参考
2010-05-05 19:02 1142转自:http://bbs.pediy.com/s ... -
用汇编编写DOS下的内存驻留程序(5)
2010-05-05 11:05 1021转自:http://www.x86asm.com/Dis ... -
用汇编编写DOS下的内存驻留程序(4)
2010-05-05 11:04 1168转自:http://www.x86asm.com/Displa ... -
用汇编编写DOS下的内存驻留程序(3)
2010-05-05 11:03 896转自:http://www.x86asm. ... -
用汇编编写DOS下的内存驻留程序(1)
2010-05-05 11:01 1501转自:http://www.x86 ... -
补码 左移与右移 32位系统
2010-05-02 11:04 2796QQ:797801 计算机中 ... -
c语言控制语句对应的汇编语句代码
2010-04-29 18:15 2253转:http://blog.csdn.net/ ... -
调试windows程序
2010-03-21 10:11 814debug 只能支持1M的寻址 如果需要调 ... -
ds:[bp+2]
2009-11-28 13:22 906mov ax,0 mov ds ... -
程序的起始地址的段地址
2009-11-26 09:38 1325生成EXE之后用Debug加载后,查看寄存器内容如下: ... -
将内存FFFF:0--FFFF:b单元中的数据复制到0:200--0:20b单元中
2009-10-25 21:13 1676该程序的功能: 将内存FFFF:0--FF ... -
标志寄存器
2009-10-25 18:46 998方便记忆 OF 溢出(是/否) ... -
安全的一段内存空间 0:2000~0:02FF
2009-10-25 18:20 949看到120页了 我们要向内存里写东西 ... -
显示红心的汇编代码
2009-10-25 18:05 922assume cs:code code segment ... -
debug时 遇到loop 指令
2009-10-25 17:35 900debug时 遇到loop 指令 用 p指 ... -
Loop的使用
2009-10-23 21:06 1215看到107页了 王爽汇编第五章 Loop的使用 ... -
王爽汇编的第四章的一个小例子--待验证
2009-10-20 21:02 1171第四章的一些总结: 1. DOS系统是单任 ...
相关推荐
### 汇编语言下DOS内存驻留程序设计概览 #### 1. 内存驻留程序(TSR)概念解析 内存驻留程序,全称“Terminate and Stay Resident Program”(TSR),是一种在计算机系统中加载至内存、执行完毕后并不释放其占用的内存...
文件"用汇编编写DOS下的内存驻留程序.doc"可能会提供更具体的技术实现和示例代码,这对于深入理解这个主题非常有帮助。 总之,用汇编编写DOS下的内存驻留程序是一个对系统级编程有深入了解的过程。它涉及到汇编语言...
在这个模块中,我们使用dos下的中断函数和内存驻留函数来设置中断和内存驻留程序。 三、程序流程图 下面是屏保程序的流程图: 1. 初始化程序 2. 图形录入 3. 动画绘制 4. 非工作状态计时 5. 检测键盘输入 6. 中断...
通过这些文件,我们可以了解到这是一套使用汇编语言编写的内存驻留程序,可能涉及到键盘输入处理、中断服务以及程序自身的管理和激活机制。学习这些源代码可以帮助理解如何在DOS环境下有效地利用有限的内存资源,...
本文将深入探讨一个用汇编语言实现的常驻内存时钟程序,这个程序可以在计算机运行时持续显示当前时间,无需用户交互。 首先,让我们了解汇编语言的基础。汇编语言中的每条指令都对应于计算机硬件的特定机器码,...
本篇文章将深入探讨一个由汇编语言编写的时钟小程序,这个程序巧妙地利用了DOS中断,并且具有彩色显示功能,是作者为期末作业精心创作的作品。 首先,我们来理解汇编语言。汇编语言是一种符号化的机器语言,每个...
本课程设计报告的主要目的是设计和实现一个DOS下屏保程序,使用汇编语言编写该程序。该程序的主要功能是绘制屏保图形、计时、检测键盘输入和设置中断等。 汇编语言课程设计 汇编语言是一种低级编程语言,它直接...
标题中的“TSR程序作出DOS下的屏幕保护程序”指的是在DOS操作系统环境下,通过创建一个常驻系统内存(Terminable and Stay Resident, TSR)程序来实现屏幕保护功能的技术。这种程序可以在用户离开计算机或者一段时间...
在DOS环境中,开发者通常会使用汇编语言编写这样的程序,因为它们对内存管理和中断处理有更精细的控制。 **TSR程序的实现步骤** 1. **初始化**:TSR程序首先会进行一些基本的初始化工作,如分配内存、设置中断向量...
4. **编写时钟程序**:创建一个驻留在内存中的时钟程序,它能实时显示时间且不影响其他程序运行。这涉及到实时系统调用和中断处理,尤其是INT 1CH中断服务程序的修改和利用。 5. **画网格线**:根据用户输入的坐标...
第一部分是基础部分,以8086/8088为背景,以DOS和PC兼容机为软硬件平台,以MASM和TASM为汇编器,介绍汇编语言的有关概念,讲解汇编语言程序设计技术。第二部分是提高部分,以80386为背景,以新一代微处理器Pentium为...
用汇编语言(8086/DOS)实现一个显示系统时间的程序,运行时,在屏幕的右上角将显示本机系统的日期及时间,可以应用到其它适用环境中,实现其日期、时间自动更新显示功能。 知识点6:程序设计的步骤 设计的步骤包括...
`PLAY.ASM`可能是该程序的源代码,用汇编语言编写,这种低级语言直接对应机器指令,对于理解程序的工作原理非常有用。 在使用该音乐播放器时,有以下几个关键步骤: 1. **运行驻留内存的PLAY**:首先,用户需要在...
### DOS功能调用符与Debug程序调试详解 在学习计算机编程的过程中,特别是针对早期操作系统如DOS的理解,掌握DOS功能调用符...对于汇编语言学习者而言,熟练掌握这两方面知识对于理解和编写DOS下的应用程序至关重要。
- **简介**:本章介绍了如何使用汇编语言编写名为MACLIST的程序,该程序主要用于增强现有应用程序的功能。 - **功能介绍**: - 从键盘获取输入。 - 定位磁盘上的目录和文件。 - 对内存中的文件进行排序。 - 将...
实现这一步骤的必要性在于:一旦中断服务程序驻留内存后,一般程序员使用这一新增的中断调用就如同调用DOS或BIOS的中断子程序一样,只要了解其入口要求和返回参数就可调用。程序驻留在内存后,它占用的存储区就不会...
这个程序需要驻留在内存中,并在屏幕上固定位置(如右上角)显示时钟,同时不影响其他程序运行。利用INT 1CH中断服务程序,每0.05秒更新一次时间显示,获取系统实时钟信息。 5. **画网格线**: 程序需根据用户...
6. 内存管理:DOS在有限的内存资源下进行了有效的管理,如使用分配器(ALLOC.S)来分配内存,释放器(FREE.S)来回收内存。同时,通过扩展内存管理器(EMS和XMS)来利用扩展内存。 7. 多任务和并发:尽管DOS本身并...