第十七章 使用BIOS进行键盘输入和磁盘读写
键盘缓冲区中有16个字单元,可以存储15个按键的扫面码和对应的ascii码。
int 16H ,0号功能
① 检测键盘缓冲区中是否有数据;
② 没有则继续第一步;
③ 读取键盘缓冲区第一个字单元中的键盘输入;
④ 将读取的扫描码送入ah,ascii码送入al;
⑤ 将已读取的键盘输入从缓冲区中删除。
最基本的字符串输入程序,具备的功能:
① 在输入的同时需要显示这个字符串;
② 一般在输入回车符后,字符串输入结束;
③ 能够删除已经输入的字符。
字符串的存储空间实际上是一个字符栈,字符栈中的所有字符,从栈底到...
- [kanwangxue] 如果是文字的,不是特别好啊,体力活,如果文字还加点动画,那就必须顶了。 01/15 01:10
- [kanwangxue] 必须顶啊。 01/15 00:54
- [ltoiii] 既然是实现loop功能,是否要考虑s和se标号? mov bx,offset s - offset 12/09 12:09
- [xiaoyao2012] 正确 11/01 15:33
- [xuer2016] 又找到2条被我忽视的地方: 1.PUSH 和 POP 针对字单元 2.POP 不能是CS 10/26 10:57
- [xuer2016] 学习了 我书写不规范,16进制字母前不加0,后面不加H,以后要注意了。。。 10/26 10:51
- [xuer2016] 来老师这学习下 10/26 10:31
- [youthangel] 不妙,CPU的利用率一下子就上去了。还好我的处理器不是太弱,35%左右的利用率。建议博主在修改一下 10/20 08:23
- [fpamc] 在我心里她就是我的女神。 10/02 08:58
- [newpeople] 你女朋友用得了简直就是一个女神…… 10/01 08:10
- [99998888] 请您指点一下如何找到会ASSEMBLER 语言的翻译,翻译成中文或英文。我的QQ ; 9097815 07/25 09:56
- [jeremy] 我觉得你学习的挺好,可以加你扣扣吗?我的469614823 08/07 14:46
- [zhangbo0805] 哈哈, 你好呀!很希望认识你呀!我发现你学习的积极性很高!正想向您学习呢! 07/31 23:31
- [tomato] 知道了,排得还挺满。 05/29 16:35
- [tomato] 现在学习情况怎么样?在做课设二还是什么? 05/29 10:41
- [tomato] 你的留言收到了。 05/05 23:51
- [fpamc] 开始学习c咯! 05/03 21:40
- [fpamc] 居然不能发博客了……! 04/22 21:03
- [tomato] 你相册中的游戏界面我看过了,非常好,界面很漂亮,很有创造力。博主,很有潜力。加油,一定能把这个游戏做 04/20 23:46
- [fpamc] 忙了半个月,不在家,没时间学习汇编。 但是在途中想到了一个有史以来最难的程序。对于刚学完9章的我。 04/13 20:56
[2012-05-30 18:33] 第十七章笔记
阅读全文 |
评论次数(0) |
浏览次数(783) |
所属类型(汇编笔记)
[2012-05-23 23:42] 第16章笔记
第十六章 直接定址表
数据标号:它标记了存储数据的单元的地址和长度。
在其他段中也可以使用数据标号,在后面加有“:”的地址标号,只能在代码段中使用。
如果想在代码段中直接用数据标号访问数据,则需要用伪指令assume 将标号所在的一个段和一个段寄存器联系起来。否则编译器在编译的时候,无法确定标号的段地址在哪一个寄存器中,当然这是编译器工作需要的,同时也要用指令对段寄存器进行设置。
可以将标号当做数据来定义。
数据标号处存储的双字型数据为标号的段地址和偏移地址。
seg操作符,取得某一标号的段地址。
用直接定址表的目的:
① 为了算法的清晰和简洁;
② 为了加快...
数据标号:它标记了存储数据的单元的地址和长度。
在其他段中也可以使用数据标号,在后面加有“:”的地址标号,只能在代码段中使用。
如果想在代码段中直接用数据标号访问数据,则需要用伪指令assume 将标号所在的一个段和一个段寄存器联系起来。否则编译器在编译的时候,无法确定标号的段地址在哪一个寄存器中,当然这是编译器工作需要的,同时也要用指令对段寄存器进行设置。
可以将标号当做数据来定义。
数据标号处存储的双字型数据为标号的段地址和偏移地址。
seg操作符,取得某一标号的段地址。
用直接定址表的目的:
① 为了算法的清晰和简洁;
② 为了加快...
阅读全文 |
评论次数(2) |
浏览次数(821) |
所属类型(汇编笔记)
[2012-05-18 22:20] 第15章笔记
第十五章 外中断
cpu通过端口和外部设备进行联系。
外中断源有两类:
① 可屏蔽中断
当cpu检测到可屏蔽中断信息时,如果IF=1则cpu在执行完当前指令后响应中断,引发中断过程:如果IF=0,则不响应可屏蔽中断。
可屏蔽中断信息来自于cpu内部,中断类型码是通过数据总线送入cpu的;而内中断的中断类型码是在cpu内部产生的。
中断过程将IF置0的原因就是,在进入中断处理程序后,禁止其他的可屏蔽中断。
sti,设置IF=1
cli,设置IF=0
② 不可屏蔽中断
当cpu检测到不可屏蔽中断信息时,则在执行完当前指令后,立即响应,引发中断过程。
对于8086cpu...
cpu通过端口和外部设备进行联系。
外中断源有两类:
① 可屏蔽中断
当cpu检测到可屏蔽中断信息时,如果IF=1则cpu在执行完当前指令后响应中断,引发中断过程:如果IF=0,则不响应可屏蔽中断。
可屏蔽中断信息来自于cpu内部,中断类型码是通过数据总线送入cpu的;而内中断的中断类型码是在cpu内部产生的。
中断过程将IF置0的原因就是,在进入中断处理程序后,禁止其他的可屏蔽中断。
sti,设置IF=1
cli,设置IF=0
② 不可屏蔽中断
当cpu检测到不可屏蔽中断信息时,则在执行完当前指令后,立即响应,引发中断过程。
对于8086cpu...
阅读全文 |
评论次数(2) |
浏览次数(791) |
所属类型(汇编笔记)
[2012-05-10 19:51] 第十四章笔记
第十四章 端口
在PC机系统中,和cpu通过总线相连芯片除各种寄存器外,还有以下3种芯片:
① 各种接口卡上的接口芯片,他们控制接口卡进行工作;
② 主板上的接口芯片,cpu通过他们对部分外设进行访问;
③ 其他芯片,用来存储相关的系统消息,或进行相关的输入输出处理。
从cpu的角度,将这些寄存器都当做端口,对他们进行统一编址从而建立了一个统一的端口地址空间,每一个端口在地址空间中都有一个地址。
cpu可以直接读写以下三个地方的数据:
① cpu内部的寄存器;
② 内存单元;
③ 端口
在PC系统中,cpu最多可以定位64KB个不同的端口,则端口地址的范围为0~...
在PC机系统中,和cpu通过总线相连芯片除各种寄存器外,还有以下3种芯片:
① 各种接口卡上的接口芯片,他们控制接口卡进行工作;
② 主板上的接口芯片,cpu通过他们对部分外设进行访问;
③ 其他芯片,用来存储相关的系统消息,或进行相关的输入输出处理。
从cpu的角度,将这些寄存器都当做端口,对他们进行统一编址从而建立了一个统一的端口地址空间,每一个端口在地址空间中都有一个地址。
cpu可以直接读写以下三个地方的数据:
① cpu内部的寄存器;
② 内存单元;
③ 端口
在PC系统中,cpu最多可以定位64KB个不同的端口,则端口地址的范围为0~...
阅读全文 |
评论次数(1) |
浏览次数(222) |
所属类型(汇编笔记)
[2012-05-06 21:06] 第十三章笔记
第十三章 int指令
int指令的格式为:int n,n为中断类型码,它的功能是引发中断过程。
可以在程序中使用int指令调用任何一个中断的中断处理程序。
一般情况下,系统将一些具有一定功能的子程序,以中断处理程序的方式提供给应用程序调用。
int指令和iret指令的配合使用与call指令和ret指令的配合使用具有相似的思路。
编写中断例程和子程序的时候,应该注意例程中用到的寄存器的值的保存和恢复。(成对编程)
可以利用iret指令,用栈中的内容修改cs、ip。
BIOS中主要包含以下几部分内容:
① 硬件系统的检测和初始化程序;
② 外部中断和内部中断的中断例程...
int指令的格式为:int n,n为中断类型码,它的功能是引发中断过程。
可以在程序中使用int指令调用任何一个中断的中断处理程序。
一般情况下,系统将一些具有一定功能的子程序,以中断处理程序的方式提供给应用程序调用。
int指令和iret指令的配合使用与call指令和ret指令的配合使用具有相似的思路。
编写中断例程和子程序的时候,应该注意例程中用到的寄存器的值的保存和恢复。(成对编程)
可以利用iret指令,用栈中的内容修改cs、ip。
BIOS中主要包含以下几部分内容:
① 硬件系统的检测和初始化程序;
② 外部中断和内部中断的中断例程...
阅读全文 |
评论次数(2) |
浏览次数(231) |
所属类型(汇编笔记)
[2012-05-04 20:27] 第十二章笔记
第十二章 内中断
中断源分为:
①硬件中断
②软件中断(int 21h也属于此)
硬件中断包括:
① 外中断:外设中断请求(可屏蔽)
② 内中断:硬件出错,运算出错(不可屏蔽)
当cpu有如下情况发生的时候,将产生相应的中断信息
① 除法错误,比如执行div指令产生的除法溢出
② 单步执行;
③ 执行into指令;
④ 执行int指令。
8086cpu用称为中断类型码的数据来标识中断信息的来源。中断类型码为字节型数据,可以表示256种中断信息的来源。
用来处理中断信息的程序被称为中断处理程序,一般来说,需要对不同的中断信息编写不同的中断信息编写不同的处...
中断源分为:
①硬件中断
②软件中断(int 21h也属于此)
硬件中断包括:
① 外中断:外设中断请求(可屏蔽)
② 内中断:硬件出错,运算出错(不可屏蔽)
当cpu有如下情况发生的时候,将产生相应的中断信息
① 除法错误,比如执行div指令产生的除法溢出
② 单步执行;
③ 执行into指令;
④ 执行int指令。
8086cpu用称为中断类型码的数据来标识中断信息的来源。中断类型码为字节型数据,可以表示256种中断信息的来源。
用来处理中断信息的程序被称为中断处理程序,一般来说,需要对不同的中断信息编写不同的中断信息编写不同的处...
阅读全文 |
评论次数(3) |
浏览次数(208) |
所属类型(汇编笔记)
[2012-05-02 19:45] 第十一章笔记
第十一章 标志寄存器(flag)
8086cpu的标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW-program state word)
flag寄存器是按位起作用的。
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 of df if tf sf zf 0 af 0 pf 0 cf
flag的第2位是PF,奇偶标志位。其结果最低有效字节中的所有bit位中1的个数是否为偶数,为偶数pf=1,为奇数pf=0
flag的第6位是ZF(zero flag),零标志位。如果结果为0,那么...
8086cpu的标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW-program state word)
flag寄存器是按位起作用的。
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
0 0 0 0 of df if tf sf zf 0 af 0 pf 0 cf
flag的第2位是PF,奇偶标志位。其结果最低有效字节中的所有bit位中1的个数是否为偶数,为偶数pf=1,为奇数pf=0
flag的第6位是ZF(zero flag),零标志位。如果结果为0,那么...
阅读全文 |
评论次数(0) |
浏览次数(223) |
所属类型(汇编笔记)
[2012-05-02 19:40] 第十章笔记
第十章 call和ret指令
ret指令用栈中的数据,修改ip的内容,从而实现近转移;
retf指令用栈中的数据修改cs和ip的内容,从而实现远转移。
cpu执行ret指令时,进行下面两步操作: pop ip
①(ip)=((ss)*16=(sp))
②(sp)=(sp)+2
执行retf指令时,进行下面4步操作:
①(ip)=((ss)*16=(sp))
②(sp)=(sp)+2
③(cs)=((ss)*16=(sp))
④(sp)=(sp)+2
call指令不能实现短转移。
cpu执行call指令时,进行两步操作:
① 将当前的ip或cs和ip压入...
ret指令用栈中的数据,修改ip的内容,从而实现近转移;
retf指令用栈中的数据修改cs和ip的内容,从而实现远转移。
cpu执行ret指令时,进行下面两步操作: pop ip
①(ip)=((ss)*16=(sp))
②(sp)=(sp)+2
执行retf指令时,进行下面4步操作:
①(ip)=((ss)*16=(sp))
②(sp)=(sp)+2
③(cs)=((ss)*16=(sp))
④(sp)=(sp)+2
call指令不能实现短转移。
cpu执行call指令时,进行两步操作:
① 将当前的ip或cs和ip压入...
阅读全文 |
评论次数(0) |
浏览次数(198) |
所属类型(汇编笔记)
[2012-04-01 07:03] 第九章笔记
第九章 转移指令的原理
可以修改ip,或同时修改cs和ip的指令统称为转移指令。
概括地讲,转移指令就是可以控制cpu执行内存中某处代码的指令。
8086cpu的转移行为有以下几类:
•只修改ip时,称为段内转移,比如:jmp ax。
•同时修改cs和ip时,称为段间转移,比如:jmp 1000:0.
由于转移指令对ip的修改范围不同,段内转移又分为:短转移和近转移。
•短转移ip的修改范围为-128~127。
•近转移ip的修改范围为-32768~32767。
8086cpu的转移指令分为以下几类。
•无条件转移指令
•条件转移指令
•循环指令
•过程
•中断
...
可以修改ip,或同时修改cs和ip的指令统称为转移指令。
概括地讲,转移指令就是可以控制cpu执行内存中某处代码的指令。
8086cpu的转移行为有以下几类:
•只修改ip时,称为段内转移,比如:jmp ax。
•同时修改cs和ip时,称为段间转移,比如:jmp 1000:0.
由于转移指令对ip的修改范围不同,段内转移又分为:短转移和近转移。
•短转移ip的修改范围为-128~127。
•近转移ip的修改范围为-32768~32767。
8086cpu的转移指令分为以下几类。
•无条件转移指令
•条件转移指令
•循环指令
•过程
•中断
...
阅读全文 |
评论次数(1) |
浏览次数(220) |
所属类型(汇编笔记)
[2012-04-01 06:46] 第八章笔记
第八章 数据处理的两个基本问题
计算机是进行数据处理、运算的机器。
描述性符号:reg(寄存器)和sreg(段寄存器)
reg的集合包括:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、di
sreg的集合包括:ds、ss、cs、es
在8086cpu中,只有这四个寄存器(bx、bp、si、di)可以用在“[…]”中来进行内存单元的寻址。
在“[…]”中,这四个寄存器可以单个出现,或只能以四种组合出现:bx和si、bx和di、bp和si、bp和di。
只要在“[…]”使用寄存器bp,而指令中没有显性地给出段地址,段地址就默认在ss中。...
计算机是进行数据处理、运算的机器。
描述性符号:reg(寄存器)和sreg(段寄存器)
reg的集合包括:ax、bx、cx、dx、ah、al、bh、bl、ch、cl、dh、dl、sp、bp、si、di
sreg的集合包括:ds、ss、cs、es
在8086cpu中,只有这四个寄存器(bx、bp、si、di)可以用在“[…]”中来进行内存单元的寻址。
在“[…]”中,这四个寄存器可以单个出现,或只能以四种组合出现:bx和si、bx和di、bp和si、bp和di。
只要在“[…]”使用寄存器bp,而指令中没有显性地给出段地址,段地址就默认在ss中。...
阅读全文 |
评论次数(1) |
浏览次数(196) |
所属类型(汇编笔记)