汇编
汇编
lucky tiger
要一直前进,一直静下心来学习。
展开
-
汇编语言之--------外中断
1、在PC系统中,外中断源一共有两种:1、可屏蔽中断2、不可屏蔽中断(断电)可屏蔽中断是CPU可以不响应的外中断。CPU是否响应可屏蔽中断,要看标志寄存器的IF位的设置。当CPU检测到可屏蔽中断信息时:1、如果IF = 1 则CPU在执行完当前指令后响应中断,引发中断过程;2、如果IF = 0 则不响应可屏蔽中断内中断复习回顾:1、取出中断类型码n2、标志寄存器入栈,IF = 0, TF=0;3、CS IP入栈4、(IP)=(n*4), (CS)=(n*4+2)原创 2020-09-23 16:43:49 · 428 阅读 · 0 评论 -
汇编语言之---------端口
1、CPU可以直接读写数据的三个地方 CPU内部寄存器 内存单元 端口对端口的读写不能用mov push pop等内存读写指令对端口的读写指令只有两条in out 分别用于从端口读取数据和往端口写数据CPU访问内存对端口访问(网页是80端口 tcp ip)对端口的访问in out只能使用ax或al来存放从端口读入的数据或要发送到端口中的数据 8位的端口al 16位的端口axCMOS RAM芯片...原创 2020-09-22 20:31:37 · 356 阅读 · 0 评论 -
汇编语言--------------内中断
1、硬件中断分外部中断和内部中断外部中断计算机外设发出的中断请求----------------可以屏蔽中断内部中断硬件出错或者运算出错引起的中断-------不可以屏蔽的中断2、软件中断软件中断其实并不是真正的中断,它们只是可被调用执行的一般程序以及DOS系统功能调用(INT21)等都是软件中断...原创 2020-09-22 11:08:39 · 286 阅读 · 0 评论 -
汇编语言之----------标志寄存器
1、8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW)8086CPU的flag寄存器结构:1 3 5 12 13 14 15位在8086CPU中没有使用,不具有任何意义0 2 4 6 7 8 9 10 11都具有特殊的含义2、ZF标志(zero flag)flag的第6位是ZF,零标志位它记录相关指令执行后结果为0, ZF = 1结果不为0,ZF = 0mov ax,1 sub ax,1 ...原创 2020-09-21 20:53:08 · 371 阅读 · 0 评论 -
汇编语言之--------------call和ret的使用
call ret指令都是转移指令,他们都修改ip或者同时修改cs ip1、ret指令用栈中的数据修改ip的内容,从而实现近转移CPU执行ret指令时,进行下面两步操作(1)(IP) = ((SS)*16 + (SP))(2)(sp) = (sp) + 22、retf指令用栈中的数据修改CS和IP的内容,从而实现远转移(1) (ip)= ((ss)*16 + (sp))(2) (sp)+2(3) (cs) = ((ss)*16 + (sp))(4) (sp) = (sp).原创 2020-09-21 17:30:56 · 515 阅读 · 0 评论 -
汇编语言之---------------bx si di bp
1、这四个寄存器可以单独出现(bx、bp si di)或者只能以四种组合出现(bp si) (bx di) (bp si) (bp di)错误的用法mov ax,[bx+bp]mov ax,[si+di]这两个是不能发生关系的2、只要在[...]中使用寄存器bp,而指令中没有显性的给出段地址,段地址就可以默认在ss中3、绝大部分机器指令都是进行数据处理的指令,处理大致可分为3类读取 写入 运算在机器指令这一层来讲,并不关心数据的值是多少,而关心指令执行...原创 2020-09-21 15:59:17 · 1030 阅读 · 0 评论 -
汇编语言之---------------更灵活的定位内存地址的方法
之前我们使用[0] [bx]1、and指令 mov al,01100011B 先将01100011B这8位数据放到al寄存器中 and al,00111011B 然后按位与执行后:al = 00100011B2、and指令可以将操作对象的相应为设置为0将al的第6位设置为0: and al,101111111B3、or或运算mov al,01100011Bor al,00111011B执行后: al = 011110...原创 2020-09-21 11:14:42 · 274 阅读 · 0 评论 -
汇编语言之------------------------在代码段中使用栈
1、assume cs:codesgcodesg segment dw 0123h,0456h,0123h,0456h,0123h,0456h,0123h,0456h,0123h,0456h//以字为单位 定义数据来取得空间 ?code endsend程序在运行时定义的数据cs:0-cs:15单元中,将着8个数据逆序,就先进栈再出栈就实现了逆序存放2、mov ax,csmov ss,axmov sp,32我们要将cs:16-cs:31的内存空间当作栈来使...原创 2020-09-19 11:16:38 · 209 阅读 · 0 评论 -
汇编语言之----------------------[bx] loop
1、在debug中我们写过类似的指令:MOV AX,[0]表示将ds:0处的数据送入ax中。指令中,在“[...]”里用一个常量0表示内存单元的偏移地址[bx]对于编译器来说mov ax, [0][0] 表示内存单元,他的偏移地址是0,但是编译器是认为只把0传过去而不是地址里面的数据mov bx,0mov ax,[bx]这样间接的使编译器知道地址2、loop代表循环3、描述性符号()(1)ax中的内容为0010H,我们可以这样来描述:(ax)= 001原创 2020-09-18 14:28:07 · 182 阅读 · 0 评论 -
汇编语言之----------第一个程序
1、segment段开始ends段结束是一对成对使用的伪指令,功能是定义一个段一个程序是由多个段组成,这些段被用来存放代码、数据或当作段空间使用2、end 是一个汇编指令的结束标记,代表结束对源程序的编译程序写完了一定要在结尾加上end3、assume含义为“假设”它假设某一段寄存器和程序中的某一个用segment ends定义的段相关联通过assume说明这种关联,在需要的情况下,编译程序可以将段寄存器和某一个具体的段相关联...原创 2020-09-16 22:03:34 · 227 阅读 · 0 评论 -
汇编语言之-------------------栈
1、push指令mov ax,0123HPUSH AXMOV BX,2266HPUSH BXPOP BXPOP AX每次往栈地址里放16b两个字节的数据2、问题一:CPU如何知道一段内存空间被当作栈使用答案:寄存器CS IP中存放着当前指令的段地址和偏移地址8086CPU中有两个寄存器: 段寄存器SS 存放栈顶的段地址 寄存器SP 存放栈顶的偏移地址任意时刻 SS:SP 指向栈顶元素<AX BX CX DX通用寄...原创 2020-09-16 21:06:14 · 221 阅读 · 0 评论 -
寄存器指令MOV ADD SUB
1、不可以直接mov到段寄存器将内存中的东西送入寄存器?MOV BX 1000HMOV DS,BXMOV AL,[0]先mov到通用寄存器,再从通用寄存器到段寄存器 <数据->通用寄存器->段寄存器>到时候他会根据偏移地址和段地址找到内存地址将10000H(1000:0)中的数据读到ALMOV AL,[0]:1、将数据送入寄存器MOV AX,2E2、将一个寄存器的内容送到另一个寄存器MOV AX,BX3、以及现在使用的将一个内存单元的...原创 2020-09-16 15:50:04 · 1880 阅读 · 0 评论 -
段地址和段寄存器
1、8086外部提供了20位的地址总线,CPU内部只能提供16位地址两个16位地址转换为20位地址加法器合成物理地址的方法:物理地址 = 段地址*16 + 偏移地址(16进制数*16就是向左移动一位)在8-86PC机中,存储单元的地址用两个元素来描述。即段地址和偏移地址段地址随意定义只要找到物理地址就行2、段寄存器段寄存器就是提供段地址的8086CPU有4个段寄存器CS、DS、SS、ES当8086要访问内存时,由这4个段寄存器提供内存单元的段地址CS和IP是.原创 2020-09-16 10:45:28 · 5966 阅读 · 2 评论 -
寄存器总结之通用寄存器
一个典型CPU是由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。区别:内部总线实现CPU内部各个器件之间的联系外部总线实现CPU与主板上其它器件的联系。(地址,数据,控制)8086CPU有14个寄存器,他们的名称为:AX、CX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW(简单理解1+1把1放AX,2放BX,加起来的和放在CX)8086CPU所有的寄存器都是16位的,可以存放两个字节。8086上一代CPU中的寄存器都是8位;为了保.原创 2020-09-15 16:34:02 · 9382 阅读 · 0 评论 -
汇编语言复习总结(一)
CPU要想进行数据的读写,必须和芯片进行下面三类信息的交互:存储单元的地址(地址信息)器件的选择,读或写的命令(控制信息)读或写的数据(数据信息)地址总线确定内存上的物理地址位置数据总线的宽度决定每次数据传输的大小控制总线CPU对外部器件的控制是同通过控制总线来进行的。在这里控制总线是个总称,控制总线是一些不同控制线的集合。有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制(读写控制)所以控制总线的宽度决定了CPU对外部器件的控制能力...原创 2020-09-15 15:40:09 · 152 阅读 · 0 评论