汇编笔记 01

小蒟蒻的汇编自学笔记,如有错误,望不吝赐教

文章目录

笔记

编辑器,启动!

进入 debug 模式

debug功能

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

参考 手把手教你汇编 Debug

CS & IP

CS(Code Segment)是代码段寄存器,一般也被称为段基址,可以认为是程序访问的入口,CPU 需要从 CS 中找到从哪个位置开始取指执行

但是我们还不知道要取哪一段,这时候 IP 的作用就体现出来了

IP(Instruction Pointer)就是指令指针寄存器,也叫做偏移地址,它会告诉我们从段基址开始,取哪一段的地址。
可以使用 段基址:偏移地址 来确定内存中的指定地址。

mov

  1. mov dst, src mov 寄存器,寄存器
  2. mov dst, imm mov 寄存器,立即数
  3. mov dst(L/H), imm mov 寄存器(高八位/低八位),立即数
    把 src 移到 dst

add

  1. add dst, imm
  2. add dst, src
  3. add dst(L/H), imm add 寄存器(高八位/低八位),立即数


    如果相加后溢出了,删溢出的高位(如果低八位加法溢出,也会删"溢出"高位,即使本可以放高八位去)
    不是所有寄存器都能用,亲测,第一行的都能用,第二行开头两个就不能用(后面的没试)

sub

和 add 类似
不够减,就在最高位前放1,再减

汇编语言寄存器的英文全称中英对照表

mul

  1. 两个相乘的数:两个相乘的数,要么都是8位,要么都是16位。
    1. 如果是8位,一个默认放在AL中,另一个放在8位reg或内存字节单元中;
    2. 如果是16位,一个默认在AX中,另一个放在16位reg或内存字单元中。
  2. 结果:
    1. 如果是8位乘法,结果默认放在AX中;
    2. 如果是16位乘法,结果高位默认在DX中存放,低位在AX中放。
      示例:10D * 100D
      10 和 100 都小于 256 满足(1)

      示例:100D * 10000D
      10000 > 256
      10000D = 2710H

      不会溢出

div

  1. 除数: 有8位和16位两种,在一个reg或内存单元中。
  2. 被除数:
    1. 如果除数为8位,被除数则为16位,默认在AX中存放;
    2. 如果除数为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。
  3. 结果:
    1. 如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数;
    2. 如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。

小结:
(1): AX / BL = AL...AH
(2): DXAX / BX = AX...DX

and

逻辑与指令,按位进行与运算。

示例:

复制代码
mov al,01100011B
and al,00111011B
执行后: 
al=00100011B

attention 在 debug 模式下,不能赋二进制数,先转成十六进制再赋

通过该指令可将操作对象的相应位设为0,其他位不变。例如:

将al的第6位设为0的指令是:

and al,10111111B

or

or指令:逻辑或指令,按位进行或运算。

示例:

复制代码
mov al,01100011B
or al,00111011B
执行后: 
al=01111011B
相关推荐
Olrookie1 小时前
若依前后端分离版学习笔记(七)—— Mybatis,分页,数据源的配置及使用
数据库·笔记·学习·mybatis·ruoyi
星期天要睡觉2 小时前
机器学习——支持向量机(SVM)实战案例
笔记·算法·支持向量机
霜绛2 小时前
Unity笔记(三)——父子关系、坐标转换、Input、屏幕
笔记·学习·unity·游戏引擎
所愿ღ5 小时前
Vue框架进阶
前端·vue.js·笔记·前端框架
无妄之灾|5 小时前
BGP协议笔记
笔记·hcip
Hello_Embed8 小时前
STM32HAL 快速入门(二):用 CubeMX 配置点灯程序 —— 从工程生成到 LED 闪烁
笔记·stm32·单片机·学习·嵌入式软件
勤奋的小笼包13 小时前
论文阅读笔记:《Dataset Distillation by Matching Training Trajectories》
论文阅读·人工智能·笔记
wdfk_prog15 小时前
[Linux]学习笔记系列 -- [arm][debug]
linux·运维·arm开发·笔记·学习
wdfk_prog16 小时前
实战教程:从“对象文件为空“到仓库重生——修复 Git 仓库损坏全记录
大数据·网络·笔记·git·学习·elasticsearch·全文检索
小杨爱搞嵌入式17 小时前
【STM32】GPIO的输入输出
c语言·笔记·stm32·单片机·学习