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

淩亂°似流年 2022-07-24 07:09 303阅读 0赞
  1. 前言
  2. 汇编学习这个系列是我一直想要开启的一个学习模块,但是因为种种原因一直没有开始做这件事,正好我们开始准备做操作系统,我们必须出发了,之前的一些事情只能让它飞向天边了。
  3. 基础概念
  4. 指令和数据,在内存和硬盘上,指令和数据没有什么区别,即使是汇编指令也是以二进制的存在于内存之中的。
  5. cpu 对存储器的读写必须有以下的几点信息:
  6. @存储单元的地址信息
  7. @器件的选择,读或者写的指令
  8. @读或写的数据
  9. 总线:
  10. 地址总线:地址总线就是传输地址的位。
  11. 数据总线:数据总线传输的位决定了每次能够传送数据的量,结合频率可以算出传输数据的量。
  12. 控制总线:控制线的总数决定了控制的能力。
  13. 寄存器
  14. 对于我们如果想用汇编写程序,CPU的主要部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件,其中包括:
  15. AXBXCXDXSIDISPBPIPCSSSDSESPSW
  16. 寄存器介绍(8086PC16位):
  17. 所有寄存器都是16位的,可以存放两个字节,4个普通寄存器。
  18. AXBXCXDX 4个寄存器可以分开使用的,每次使用8位的使用。
  19. AH AL BH BL CH CL DH DL
  20. 字在寄存器中的存储:
  21. 字节: byte 一个字节由8bit 组成,存在8位寄存器中。
  22. 字:word 一个字由两个字节组成,着两个字节分别称为这个字的高位字节,低位字节。
  23. 8086寻址方式:
  24. 物理地址 = 段地址 4 + 偏移地址
  25. 段地址必然是16 的倍数,一个段的起始地址也一定是16 的倍数,偏移地址为16位,16位的寻址空间就是64KB
  26. 4个段寄存器:CSDSSSES
  27. CS:代码段寄存器 IP:指令指针寄存器
  28. 寻址通式:CSM IPN
  29. M*16 + N
  30. 修改CSIP的指令
  31. jmp 指令修该CSIP地址,如果只修改IP 则使用 jmp + 寄存器”的方式。
  32. 8086编码开始(在8086实模式下,我们使用debug 命令调试)
  33. R : 查看改变CPU寄存器的内容
  34. D : 查看内存中的内容
  35. E:改写内存中的内容
  36. U:将内存中的机器指令翻译成汇编指令
  37. T:执行一条机器指令
  38. A:以汇编指令的格式在内存中写入一条机器指令
  39. DS寄存器:存放需要访问数据的段地址。当使用[num] 来读取数据的时候,8086会自动取DS寄存器中的数据。位内存单元的段地址。8086 不支持将数据直接送入段寄存器的操作。
  40. SS,SP 寄存器(栈寄存器):8086CPU中,有两个寄存器,这两个寄存器正好是用来刻画栈的。
  41. 任意时刻,SSSP指向栈顶元素。push 指令和pop 指令 执行时,从SSSP中得到栈的地址。push ,pop 其实也是一种内存传送指令,可以在寄存器和内存之间传输数据。与mov 指令不同的是push pop 访问的内存单元的地址不是在指令中给出的,而是由SSSP指出的。注意:与mov 不同的是,push 是两步操作。修改栈段寄存器SS的指令会被一起执行。
  42. loop 指令:
  43. cx: 循环次数
  44. mov cx,循环次数
  45. s:
  46. {
  47. /*循环体*/
  48. }
  49. loop s
  50. 查看原文: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 条评论,303人围观)

还没有评论,来说两句吧...

相关阅读