● 实模式下32bit处理器,与8086兼容,例如loop 指令结束标志,只判断cx,而不是ecx

● IO端口

实际上是一些寄存器,在IO接口当中。向外设读写数据,要通过读写IO端口来实现。

有些计算机系统中,端口会映射到内存地址空间。

有些计算机系统,端口独立编址,处理器的地址线连接到IO接口

独立编址的端口不能用mov指令访问,要用in/out

in al, dx ;只能用al/ax, dx

in ax, dx

in al, 0xf0; 如果源操作数使用立即数,只能是一个字节

in ax, 0xf0;

out 与in类似

● intel 处理器段地址必须最少16字节对齐

● 8086寻址方式

1. 寄存器寻址,数据在寄存器里:mov ax, bx

2. 立即寻址:mov ax, 0x02; mov bx, label1

3. 内存寻址,确定偏移地址(因为段地址由段寄存器确定),即有效地址EA。物理地址=段寄存器地址左移4位+EA

3.1 直接寻址,用中括号括起

mov ax, [0x7c00]

add word [0xef05], 0x1234

xor byte [es:label1], 0x51

3.2 基址寻址和变址寻址

两者几乎一样,只是基址寻址用基址寄存器bx,bp作为有效地址,变址寻址用变址寄存器si,di作为有效地址

用bp时,默认段寄存器为ss,其他默认为ds

string dw 'abcdefgh'

mov bx, string

mov ax, [bx] ;基址寻址

mov [si], dx ;变址寻址

3.3 基址变址寻址

用基址寄存器和变址寄存器同时确定EA

mov word [bx+si], 0x1234;

add ax, [bx+di]

● 栈的实质是一段内存空间,由ss:sp确定,当使用push,pop指令的时候,处理器自动将sp+2,或-2。实际上,可以用这样的指令来代替push、pop:

sub sp, 2

mov bx, sp

mov [ss:bx], 10

如果用寄存器来提供偏移地址,只能用bx,si,di,bp,其他不行,例如,mov [ax], dl;错误。mov [bx], dl;正确

cbw ;将字节扩展到字,操作数在al中
cwd ;将字扩展到双字,ax->dx:ax

neg al; 求相反数,相当于0-al
jcxz; cx为0时跳转

loop指令依赖于cx的值,每执行一次,cx减一,当cx=0时,跳出循环

movsb,movsw,movsd ;ds:si->es:di
rep指令依赖于cx的值

