随笔分类 - 汇编语言程序设计
摘要:引言 最基本的IO设备有两种,一种是键盘,用于让用户进行最基本的输入,一种是磁盘,程序和数据通常需要长期存期,即存储在磁盘中。 键盘IO 9号中断例程对键盘输入进行处理 9号中断对应60H端口 对于键盘,cpu监测60H端口,一旦监测到有键盘输入,就会引发9号中断,BIOS提供了9号中断的中断例程。
阅读全文
摘要:数据标号 使用标号可以标记指令、数据和段的起始地址,比如下边例子中的a和b,用offset a即可求出标号a所代表的偏移地址。 上边的code、a、b、start、s都是标号,但是只是表示了内存单元的首地址,但是不知道这个内存单元有多大,还有一种标号可以既表示内存单元的地址,也表示内存单元的大小。如
阅读全文
摘要:引言 8086CPU提供几大类指令,即数据传统指令 数据传送指令 比如MOV,PUSH,POP,PUSHF,POPF,XCHG等,这些指令实现寄存器和内存、寄存器和寄存器之间的单个数据传送,或者直接将立即数送入寄存器或内存。 算术运算指令 比如ADD,SUB,ADC,SBB,INC,DEC,CMP,
阅读全文
摘要:引言 CPU可以通过指令在内部进行各种运算,但CPU除了有运算能力外,还要有IO能力,即对外部设备进行控制,接收输入,进行输出。 CPU与外设要通过接口进行交流,即IO操作。接口有两种类型,一种是控制器,一种是适配器。控制器即IO设备本身或主板上的芯片组,比如磁盘控制器和USB控制器。适配器则是我们
阅读全文
摘要:端口port 计算机与硬件或网络交互的接口。 CPU可以直接读取3个地方的数据: ** (1)CPU内部的寄存器 ** (2)内存单元 ** (3)端口,CPU通过端口才能读取硬件或网络的数据,端口的本质就是接口芯片中的一些寄存器。 端口的读写 对端口的读写不能用mov、push、pop等内存读写指
阅读全文
摘要:由int指令引发的内中断 格式: int n, n为中断类型码,int指令的作用是引发中断过程。cpu执行int n指令的执行过程如下: ** 取中断类型码n ** 标志寄存器入栈,IF=0, IF=0 ** CS、IP入栈 ** (IP) = (n * 4), (CS) = (n*4 + 2) 可
阅读全文
摘要:中断定义与分类 中断是CPU处理外部突发事件的一个重要技术,使得CPU在运行过程中对外部事件发出的中断请求及时地进行处理,处理完成后又立即返回端点,继续CPU原来的工作。 发出中断请求的来源叫中断源,根据中断源的不同,可将中断分为硬件中断和软件中断两大类,硬件中断又可以分为外部中断和内部中断两类(这
阅读全文
摘要:引言 8086CPU的标志寄存器有16位,其中存储的信息被称为程序状态字,PSW 一般寄存器都是用于存放数据,寄存器中存放的数据有一个完整的意义,标志寄存器则是按位起作用的,即标志寄存器的每一位都有专门的含义,记录特定的信息。 flag寄存器标志位介绍 ZF标志,零标志位 是flag寄存器的第6位,
阅读全文
摘要:引言 call和ret都是转移指令,它们都修改IP,或者同时修改CS和IP ret和retf指令 ret和retf都是利用栈中数据来重新填充IP(CS)。 ret指令 ret指令利用栈中的内容,修改IP的内容,从而实现近转移 cpu执行ret指令时,进行两步操作,即先用栈顶的数据来修改IP,然后将栈
阅读全文
摘要:8086CPU转移指令分类 无条件转移指令,如jmp 条件转移指令 循环指令,如loop,本质也是转移指令 过程,类似函数 中断,这是个很重要的概念 offset操作符 offset是个伪指令,作用是取得标号的偏移地址,如下例子,相当于将标号start代表的偏移地址给了ax寄存器。 jmp指令,无条
阅读全文
摘要:数据处理两个基本问题 处理的数据在什么地方 要处理的数据有多长 寄存器reg与段寄存器sreg 在8086CPU中,只有bx,bp,si,di这四个寄存器可以用在中括号中用于寻址,其它寄存器比如ax就不行。 bx,bp,si,di用于寻址时只能有4种组合 寄存器bp用于寻址时,即只要在[]中使用寄存
阅读全文
摘要:引言 我们已知可以用中括号来引用某内存地址中存放的数据,比如[data]或[寄存器],但还有一些更灵活的定位内存地址的方法。 and与or指令 and是按位与运算,or是按位或运算 通常可以使用and指令来将操作对象的相应位设为0,其它位不变 使用or指令可以将操作对象的相应位设为1,其它位不变 A
阅读全文
摘要:引言 前几章中程序都是只使用了代码段,本章综合使用代码段、数据段、栈段,毕竟C语言的编译器在将C语言编译成汇编语言的时候也是这个分成几个段来搞的。因此本章很重要啊。本章首先将数据、代码、栈都放在同一个段来使用,然后将它们放在不同段中使用,体会一下差异。 例题 将数据放在代码段实现一 如下例子中,dw
阅读全文
摘要:[bx]简洁寻址和内存单元的描述 描述一个内存单元需要两方面信息,一个是起始地址,一个是长度。 我们直到[]的意思是引用内存单元中的数据,[bx]起始就是一种间接寻址,即[]中没有直接放偏移地址,而是将偏移地址放在了[]中,段地址还是在数据段寄存器ds中。有一点需要注意,mov ax, [0]时,对
阅读全文
摘要:汇编语言程序从写出到最终执行的简要过程 首先是源程序编写,然后汇编器将源程序汇编成目标文件,然后链接器对目标文件进行链接,生成可在操作系统中直接运行的可执行文件。 可执行文件中包含两方面内容: ** 1是程序和数据,程序是从源程序中的汇编指令翻译过来的机器码,数据是源程序中定义的数据。 ** 2是相
阅读全文
摘要:内存中字的存储 任何两个地址连续的内存的单元,N号单元和N+1号单元,可以将它们看成是两个字节型的内存单元,也可以看成是一个字型的内存单元,其中N+1号单元存放高位数据,N号单元存放低位数据,这应该是小端法存储的方式。 DS数据段寄存器和[address] DS数据段寄存器用于存放要访问的数据的段地
阅读全文
摘要:CPU概述 CPU由运算器、控制器、寄存器等组成,这些器件靠内部总线相连,外部总线则负责实现CPU和主板上其它器件的联系。 8086有14个寄存器,其中8个通用寄存器,寄存器都是16位的。 AX、BX、CX、DX用来存放一般性数据,被称为通用寄存器。这四个寄存器可以分为两个独立的8位寄存器使用。比如
阅读全文
摘要:机器语言 机器语言就是一堆01组合,比如汇编里边的PUSH AX,机器语言就是01010000 汇编指令是机器指令的助记符 寄存器是CPU中可以存储数据的器件,一个CPU中有多个寄存器,这些寄存器都是有名字的,比如AX,BX,不同寄存器有不同作用,有些存放数据有些存放指令 汇编语言的组成 汇编语言包
阅读全文
浙公网安备 33010602011771号