● 实模式下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. 分析轮子(一)-ArrayList.java

    前言:之前也看过一些JDK源码,不过没有留下痕迹,经久年月就淡忘了,现在的时机也差不多了,想再看一次,并且记录下来自己的感想,于是从自己使用最多最熟悉的地方开始!并且看的过程中,我希望自己思考一下如下 ...

  2. The module is an Android project without build variants, and cannot be built

    导入 安卓项目报错 Error:The module 'app' is an Android project without build variants, and cannot be built. ...

  3. JAVA方法中的参数用final来修饰的原因

    JAVA方法中的参数用final来修饰的原因   很多人都说在JAVA中用final来修饰方法参数的原因是防止方法参数在调用时被篡改,其实也就是这个原因,但理解起来可能会有歧义,有的人认为是调用语句的 ...

  4. 爬取 Caused by SSLError(SSLError("bad handshake: Error

    在爬虫中遇到如下报错: Traceback (most recent call last): File "C:/Users/xuchunlin/PycharmProjects/A9_25/h ...

  5. 9-11-Trie树/字典树/前缀树-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版

    课本源码部分 第9章  查找 - Trie树/字典树/前缀树(键树) ——<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接☛☛☛ <数据结构-C语言版>(严蔚 ...

  6. seaJS简介和完整实例

    什么是 seaJS ? 和requireJS相似的,seaJS 也是用JavaScript编写的JS框架,主要功能是可以按不同的先后依赖关系对 JavaScript 等文件的进行加载工作,可简单理解为 ...

  7. word,excel,ppt,txt转换为 PDF

    /// <summary> /// 将word文档转换成PDF格式 /// </summary> /// <param name="sourcePath&quo ...

  8. golang中值类型/指针类型的变量区别总结

    转自:https://segmentfault.com/a/1190000012329213 值类型的变量和指针类型的变量 先声明一个结构体: type T struct { Name string ...

  9. plsql的特殊复制

    转载自:https://jingyan.baidu.com/article/2fb0ba409c8c2100f2ec5f91.html PL/SQL中写好的SQL语句,如果要放到JAVA文件中,如果很 ...

  10. spring boot 项目启动无任何反应

    遇到的问题 spring boot项目启动后无任何报错,ps有进程,nohub无日志 定位 更换jar包,问题依然存在,将jar包放到其他服务器,运行正常,排除打包问题 同服务器其他系统运行正常,但停 ...