汇编语言技术指标

一、程序状态寄存器
PSW(Program Status Word)为程序状态寄存器,这是一个16位寄存器,由条件码标志(flag)和控制标志构成:
bit0:CF
bit2:PF
bit4:AF
bit6:ZF
bit7:SF
bit8:TF
bit9:IF
bit10:DF
bit11:OF
其中,条件码标志用来记录程序中运行结果状态信息.由于这些状态信息往往作为后继条件转移指令的转移控制条件,所以称为条件码.这包括以下6位:
OF(Overflow Flag)溢出标志,在运行过程中,如操作数超出了机器能表示的范围则称为溢出,此时OF位置1,否则置0.
SF(Sign Flag)符号标志,记录运算结果的符号,结果为负时置1,否则置0.
ZF(Zero Flag)零标志,运算结果为0时ZF位置1,否则置0.
CF(Carry Flag)进位标志,记录运算时从最高有效位产生的进位值.例如,执行加法指令时,最高有效位有进位时置1,否则置0.
AF(Auxiliary carry Flag)辅助进位标志,记录运算时第3位(半个字节)产生的进位值.例如,执行加法指令时第3位有进位时置1,否则置0.
PF(Parity Flag)奇偶标志,用来为机器中传送信息时可能产生的代码出错情况提供检验条件.当结果操作数中1的个数为偶数时置1,否则置0
控制标志位有三个:
DF(Direction Flag)方向标志,在串处理指令中控制处理信息的方向用。当DF位为1时,每次操作后使变址寄存器SI和DI减量,这样就使串处理从高地址向低地址方向处理。当DF为0时,则使SI和DI增量,使串处理从低地址向高地址处理。
IF(Interrupt Flag)中断标志,当IF为1时,允许中断,否则关闭中断
TF(Trap Flaga)陷井标志,用于单步方式操作。当TF位为1时,每条指令执行完后产生陷阱,由系统控制计算机;当TF位为0时,CPU正常工作不产生陷阱。

