从0开始的汇编语言(十七)
前言从0开始的汇编语言系列,选用的参考书籍是清华大学出版社,王爽老师的《汇编语言第四版》。该系列属于博主的笔记系列,文中会采用一些书中的例子,图片以及思考题供读者阅读,如需详细学习汇编语言可以购入一本,谢谢。
学习之前我们做如下约定(随着学习深入还会出现新的约定):
十六进制数均以H结尾
使用8086CPU作为案例
我们使用(地址或寄存器名称)表示一个寄存器或一个内存单元的内容,()内地址是且一定是物理地址
我们将idata视作常量
我们以reg表示一个寄存器包括ax、ah、sp、bp、si、di等,sreg表示一个段寄存器包括ds、ss、cs、es。
话不多说我们马上开始。
int 9中断例程对键盘输入的处理大多数有用的程序都需要处理用户的输入,键盘的输入是最为基本的输入。程序和数据通常需要长期存储,磁盘是最常用的存储设备。BIOS为这两种外设的I/O提供了最基本的中断例程,接下来我们就对它们的应用和相关的问题进行讨论。
我们之间已经学习过,键盘的输入将引发9号中断,BIOS提供了int 9中断例程。CPU在9号中断发生后,执行int 9中断例程,从60H端口读出扫描码,并将其转 ...
从0开始的汇编语言(十六)
前言从0开始的汇编语言系列,选用的参考书籍是清华大学出版社,王爽老师的《汇编语言第四版》。该系列属于博主的笔记系列,文中会采用一些书中的例子,图片以及思考题供读者阅读,如需详细学习汇编语言可以购入一本,谢谢。
学习之前我们做如下约定(随着学习深入还会出现新的约定):
十六进制数均以H结尾
使用8086CPU作为案例
我们使用(地址或寄存器名称)表示一个寄存器或一个内存单元的内容,()内地址是且一定是物理地址
我们将idata视作常量
我们以reg表示一个寄存器包括ax、ah、sp、bp、si、di等,sreg表示一个段寄存器包括ds、ss、cs、es。
话不多说我们马上开始。
描述了单元长度的标号我们之前,一直在代码段中使用标号来标记指令、数据、段的起始地址。比如,下面的代码将code段中的a标号处的8个数据累加,结果储存到b标号处的字中。
12345678910111213141516assume cs:codecode segment a: db 1,2,3,4,5,6,7,8 b: dw 0start:mov si,offset a mov bx,offset b mov c ...
从0开始的汇编语言(十五)
前言从0开始的汇编语言系列,选用的参考书籍是清华大学出版社,王爽老师的《汇编语言第四版》。该系列属于博主的笔记系列,文中会采用一些书中的例子,图片以及思考题供读者阅读,如需详细学习汇编语言可以购入一本,谢谢。
学习之前我们做如下约定(随着学习深入还会出现新的约定):
十六进制数均以H结尾
使用8086CPU作为案例
我们使用(地址或寄存器名称)表示一个寄存器或一个内存单元的内容,()内地址是且一定是物理地址
我们将idata视作常量
我们以reg表示一个寄存器包括ax、ah、sp、bp、si、di等,sreg表示一个段寄存器包括ds、ss、cs、es。
话不多说我们马上开始。
外中断我们知道CPU不仅仅只有运算功能,它还有I/O(Input/Output,输入/输出)能力,比如我们打开文本编辑器,按一下键盘,然后我们就可以看到屏幕出现了我们按下的按键,是CPU将从键盘上的键所对应的字符送到显示器上的。要及时处理外设的输入,显然需要解决两个问题:
外设的输入可能随时发生,CPU怎么知道呢?
CPU从何处得到外设的输入?
这一篇我们就以键盘输入为例,讨论这两个问题。
接口芯片和端口 ...
从0开始的汇编语言(十四)
前言从0开始的汇编语言系列,选用的参考书籍是清华大学出版社,王爽老师的《汇编语言第四版》。该系列属于博主的笔记系列,文中会采用一些书中的例子,图片以及思考题供读者阅读,如需详细学习汇编语言可以购入一本,谢谢。
学习之前我们做如下约定(随着学习深入还会出现新的约定):
十六进制数均以H结尾
使用8086CPU作为案例
我们使用(地址或寄存器名称)表示一个寄存器或一个内存单元的内容,()内地址是且一定是物理地址
我们将idata视作常量
我们以reg表示一个寄存器包括ax、ah、sp、bp、si、di等,sreg表示一个段寄存器包括ds、ss、cs、es。
话不多说我们马上开始。
端口我们前面讲过,各种存储器都和CPU的地址线、数据线、控制线相连。CPU在操控它们的时候,把它们都当作内存来看待,把它们总地看做一个由若干存储单元组成的逻辑存储器,这个逻辑存储器我们称其为内存地址空间。
在PC机系统中,和CPU通过总线相连的芯片除各种存储器外,还有一下三种芯片:
各种接口卡上的接口芯片,它们控制接口卡进行工作
主板上的接口芯片,CPU通过它们对部分外设尽心访问
其他芯片,用来存储相关的系 ...
从0开始的汇编语言(十三)
前言从0开始的汇编语言系列,选用的参考书籍是清华大学出版社,王爽老师的《汇编语言第四版》。该系列属于博主的笔记系列,文中会采用一些书中的例子,图片以及思考题供读者阅读,如需详细学习汇编语言可以购入一本,谢谢。
学习之前我们做如下约定(随着学习深入还会出现新的约定):
十六进制数均以H结尾
使用8086CPU作为案例
我们使用(地址或寄存器名称)表示一个寄存器或一个内存单元的内容,()内地址是且一定是物理地址
我们将idata视作常量
我们以reg表示一个寄存器包括ax、ah、sp、bp、si、di等,sreg表示一个段寄存器包括ds、ss、cs、es。
话不多说我们马上开始。
int指令本篇我们将介绍另一种重要的内中断,由int指令引发的中断。
int指令的格式为:int N,N为中断类型码,它的功能是引发中断过程。当CPU执行一条int指令时就相当于引发一个N号中断的中断过程,执行过程如下:
取中断类型码N
标志寄存器入栈,IF=0,TF=0
CS、IP入栈
(IP)=(N×4),(CS)=(N×4+2)
从此处转去执行N号中断的中断处理程序。
可以在程序中使用int指令调用 ...
从0开始的汇编语言(十二)
前言从0开始的汇编语言系列,选用的参考书籍是清华大学出版社,王爽老师的《汇编语言第四版》。该系列属于博主的笔记系列,文中会采用一些书中的例子,图片以及思考题供读者阅读,如需详细学习汇编语言可以购入一本,谢谢。
学习之前我们做如下约定(随着学习深入还会出现新的约定):
十六进制数均以H结尾
使用8086CPU作为案例
我们使用(地址或寄存器名称)表示一个寄存器或一个内存单元的内容,()内地址是且一定是物理地址
我们将idata视作常量
我们以reg表示一个寄存器包括ax、ah、sp、bp、si、di等,sreg表示一个段寄存器包括ds、ss、cs、es。
话不多说我们马上开始。
内中断任何一个通用的CPU都具有一个能力,可以在执行完当前正在执行的指令之后,检测到从CPU外部发送过来的或内部产生的一种特殊的信息,并且可以立即对所接收到的信息进行处理。这种特殊的信息我们可以称它为:中断信息。中断的意思是指,CPU不再接着向下执行,而是转头去处理这个特殊信息。
内中断的产生什么情况下会产生中断信息呢?我们给出以下四种情况:
除法错误,比如执行div指令产生的除法溢出
单步执行
执行int ...
从0开始的汇编语言(十一)
前言从0开始的汇编语言系列,选用的参考书籍是清华大学出版社,王爽老师的《汇编语言第四版》。该系列属于博主的笔记系列,文中会采用一些书中的例子,图片以及思考题供读者阅读,如需详细学习汇编语言可以购入一本,谢谢。
学习之前我们做如下约定(随着学习深入还会出现新的约定):
十六进制数均以H结尾
使用8086CPU作为案例
我们使用(地址或寄存器名称)表示一个寄存器或一个内存单元的内容,()内地址是且一定是物理地址
我们将idata视作常量
我们以reg表示一个寄存器包括ax、ah、sp、bp、si、di等,sreg表示一个段寄存器包括ds、ss、cs、es。
话不多说我们马上开始。
标志寄存器CPU内部的寄存器中,有一种特殊的寄存器,它具有一下三种作用:
用来存储相关指令的某些执行成果
用来为CPU执行相关指令提供行为依据
用来控制CPU的相关工作方式
它叫做标志寄存器flag,其中储存的信息通常被叫做程序状态字(PSW),flag寄存器和其他寄存器不一样,其他寄存器都是整个寄存器具有一个含义,而flag是按位起作用的,每一位都有特定的含义。
flag寄存器的1、3、5、12、13 ...
从0开始的汇编语言(十)
前言从0开始的汇编语言系列,选用的参考书籍是清华大学出版社,王爽老师的《汇编语言第四版》。该系列属于博主的笔记系列,文中会采用一些书中的例子,图片以及思考题供读者阅读,如需详细学习汇编语言可以购入一本,谢谢。
学习之前我们做如下约定(随着学习深入还会出现新的约定):
十六进制数均以H结尾
使用8086CPU作为案例
我们使用(地址或寄存器名称)表示一个寄存器或一个内存单元的内容,()内地址是且一定是物理地址
我们将idata视作常量
我们以reg表示一个寄存器包括ax、ah、sp、bp、si、di等,sreg表示一个段寄存器包括ds、ss、cs、es。
话不多说我们马上开始。
ret和retf我们书接上回,上一篇我们学习了一些转移指令的原理,接下来我们继续学习一些新的转移指令:
ret指令用栈中的数据,修改IP的内容,从而实现近转移,当CPU执行ret指令时,进行下面两步操作:(IP)=((SS)×16+(SP));(SP)=(SP)+2。用汇编语法来解释ref指令相当于进行了pop IP。
retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移,当CPU执行retf指令时 ...
从0开始的汇编语言(九)
前言从0开始的汇编语言系列,选用的参考书籍是清华大学出版社,王爽老师的《汇编语言第四版》。该系列属于博主的笔记系列,文中会采用一些书中的例子,图片以及思考题供读者阅读,如需详细学习汇编语言可以购入一本,谢谢。
学习之前我们做如下约定(随着学习深入还会出现新的约定):
十六进制数均以H结尾
使用8086CPU作为案例
我们使用(地址或寄存器名称)表示一个寄存器或一个内存单元的内容,()内地址是且一定是物理地址
我们将idata视作常量
我们以reg表示一个寄存器包括ax、ah、sp、bp、si、di等,sreg表示一个段寄存器包括ds、ss、cs、es。
nop占用一个字节,不进行任何动作
话不多说我们马上开始。
转移指令还记得我们之前学习过的jmp指令嘛,就是那个可以用来修改CS,IP的指令。jmp指令就是转移指令的一种,概括的来讲,转移指令就是可以控制CPU执行内存中某处代码的指令。8086CPU的转移行为有以下两种:
只修改IP时,称为段内转移,比如:jmp AX。
同时修改CS和IP时,称为段间转移,比如:jmp 1000:0。
由于转移指令对IP的修改范围不同,段内转移 ...
从0开始的汇编语言(八)
前言从0开始的汇编语言系列,选用的参考书籍是清华大学出版社,王爽老师的《汇编语言第四版》。该系列属于博主的笔记系列,文中会采用一些书中的例子,图片以及思考题供读者阅读,如需详细学习汇编语言可以购入一本,谢谢。
学习之前我们做如下约定(随着学习深入还会出现新的约定):
十六进制数均以H结尾
使用8086CPU作为案例
我们使用(地址或寄存器名称)表示一个寄存器或一个内存单元的内容,()内地址是且一定是物理地址
我们将idata视作常量
我们以reg表示一个寄存器包括ax、ah、sp、bp、si、di等,sreg表示一个段寄存器包括ds、ss、cs、es。
话不多说我们马上开始。
数据处理的两个基本问题这一篇可以算的上是一篇总结性的文章。我们知道,计算机是进行数据处理、运算的机器,那么有两个基本的问题就包含其中:
处理的数据在哪里?
要处理的数据有多长?
这两个问题,在机器指令中必须给明确或者隐含的说明,要不然是没有办法工作的,所以我们这篇文章就在8086CPU的基础上进行讨论。
bx、si、di、bp前面三个寄存器我们都已经见过啦,我们来总结一下它们的用法:
在8086CPU中 ...