汇编学习(一)8086汇编拾遗(1)

前言

汇编学习这个系列是我一直想要开启的一个学习模块,但是因为种种原因一直没有开始做这件事,正好我们开始准备做操作系统,我们必须出发了,之前的一些事情只能让它飞向天边了。

基础概念

指令和数据,在内存和硬盘上,指令和数据没有什么区别,即使是汇编指令也是以二进制的存在于内存之中的。 cpu 对存储器的读写必须有以下的几点信息: @存储单元的地址信息 @器件的选择,读或者写的指令 @读或写的数据 总线: 地址总线:地址总线就是传输地址的位。 数据总线:数据总线传输的位决定了每次能够传送数据的量,结合频率可以算出传输数据的量。 控制总线:控制线的总数决定了控制的能力。

寄存器

对于我们如果想用汇编写程序,CPU的主要部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件,其中包括: AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW。
寄存器介绍(8086PC,16位):
所有寄存器都是16位的,可以存放两个字节,4个普通寄存器。 AX,BX,CX,DX   : 这4个寄存器可以分开使用的,每次使用8位的使用。 AH   AL   BH   BL   CH  CL   DH  DL
字在寄存器中的存储:
字节: byte 一个字节由8个bit 组成,存在8位寄存器中。 字:word 一个字由两个字节组成,着两个字节分别称为这个字的高位字节,低位字节。
8086寻址方式:
物理地址 = 段地址 《 4 + 偏移地址 段地址必然是16 的倍数,一个段的起始地址也一定是16 的倍数,偏移地址为16位,16位的寻址空间就是64KB。 4个段寄存器:CS,DS,SS,ES CS:代码段寄存器   IP:指令指针寄存器 寻址通式:CS:M   IP:N M*16  + N 修改CS,IP的指令 jmp 指令修该CS:IP地址,如果只修改IP 则使用 “jmp + 寄存器”的方式。
8086编码开始(在8086实模式下,我们使用debug 命令调试)
R  : 查看改变CPU寄存器的内容 D :  查看内存中的内容 E:改写内存中的内容 U:将内存中的机器指令翻译成汇编指令 T:执行一条机器指令 A:以汇编指令的格式在内存中写入一条机器指令 DS寄存器:存放需要访问数据的段地址。当使用[num] 来读取数据的时候,8086会自动取DS寄存器中的数据。位内存单元的段地址。8086 不支持将数据直接送入段寄存器的操作。 SS,SP 寄存器(栈寄存器):8086CPU中,有两个寄存器,这两个寄存器正好是用来刻画栈的。 任意时刻,SS:SP指向栈顶元素。push 指令和pop 指令 执行时,从SS:SP中得到栈的地址。push ,pop 其实也是一种内存传送指令,可以在寄存器和内存之间传输数据。与mov 指令不同的是push pop 访问的内存单元的地址不是在指令中给出的,而是由SS:SP指出的。注意:与mov 不同的是,push 是两步操作。修改栈段寄存器SS的指令会被一起执行。 loop 指令: cx:  循环次数 mov  cx,循环次数 s: { /*循环体*/ } loop s    

查看原文:http://zmrlinux.com/2016/05/16/%e6%b1%87%e7%bc%96%e5%ad%a6%e4%b9%a0%ef%bc%88%e4%b8%80%ef%bc%898086%e6%b1%87%e7%bc%96%e6%8b%be%e9%81%971/
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值