汇编语言全梳理(精简版)

汇编语言全梳理(精简版)

寄存器一览

  • 通用寄存器
    • ax,bx,cx,dx,(ah,al,bh,bl,ch,cl,dh,dl)
    • sp,bp,si,di
  • 指令寄存器
    • ip
  • 标志寄存器
    • FR
  • 段寄存器
    • cs,ds,ss,es

 

mov

指令 示例
mov 寄存器, 数据 mov ax, 8
mov 寄存器, 寄存器 mov ax, bx
mov 寄存器, 内存

mov ax, [0]

mov ax, [bx]

mov 内存, 寄存器

mov [0], ax

mov [bx], ax

内存地址由 段地址:偏移地址 决定,8086 选择 ds 段寄存器作为默认的段地址

由于段寄存器也是寄存器,除了硬件规定不能直接将数据 mov 到段寄存器之外,其他的和正常寄存器一样

指令 示例
mov 段寄存器, 寄存器 mov ds, ax
mov 寄存器, 段寄存器
mov ax, ds
mov 段寄存器, 内存 mov ds, [0]
mov 内存, 段寄存器 mov [0], ds

变种

  • mov ax, ‘a’:处理字符
  • mov ax, [bx + 1]:可用作数组操作
  • mov ax, [bx + si]
  • mov ax, [bx + si + 1]
  • mov word ptr [0],1:指定长度为一个字
  • mov byte ptr ds:[0], 1:指定长度为一个字节

 

add / sub

 格式同 mov 一样 

 

mul

计算:其中一个乘数放在 al 或 ax 中,另一个看指令

  • mul reg
  • mul 内存单元

结果:8位相乘结果放在 ax 中,16位相乘结果放在(高位dx 地位ax)中

 

div

  • div 寄存器
  • div 内存单元

除数为 8 位

  ax dx
  ah al  
计算时 被除数全部 16 位  
结果 余数  

 

除数为 16 位

  ax dx
计算时 被除数低 16 位 被除数高 16 位
结果 余数 

 

寻址方式总结

<span>汇编语言全梳理(精简版)</span>

 

push / pop

CPU 取 SS:SP 作为栈顶地址,我们可以自己初始化栈顶地址为 10010H

mov ax, 1000H
mov ss, ax
mov sp, 0010H
指令 步骤
push ax

SP = SP – 2

ax 内容送入栈顶的内存地址

pop ax

栈顶的内存地址的内容送入 ax

SP = SP + 2

push/pop 段寄存器

同理

push/pop 内存单元

同理

另外:pushfpopf 表示将标志寄存器的值压栈和出栈 

 

loop

mov ax, 2
mov cx, 11
s: add ax, ax
loop s

loop s 表示:

  1. cx = cx – 1
  2. 如果 cx 为 0 则继续执行下面的指令
  3. 如果 cx 不为 0 则跳转到标号 s 处

 

定义不同的段,标准示例

assume cs:code, ds:data, ss:stack

data segment
    dw 0001h, 0002h, ... 000fh
data ends

stack segment
    dw 0,0,0,0 ... 0
stack ends

code segment
    ;定义数据段
    mov ax, data mov ds, ax
    ;定义栈段
    mov ax, stack mov ss, ax
    mov sp, 20h
    ...
code ends

end

 

and / or

  • and al, 10110010B:逻辑与
  • or al, 10110010B:逻辑或

     

db dw dd dup

  • db:定义字节型数据
  • dw:定义字型数据
  • dd:定义双字型数据
  • dup
    • db 3 dup (0) 相当于 db 0,0,0
    • db 3 dup (1,2) 相当于 db 1,2,1,2,1,2

 

跳转指令

jump 类型

  • jump short 标号:根据相对位移跳转 IP = IP + 8 位位移
  • jump near ptr 标号:IP = IP + 16 位位移
  • jump far ptr 标号:CS = 标号所在段的段地址;IP = 标号在段中的偏移地址
  • jump 16位reg:转移地址在寄存器中 IP = (reg)
  • jump word ptr 内存:IP = (内存)
  • jump dword ptr 内存:CS = (内存+2);IP = (内存)
  • jcxz 标号:(cx) == 0 时,(IP) = (IP) + 8 位位移