二、中断屏蔽寄存器
中断屏蔽寄存器的I/O端口地址是21H,它的8位对应8个外设。
bit0:定时器(IR0)
bit1:键盘(IR1)
bit2:保留(IR2)
bit3:串行通讯口(2)(IR3)
bit4:串行通讯口(1)(IR4)
bit5:硬盘(IR5)
bit6:软盘(IR6)
bit7:打印机(IR7)
通过设置这个寄存器的某位为1或为1允许或禁止某种外设的中断.某位为0表示允许某种外设中断请求,某位为1表示某种外设的中断请求被屏蔽(禁止).
例如,只允许键盘中断,可设置如下中断屏幕字:
MOV AL,11111101B
OUT 21H,AL
如果系统中要新增设键盘中断,则可用下列指令实现:
IN AL,21H
AND AL,11111101B
OUT 21H,AL
三、中断命令寄存器
bit0:L0
bit1:L1
bit2:L2
bit3,bit4:0
bit5:EOI
bit6:SL
bit7:R
中断命令寄存器的I/O端口地址为20H,它的各个控制位可动态地控制中断处理过程,其中L2-L0三位指定IR0-IR7中具有最低优先级的中断请求.位6(Set Level)和位7(Rotate)控制IR0-IR7的中断优先级的顺序.位5(EOI)是中断结束位.当EOI为1时,当前正在处理的中断请求就被清除,所以在中断处理完成后,必须中断结束位置于1,否则以后将屏蔽掉对同级中断或低级中断的处理.当然在必要的时候,在中断处理程序中也可以用EOI命令清除当前的中断请求,使得在中断处理的过程中又能响应同级或低级的中断.
结束外中断用下面的指令:
MOV AL,20H
OUT 20H,AL
在发出一个EOI命令时,位7和位6有四种组合,其含义如下:
R SL
0 0 正常优先级方式
0 1 清除由L2-L1指定的中断请求
1 0 各中断优先级依次左循环一个位置
1 1 各中断优先级依次循环到由L2-L0指定的中断请求达到最低优先级位置上.
四、键盘状态字节
bit0=1:按下右移键Right Shift
bit1=1:按下左移键Left Shift
bit2=1:按下控制键Ctrl
bit3=1:按下交替键Alt
bit4=1:Scroll Lock状态已变换
bit5=1:Num Lock状态已变换
bit6=1:Caps Lock状态已变换
bit7=1:Insert状态已变换
五、键盘缓冲区结构
0040:001A BUFF_HEAD DW ? ;键盘缓冲区的首地址
0040:001C BUFF_TAIL DW ? ;键盘缓冲区的末地址
0040:001E KB_BUFFER DW 16 DUP(?) ;16个输入量的空间
0040:003E KB_BUFFER_END LABEL WORD
这个缓冲区是一个先进先出的循环队列,BUFF_HEAD和BUFF_TAIL是缓冲区的两个地址指针.当HEAD指和TAIL指针相等时,说明缓冲区为空.
六、彩色属性字节
bit0-bit3:前景(bit0:B,bit1:G,bit2:R,bit3:I)
bit4-bit6:背景(bit4:B,bit5:G,bit6:R)
bit7:闪烁(BL)
RGB分别表示红,绿,兰,BL表示闪烁,I为亮度,闪烁和亮度只应用于前景.
七、DOS预定义文件代号
0=标准输入设备
1=标准输出设备
2=标准错误输出设备
3=标准辅助设备
4=标准打印设备
八、文件代号式文件操作错误返回代码
01 非法功能号
02 文件未找到
03 路径未找到
04 同时打开的文件太多
05 拒绝存取
06 非法文件代号
07 内存控制块被破坏
08 内存不够
09 非法存储块地址
10 非法环境
11 非法格式
12 非法存取代码
13 非法数据
14 (未用)
15 非法指定设备
16 试图删除当前的目录
17 设备不一致
18 已没有文件
九、文件属性字节
bit0:只读
bit1:隐文件
bit2:系统文件
bit3:卷文件
bit4:子目录
bit5:归档位(该位为1表示:已写入并关闭了的文件(硬盘用))
十、存取代码
0--为读而打开文件
1--为写而打开文件
2--为读和写而打开文件
十一、磁道地址区
用BIOS功能对磁道进行格式化操作要求ES:BX寄存器指定一组磁道地址区,对磁道上的每一个扇区,必须有一个格式为T/H/S/B的四个字节的数据项,这里
T=磁道号
H=磁头号
S=扇区号
B=每扇区的字节数(00=128,01=256,02=512,03=1024)
十二、磁盘状态字节
用BIOS磁盘操作(AH=02,03,04,05)如果操作成功,则CF和AH置为0;如果操作失败,CF置为1,AH中返回表示出错原因的状态代码。
01 给磁盘I/O传送了非法命令
02 磁盘上没有发现地址标记
03 试图往写保护盘上写
04 没有找到指定的扇区
08 DMA超载运行
09 DMA超过64K的限制
10 读盘数据错(CRC)
20 软盘控制器出错
40 随机移动失败
80 回答失败

时间: 2024-11-18 06:15:57

汇编语言技术指标的相关文章

X86汇编语言总结

下载地址:点击打开下载链接 AX.BX.CX.DX一般用来存放数据 [BX].[BP].[SI].[DI]中一般存放着某个段寄存器的偏移地址,默认情况下,[BX]中存放着数据段(DS)的偏移地址,[BP]中存放着栈段(SS)的偏移地址(功能和SP类似),其中BX只能和SI.DI组合,BP只能和SI.DI组合,SI.DI间是不能组合的 Loop指令一般搭配着CX寄存器使用,每循环一次,CX寄存器中的值减少1 执行PUSH指令时,SP-2,执行POP时,SP+2 个人的一点总结:压栈时,先减后压:出

汇编语言loop使用,连续多个数相加

问题描述 汇编语言loop使用,连续多个数相加 汇编语言实验,使用loop实现连续多个数相加,求代码(字数怎么不够呢) 解决方案 用CX寄存器存循环的次数,用其他通用寄存器存要相加的数,循环做加法就行 解决方案二: 很简单的,你必须按照步骤来,不然很容易出错的, 解决方案三: Intel80x86系列汇编语言中的LOOP指令,是循环指令,循环次数由计数寄存器CX指定.是否执行循环体的判断指令在循环体之后,所以,至少执行1次循环体,即至少循环1次.执行LOOP指令时,CPU自动将CX的值减1,若C

学习编程-用汇编语言画图,汇编语言菜鸟求大家帮忙。感激不尽!