x86汇编的更多相关文章

  1. C# inline-asm / 嵌入x86汇编

    C#可不可以嵌入汇编 可以 在我眼中C#作为一个介于中上层语言是不可能不可以 置入汇编代码的 为什么会被我认为中上层语言呢 从C#保留指针就可以看出 我知 道有很多人一定不会相信C#可以使用汇编代码 ...

  2. 为什么X86汇编中的mov指令不支持内存到内存的寻址?

    在X86汇编中,MOV [0012H], [0016H]这种指令是不允许的,至少得有一个操作数是寄存器.当然,这种问题在用高级语言的时候看不到,感觉好像基本上都是从内存到内存啊,为毛到了汇编就不行了? ...

  3. 对X86汇编的理解与入门

    本文描述基本的32位X86汇编语言的一个子集,其中涉及汇编语言的最核心部分,包括寄存器结构,数据表示,基本的操作指令(包括数据传送指令.逻辑计算指令.算数运算指令),以及函数的调用规则.个人认为:在理 ...

  4. 寄存器理解 及 X86汇编入门

    本文整理自多材料源,感谢原址分享,请查看末尾Url I, 汇编语言分类: 汇编语言和CPU息息相关,但是不能把汇编语言完全等同于CPU的机器指令.不同架构的CPU指令并不相同,如x86,powerpc ...

  5. X86汇编概要

    来自:https://www.cnblogs.com/jiftle/p/8453106.html 本文翻译自:http://www.cs.virginia.edu/~evans/cs216/guide ...

  6. x86汇编之十(使用字符串)

    x86汇编之十(使用字符串) 转自网络,出处不详 一.传送字符串 Intel提供了完整的字符串传送指令,就像是MOV指令一样. 1.MOVS指令 1)movs指令格式 把字符串从一个位内存位置传送到另 ...

  7. x86汇编指令脚本虚拟机

    简介 这是一个可以直接解释执行从ida pro里面提取出来的x86汇编代码的虚拟机. 非常精简,整体架构上不能跟那些成熟的虚拟机相比,主要目标是够用.能用.轻量就行,如果觉得代码架构设计的不是很好的话 ...

  8. x64汇编第二讲,复习x86汇编指令格式,学习x64指令格式

    目录 x64汇编第二讲,复习x86汇编指令格式,学习x64指令格式 一丶x86指令复习. 1.1什么是x86指令. 1.2 x86与x64下的通用寄存器 1.3 OpCode 1.4 7种寻址方式 二 ...

  9. x86汇编利用int 16h中断实现伪多线程输入

    x86汇编利用int 16h中断实现伪多线程输入 我们都知道,如果想让一个程序,同时又干这个,又干那个,最好的办法就是多线程.这个在高级语言里面已经用烂了. 但是,DOS是只有单线程的.我如果想让程序 ...

  10. X86汇编——计算斐波那契数列程序(详细注释和流程图说明)

    X86汇编实现斐波那契数列 程序说明: 输入斐波那契数列的项数, 然后依次输出斐波那契数列, 输入的项数小于256且为数字, 计算的项数不能超过2^16次方, 输入失败是 不会回显数字 因为存结果是A ...

随机推荐

  1. Keras/Tensorflow选择GPU/CPU运行

    首先,导入os,再按照PCI_BUS_ID顺序,从0开始排列GPU, import os os.environ["CUDA_DEVICE_ORDER"] = "PCI_B ...

  2. bootstrap table 的简单Demo

    暂时够用,不够用再补充 T_T script: <link rel="stylesheet" href="lib/bootstrap.min.css"&g ...

  3. LNMP环境的搭建(yum)方法(精)

    第一 先安装nginx nginx在官方CentOS社区yum里面没有,需要在nginx的官方网站去下载yum的配置文件 官方:https://www.nginx.com/resources/wiki ...

  4. Tomcat线程池的深入理解

    1.工作机制: Tomcat启动时如果没有请求过来,那么线程数(都是指线程池的)为0: 一旦有请求,Tomcat会初始化minSpareThreads设置的线程数: 2.线程池作用: Tomcat的线 ...

  5. 游戏行业DDoS攻击解决方案

    行业综述 根据全球游戏和全球移动互联网行业第三方分析机构Newzoo的数据显示:2017年上半年,中国以275亿美元的游戏市场收入超过美国和日本,成为全球榜首. 游戏行业的快速发展.高额的攻击利润.日 ...

  6. atitit 读书与获取知识资料的attilax的总结.docx

    atitit 读书与获取知识资料的attilax的总结.docx 1.1. 读书即是获取知识,获取资料,获取信息的一种方式 2 2. 获取资料信息的目的,有什么作用,有什么用途?? 2 2.1. 扩大 ...

  7. Python AES_ECB_PKCS5加密代码

    https://blog.csdn.net/u010978840/article/details/79035463 ****************************************** ...

  8. sql查父节点小笔记

    )) ),sortNum int) as BEGIN DECLARE @sortNum int --得到当前id的父id, select @id = ParentId, @sortNum =Sortn ...

  9. Gephi 网络图可视化工具

      官网:         https://gephi.org/   背景:         Gephi 是一款开源,免费, 跨平台的的graph 和 network 可视化工具,同时也提供了数据挖掘 ...

  10. springboot-custom starter

    Spring Boot由众多Starter组成,随着版本的推移Starter家族成员也与日俱增.在传统Maven项目中通常将一些层.组件拆分为模块来管理, 以便相互依赖复用,在Spring Boot项 ...