8086汇编笔记

以下是看汇编语言王爽新得
试了一下debug,觉得汇编还蛮不方便的,但我也只是接触到了一点点

第一章
1.简单介绍了一下汇编来源:机器只懂二进制,所以要用一种语言连接机器与我们
2.知道储存是一维的,一个二进制是一个比特,而8个比特是一个字节,两个字节是一个字,寄存器就只能存下一个字,
3.cpu是靠总线与内存交流(这里书上说导线能传导高电和低电,大概能懂为什么机器是二进制了)。而内存又分很多块区域,分开处理。
第二章
1.主要介绍寄存器,以及cpu如何支配和被支配寄存器工作,比如一个ax(现在暂时只知道是一个储存数据的寄存器),ax分为ah和al称为高八位和低八位,大概能知道指令为什么总是两位两位的输入
2.公式:段地址x16+偏移地址=物理地址, 注意每一位加一是因为上一位集满16,在这本书里都是16进制。
第三章
cs:ip是指令执行要指向的位置(jmp 寄存器 的指令可以修改ip的值,可利用于递归方程里,反复执行一个指令)
ds是指向数据的寄存器(可与栈的运用联系,例如在这里插入图片描述
ss:sp是用来指向栈的地址(通常与push(入栈)pop(出栈)相联系
●●●●●●

用Debug的R命令查看、改变CPU寄存器的内容;
用Debug的D命令查看内存中的内容;
用Debug的E命令改写内存中的内容;
用Debug的U命令将内存中的机器指令翻译成汇编指令;
用Debug的T命令执行–条机器指令;
用Debug的A命令以汇编指令的格式在内存中写入一条 机器指令。

汇编语言王爽第四章
第四章主要介绍如何完整的写一个程序,只知道debug并不适合写一个完整的程序。

如何完整在dosbox中完成一个程序

要先下载相关:debug.exe link.exe edit.com masm.exe程序(这些在网上都能找到)后放入一个文件中 比如在这里插入图片描述像我这样放。
打开dosbox,输入如图所示的指令,创建一个虚拟c盘。在这里插入图片描述(图是偷的)在输入 mount 指令的位置做个说明: c 表示要创建的硬盘位置(应该是), 后面的i:\assemle 表示你刚刚那些文件放的位置我放在第一张图那个位置我应该输入 mount c d:\debug\masm

弄完上面的就可以开始书上第四章的内容了,按照书上的章节操作就好
##############################分割线 下面是我的笔记
这一张有涉及到很多不深入介绍的东西
1.编辑需注意:
assume cs:xx
xx segment



mov ax,4c00h
int 21h
xx ends
end
(别忘了加上)
(xx是指代码名)
2. 编译:在书上是说输入指令后 ,第一个只要输入编辑好程序的文件名(文件名最好放好位置,比如放在c:\xx),后面直接回车,书上解释不够清楚,后面应该会了解。
3. 连接也是一样,第一个输入文件名就好,(为了生成一个可执行文件)
4. 执行:若程序有显示就会显示,没有就没有
5. debug :要输入debug xx(文件名),ds显示的是代码前16个字节的位置,cs当前显示的数据是代码开始的位置。

第五章

主要介绍了两个汇编语言吧
1.[BX]:[ ]里可以放,寄存器,数字加寄存器,表示这个内存单元里的数据。
2.loop:循环的一个标志,
s:…

loop s
(s是代表循环的名字,可以任意,loop s 返回到s位置)
一般用cx寄存器存循环次数。
3.这里有提到,在给寄存器直接数据的时候,如果开头是字母要前面加个0。
4. 在debug中[数字]这个是合理的,但是在正常masm编程中[数字]会被认为就是数字,而不是这个地址里的数据。
5. mov ax,es:[bx]在这里插入图片描述放个图片供回忆

第六章
主要讲代码中各位置的分配,数据段,代码段。
在分了段的代码:
assume cs:xx(代码段的名字),ds:xx(数据段的名字),ss:xx(栈段的名字)
xx segment(什么段开始,一般数据段第一个)


xx ends
xx segment

xx ends
xx segment
start:(start一般放在代码开始的地方,前面的数据不算)


mov ax,4c00h
int 21h
xx ends
end start
插一张图片供回忆,dw 表示定义的是字型数据
在这里插入图片描述第七章
主要介绍and 和 or指令,还有[bx+数据]
and和or用于修改字母大小写,因为大小写在二进制中就第五位不一样 ,小写是1,下面是转换大小写代码和指令介绍
在这里插入图片描述
在这里插入图片描述一般放一个字符串会给16个字节,方便循环好找。
下面是用来表示数据的地址的表达方式
在这里插入图片描述下面是用这种方式表达需要注意的,不是任意寄存器都能组合
在这里插入图片描述
最后在总结一下
db表示定义字节型数据(一个字母占一个字节,ASCLL就是两位)
dw定义字型数据
dd定义双字型数据

第九章
主要讲很多转移指令,转移时cpu是看位移,而不是看目的地址。这里总结一下指令的说明和用法
1.offset:这个用的少但是后面有用到这个指令计算一段代码的长度,下面是offset的说明图
在这里插入图片描述
2.jmp:是跳转到jmp 后面的标识的位置,
jmp short 标号 是转移到8位位移
jmp near ptr 标号 是16位位移转移
jmp far ptr 标号 可以转换段地址和偏移地址
jmp reg reg里面的数据是改变IP的
jmp word ptr 内存单元地址(如ds:[0]) 会截取这个单元的数据转换IP数据
jmp dword ptr 内存单元地址 跟上面差不多,这个是两个字

3.jcxz:跟cx寄存器想联系,跟if语句相似
在这里插入图片描述
4.loop指令会转到循环开头处,也是根据位移,8位位移
编译器如果转移超出这个指令的范围会报错
5.显示内存区,字体颜色:
下面有写显示出来的东西所要在的地址空间
在这里插入图片描述
下面是调节字体颜色,共8位,需要什么就1,不要就0,二进制形势
在这里插入图片描述
第十章
1.call和ret:先单独介绍一下ret、retf
在这里插入图片描述
call
在这里插入图片描述
这两个指令形成了C语言中的函数 call是将IP入栈,ret将IP出栈。但在写函数的时候,要将函数内要用到的寄存器都先入栈,防止破坏主函数的寄存器数据,下面一个代码供参考。

在这里插入图片描述在这里插入图片描述在这里插入图片描述

2.mul指令:乘法指令
在这里插入图片描述

第十一章
1.标志寄存器,共占16位。
在这里插入图片描述
ZF:下面是介绍在这里插入图片描述PF:下面
SF:只对有符号才有意义,所以进行什么计算改变了它,都是进行了有符号计算才是。
在这里插入图片描述OF:代表溢出位,只有有符号计算才会有溢出的说法
CF:是进位标志,只有进行无符号计算才有进位的说法。
DF:下面在这里插入图片描述2.相关指令
movesb、movesw、rep movesb(经常用来把一段代码从一个位置转移到另一个位置)、cld、std(会决定转移位置正反)
在这里插入图片描述———————pushf将标志寄存器入栈,popf出栈
3.adc、sbb指令都是进行无符号计算才有的。
在这里插入图片描述在这里插入图片描述4.cmp指令:跟以下指令搭配可以变成if else语句
在这里插入图片描述
在这里插入图片描述下面一个代码供参考
在这里插入图片描述5.在debug中怎么看标志寄存器的值
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值