call 和 ret / iret 类型

  • ret:形象解释相当于 pop IP
    • (IP) = ((ss) * 16 + (sp))
    • (sp) = (sp) + 2
  • retf:形象解释相当于 pop IP;pop CS
    • (IP) = ((ss) * 16 + (sp))
    • (sp) = (sp) + 2
    • (CS) = ((ss) * 16 + (sp))
    • (sp) = (sp) + 2
  • iret:形象解释相当于 pop IP;pop CS;popf
  • call 标号:形象解释相当于 push IP;jmp near ptr 标号
    • (sp) = (sp) – 2
    • ((ss) * 16 + (sp)) = (IP)
    • (IP) = (IP) + 16 位位移
  • call far ptr 标号:形象解释相当于 push CS;push IP;jmp near ptr 标号
  • call 16位reg:形象解释相当于 push IP;jmp 16位reg
  • call word ptr 内存单元:形象解释相当于 push IP;jmp word ptr

子程序标准模板

子程序中使用的寄存器入栈

子程序内容

子程序中使用的寄存器出栈

返回(ret、retf)

 

rep movsb

  • 传送的源地址:ds:si
  • 传送的目的地址:es:di
  • 传输长度:cs
  • 传输方向:cld 为正向

 

端口读取

  • in al, 20h
  • out 20h, al

如 CMOS 有两个端口,70h 是地址端口,71h 是数据端口,所以要读取 CMOS 某存储单元处(2)的数据,就要

mov al, 2
out 70h, al
in al, 71h

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2713.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MVC学习笔记八:WebGrid控件的高级使用「建议收藏」

    MVC学习笔记八:WebGrid控件的高级使用「建议收藏」WebGrid控件的高级使用在笔记三中记录了WebGrid的简单使用,但实际工作中并不能满足开发要求,比如:考虑到性能,要求服务器端分页,而不是查出所有数据来进行简单的客户端页面分页;要在排序时,给列标题显示不同图像等等,都不是直接就能满足的,这里记录下对WebGrid进行的较高层次的使用。一.服务器端分页处理在演示服务端分页之前,先做一些简单的准备工作:

    2022年10月6日
    3
  • 如何将 apache2 URL 映射到 /var/www/ 以外的目录

    如何将 apache2 URL 映射到 /var/www/ 以外的目录

    2021年4月28日
    121
  • linux open函数详解

    linux open函数详解原文地址:https://blog.csdn.net/archyli/article/details/78937937一、open函数用来干什么open函数在Linux下一般用来打开或者创建一个文件,我们可以根据参数来定制我们需要的文件的属性和用户权限等各种参数。二、open函数的定义和参数我们首先来看下open函数在Linux下的定义#include&lt;sys/types.h&gt;#i…

    2022年5月9日
    97
  • 河北对口计算机专业一分一档6,最新!河北6市中考分数线、一分一档表→

    河北对口计算机专业一分一档6,最新!河北6市中考分数线、一分一档表→原标题:最新!河北6市中考分数线、一分一档表→邢台刚刚!邢台市区中考一分一档表公布!邯郸邯郸市2020年主城区普通高中招生最低控制分数线↓↓↓2020年邯郸中考一分一档统计表公布!沧州沧州一中录取参考线(文化分)1、沧州市区北大班:542分珍珠班:530分实验班:以教育局公布为准2、沧州各县市报到时间:7月30日,上午8:00-11:30交费(2000元)⑴现金1…

    2022年7月13日
    29
  • phpstorm2021.11 激活【2021免费激活】「建议收藏」

    (phpstorm2021.11 激活)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html0E14HXZ4QL-eyJsaWN…

    2022年3月29日
    89
  • 12864液晶并行方式显示

    12864液晶并行方式显示

    2021年12月1日
    52

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号