问题描述 用汇编语言画图,汇编语言菜鸟求大家帮忙.感激不尽! 作为初学汇编语言的菜鸟,想请教一下怎么用汇编语言画6*6的矩形呢? 解决方案 IP: 机器代码 在DEBUG中U命令反汇编后的源代码 0100 B80400 MOV AX00040103 CD10 INT 10 0105 B40B MOV AH0B 0107 BB0001 MOV BX0100010A CD10 INT 10 010C B40B MOV AH0B 010E BB0000 MOV BX00000111 CD10 INT

简明x86汇编语言教程(1)

第○章 写在前面 我不想夸大或者贬低汇编语言.但我想说,汇编语言改变了20世纪的历史.与前辈相比,我们这一代编程人员足够的幸福,因为我们有各式各样的编程语言,我们可以操作键盘.坐在显示器面前,甚至使用鼠标.语音识别.我们可以使用键盘.鼠标来驾驭"个人计算机",而不是和一群人共享一台使用笨重的继电器.开关去操作的巨型机.相比之下,我们的前辈不得不使用机器语言编写程序,他们甚至没有最简单的汇编程序来把助记符翻译成机器语言,而我们可以从上千种计算机语言中选择我们喜欢的一种,而汇编,虽然不是一

新手必看-汇编语言超浓缩教程

" 哎哟,哥们儿,还捣鼓汇编呢?那东西没用,兄弟用VB"钓"一个API就够你忙活个十天半月的,还不一定搞出来."此君之言倒也不虚,那吾等还有无必要研他一究呢?(废话,当然有啦!要不然你写这篇文章干嘛.)别急,别急,让我把这个中原委慢慢道来:一.所有电脑语言写出的程序运行时在内存中都以机器码方式存储,机器码可以被比较准确的翻译成汇编语言,这是因为汇编语言兼容性最好,故几乎所有跟踪.调试工具(包括WIN95/98下)都是以汇编示人的,如果阁下对CRACK颇感兴趣--:二

简明x86汇编语言教程(7)

5.0 编译优化概述 优化是一件非常重要的事情.作为一个程序设计者,你肯定希望自己的程序既小又快.DOS时代的许多书中都提到,"某某编译器能够生成非常紧凑的代码",换言之,编译器会为你把代码尽可能地缩减,如果你能够正确地使用它提供的功能的话.目前,Intel x86体系上流行的C/C++编译器,包括Intel C/C++ Compiler, GNU C/C++ Compiler,以及最新的Microsoft和Borland编译器,都能够提供非常紧凑的代码.正确地使用这些编译器,则可以得

汇编教程:汇编语言编程实例

汇编语言编程实例一这一章,我们要把我们已学的知识集合起来.具体来讲,我们来写一个使用ODBC APIs的程序.为简单起见,这个程序中我使用Microsoft的Access数据库(Microsoft Access 97) . 注意:如果你使用的windows.inc 是1.18及其以下版本,在开始编译之前要修改其中的一个小bug.在windows.inc中查找 "SQL_NULL_HANDLE",将得到下面这行: SQL_NULL_HANDLE equ 0L 将0后面的"L&q

简明x86汇编语言教程(5)

3.4 串操作 我们前面已经提到,内存可以和寄存器交换数据,也可以被赋予立即数.问题是,如果我们需要把内存的某部分内容复制到另一个地址,又怎么做呢? 设想将DS:SI处的连续512字节内容复制到ES:DI(先不考虑可能的重叠).也许会有人写出这样的代码: NextByte: mov cx,512 mov al,ds:[si] mov es:[di],al inc si inc di loop NextByte ; 循环次数 我不喜欢上面的代码.它的确能达到作用,但是,效率不好.如果你是在做优化,

简明x86汇编语言教程(6)

4.0 利用子程序与中断 已经掌握了汇编语言?没错,你现在已经可以去破译别人代码中的秘密.然而,我们还有一件重要的东西没有提到,那就是自程序和中断.这两件东西是如此的重要,以至于你的程序几乎不可能离开它们. 4.1 子程序 在高级语言中我们经常要用到子程序.高级语言中,子程序是如此的神奇,我们能够定义和主程序,或其他子程序一样的变量名,而访问不同的变量,并且,还不和程序的其他部分相冲突. 然而遗憾的是,这种"优势"在汇编语言中是不存在的. 汇编语言并不注重如何减轻程序员的负担:相反,汇