《汇编语言》学习笔记

《汇编语言第三版》豆瓣链接

根据目前读的情况来看,这本书设计的还是面向初学的,又没有翻译书的那些语句毛病,循序渐进,图文并茂,好书!!!

 

第一章:基础知识
计算机的核心是cpu,cpu通过总线(地址总线、数据总线、控制总线)与各内存设备(RAM、ROM)连接。

cpu只能识别二进制,通过总线将数据或者指令在内存中的读写,再由各内存将指令映射(output/input)到各种设备。cpu对显示器、磁盘等的控制是间接的。

汇编指令对人类友好,通过编译器转化为对应的机器指令。高级语言的编译器是对上述过程的再次抽象。

内存都有一个地址编号,cpu通过地址总线同内存建立联系,受限于地址总线的数量,cpu的寻址空间是有限的。

第二章:寄存器


8086的寄存器是16位的,通用寄存器有:AX, BX, CX, DX,

8086有20位地址总线,但是寄存器只有16位,导致有特殊的寻址方式:物理地址=段地址*16+偏移地址。其中寄存器CS:IP表示指令的物理地址。

介绍了几个简单的汇编指令:add、mov、jmp

 

第三章:寄存器(内存访问)

一个字包含二个字节,16字==16位

寄存器DS表示内存数据的段地址,mov ax,[0]是指将内存地址为DS:0中的数据赋给ax

8086不可以用mov指令给所有的段地址赋值,需要使用通用寄存器中转

栈的概念。使用SS:SP表示起始地址为SS容量为SP的栈,cpu不会对栈超界做限制,使用栈要自己管理栈顶,栈容量的范围为0~FFFF

push、pop可以在栈与指定位置传递数据,遵循先入后出原则

第四章:第一个程序

win系统可用masm将汇编源文件生成可执行文件:1,masm+源文件名-> obj文件;2,link+obj文件->exe文件。其中每步都还有各自的中间流程

debug+可执行文件可查看文件的执行过程

可执行文件加载到内存SA:0时前256个字节为PSP(不知道干什么的)的预留字段,段寄存器CS为SA+10

第五章:[bx]和loop指令

汇编源文件: mov ax,[0]  == mov ax,0

debug: mov ax,[0] == mov ax,ds:[0]

汇编源文件区分进制,debug默认全部为16进制

新的命令:loop,inc

第六章:包含多个段的程序

新指令:start,dw

可以在一个段中包含数据和程序,程序入口用start指明,程序结束是end start

可以在多个段中分别定义数据,栈,程序,关联多个段寄存器,初始化时注意!

第七章:更灵活的定位内存地址的方法

新指令:and、or

[bx+di+idata]多项和表示偏移地址。[bx+idata]的方式为C语言的数组表示提供了基础。

大小写字母的ascii码相差0x20,也就是二进制的第五位不同,'A' & 0b1101111' == 'a'

循环嵌套由于循环寄存器只有一个cx,需要将cx在内存中的读写,多用栈来做缓存。

如果一个问题的解决方案,使我们陷入一种矛盾之中。那么,很可能是我们考虑问题的出发点有了问题,或就是,我们起初运用的规律呢并不合适。


第八章 数据处理的两个基本问题

新指令:div、dd、dup

只有bx、si、di、bp四个寄存器可以指示偏移地址。其中bp默认模式是ss:[bp]

寻址的多样化写法能够帮助理解数组、结构体,但是他妈的确实麻烦,更麻烦的是div的要求

处理数据要解决的是数据在哪?有多长?帮助理解静态语言的强制类型和c指针。

数据的处理包括读取、写入和运算。

第九章:转移指令的原理

完成了实验九,在win7的debug下只能看到一部分效果,但是能想明白很多东西的

新指令:offset、jcxz

jmp的一些用例

jcxz实现break、continue

loop实现do...while

新开公众号“码家村”,欢迎关注

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值