【转贴】80386ASM程序设计基础(三)

libcurl库使用详情、libcurl库的制作 ​ libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。libcurl的官网 、库下载。这种库使用的时候就像使用wiringPi库一样,编写完代码需要链接这个库,所以要先下载这个库。libcurl的使用(其实和socket编程时一样,都需要一定的步骤): 阅读详情

   在接下来的四篇里将介绍80386的汇编指令及用法,并和8086的指令进行比较。
   80386的指令集包含了8086/8088,80186,80286的指令集,可以分为几个大类:数据传送指令,算术运算/逻辑运算指令,移位指令,控制转移指令,串操作指令,高级语言支持的指令,条件字节设置指令,位操作指令,处理器控制指令和保护方式指令。高级语言支持指令始于80186,保护方式指令始于80286,条件字节设置指令和位操作指令是80386新增的。
  本篇主要介绍数据传送指令,数据传送指令可以分为:通用数据传送,累加器专用传送,地址传送,标志传送,分别介绍如下:
  A.数值传送指令MOV,MOVZX,MOVSX,XCHG,PUSH,PUSHA,PUSHAD,POPA,POPAD,
  a.MOV,指令和8086相似,不过它支持32位操作。
  b.MOVZX,零扩展传送,格式--MOVZX DST,SRC,表示将源操作送给目的操作数,目的操作数空出的部分用0填补。
  c.MOVSX,符号扩展传送,格式--MOVSX DST,SRC,表示将源操作送给目的操作数,目的操作数空出的部分用SRC的符号位来填补,举个简单的例子来演示:
  MOV DL,90H;
  MOVSX AX,DL;AX=FF90H
  MOVZX AX,DL;AX=0090H
  MOVSX ESI,DL;ESI=FFFFFF90H
  MOVZX ESI,DL;ESI=00000090H
  事实上在8086中也有两条指令CBW,CWD可以对操作数进行扩展。MOVSX可以对有符号数进行扩展,MOVZX可以对无符号数进行扩展,看看CBW,CWD的用法:
   CBW将字节数据扩展成字,符号位扩展到AH中
   CWD将字数据扩展成双字,符号位放到DX中
   MOV AL,70H;
   CBW;//AX=0070
   CWD;//DX=0000,AX=0070
  d.XCHG,功能和8080相同,不过它支持8位,16位,32位操作,下面的语句均是合法的。
   XCHG AH,AL
   XCHG AX,AL
   XCHG ESI,EDI
   XCHG ESI,[EBX+EDI+1000H]
  e.PUSH,和8086不同的是,它支持立即数入栈,8位入栈,当然还有32位入栈,下面的语句均是合法的。
   PUSH AL
   PUSH BH
   PUSH 100H
   PUSH EAX
   PUSH EBX
   PUSH DWORD PTR [EAX]
  f.POP,功能和用法和8086一样。
  g.PUSHA,将8个通用寄存器全部进栈,进栈顺序为:AX,CX,DX,BX,SP,BP,SI,DI,然后SP指针寄存减16,不过SP入栈的内容是PUSHA指令执行前的内容。
  h.POPA,8个通用寄存器全部出栈,堆栈指针寄存器不是堆栈中弹出的内容,而是加16而得到的,虽然这样得到的值和从堆栈中弹出来的内容一样,但物理意义不一样。
  i.PUSHAD,将8个32位通用寄存器全部入栈,入栈顺序EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI,ESP的内容是执行指令PUSHAD之前的内容
  j.POPAD,8个32位通寄存器全部出栈,ESP的内容参见h
 
  B.地址传送指令LEA,LDS,LES,LFS,LGS,LSS
  a.LEA,取有效地址,功能,用法与8086相同,不过它支持32位操作。规则:目的操作必须是16位或32位通用寄存器,当目的操作数是16位时,那么只装入有效地址的低16位。事实上LEA指令相当于伪指令OFFSET,看例子:
  MOV EAX,12345678H
  MOV EBX,56784321H
  LEA ECX,[EAX+EBX];ECX=99999999H
  b.LDS,装入指针,功能,用法与8086相同,不过它支持32位操作。格式:LDS REG,OPRD。规则,目的寄存器必须是16位或32位的通用寄存器,OPRD必须是内存单元,不可以是立即数。如果目的寄存器是16位,那么源操作数OPRD含32位指针;如果目的寄存器是32位,那么源操作数有48位指针。该指令将目的操作数OPRD所指向的内存单存的4个或6个连续字节的内容送给助记符指令中指定的DS段寄存器和指令中目的寄存器。比如:
  LDS EAX,[1000H];这表明将偏移地址为1000,1001H这两个字节单元的内容送给段寄存器DS,将偏移地址1002,1003,1004,1005四个字节单元的内容送往EAX。
  LDS AX,[1000H];这表明将偏移地址为1000,1001H这两个字节单元的内容送给段寄存器DS,将偏移地址1002,1003H两个字节单元的内容送往EAX。
  c.LES,同LDS,不过段寄存器是ES。
  d.LFS,同LDS,不过段寄存器是FS。
  e.LGS,同LDS,不过段寄存器是GS。
  h.LSS,同LDS,不过段寄存器是SS。
 
  C.标志传送指令LAHF,SAHF,PUSHF,PUSHFD,POPF,POPFD
  a.LAHF,将标志寄存器的低8位送至AH中,包括SF,ZF,ZF,PF,CF。
  b.SAHF,与i的过程恰好相反
  c.PUSHF,将标志寄存器的EFLAGS低16位内容入栈,和8086相同
  d.PUSHFD,将标志寄存器EFLAGS的内容入栈
  e.POPF,将栈顶的一个字弹出,并将它送到标志寄存器EFLAGS的低16位
  f.POPFD,将栈顶的两个字弹出,并将它送到标志寄存器EFLAGS
 
  D.累加器传送指令IN,OUT,XLAT
  a.IN,和8086相同,但可以输入一个双字节,同样如果端口的范围位于00H-FFH,可以直接用,如果超出这个范围,则先要将端口号送至DX,下面的语句是合法的:
  IN AL,20H;从20H端口读入一个字节
  IN AX,20H;从20H端口读入一个字
  MOV DX,0378H
  IN EAX,DX;从20H端口读两个字节
  b.OUT,和8086相同,但可以输出一个双字节,同样如果端口的范围位于00H-FFH,可以直接用,如果超出这个范围,则先要将端口号送至DX,下面的语句是合法的:
  OUT 20H,AL;从20H端口输出一个字节
  IN 20H,AX;从20H端口输出一个字
  MOV DX,0378H
  IN EAX,DX;从20H端口输出两个字
  c.XLAT,查表指令,功能和用法与8086相同,不过基址寄存器用的是EBX,来看看XLAT的实现过程:XLAT以BX作为基址寄存器,以AL作为变址寄存进器对指定的缓冲区进行查表,将AL指定位置的内容送往AL,比如说我们在MS-DOS方式写一个小程序:
  C:/>Debug
  -A100
     MOV BX,0120
     SUB AL,AL
     MOV DL,AL
     MOV AH,2
     INT 21
     MOV AH,4C
     INT 21
     INT 20
-E120 'ABCDEFGHIJKLLMMDDKDJDK'
=G100
   屏幕上会显示A,如果AL=3,那么屏幕会显示D

   以上所有的指令均不影响EFLAGS的各标志位。

Esp32蓝牙Hid调用方案 http执行设备、鼠标、键盘相关操作 本文主要介绍 Esp32 蓝牙 Hid 相关的多种操作方式,详细的设备、鼠标、键盘相关操作的 http 调用方法。下面是整理出的所有 http 调用方法和 rhino 引擎方式。本机调用的话直接使用http://localhost:8080 如果是局域网调用则使用软件里的地址 比如我的是http://192.168.1.5:8080。文件地址: https://www.123865.com/s/Qtm4jv-xyZbd?使用前需要一块烧录好的ESP32板子并在手机安装好embedded软件用于蓝牙通信。 阅读详情

相关推荐

智能体在车联网中的应用:第9天 核心工具链与仿真世界:SUMO交通仿真入门——从安装到构建你的第一个虚拟十字路口

摘要 SUMO是一款开源微观交通仿真工具,为车联网和自动驾驶算法开发提供高效安全的测试环境。文章详细介绍了SUMO的核心概念、安装方法及实战应用。在Ubuntu或Windows系统安装SUMO后,可通过netedit工具构建十字路口路网,包括创建节点、连接边、设置交通信号灯等步骤。随后通过编写.rou.xml文件定义车辆类型、路线和车流,实现动态交通场景模拟。SUMO支持与外部程序交互,能复现真实场景、进行极端测试和算法验证,是车联网研究的理想数字沙盘。

IT深耕十余载,大道之简 1451

80386ASM程序设计基础(三)

   在接下来的四篇里将介绍80386的汇编指令及用法,并和8086的指令进行比较。   80386的指令集包含了8086/8088,80186,80286的指令集,可以分为几个大类:数据传送指令,算术运算/逻辑运算指令,移位指令,控制转移指令,串操作指令,高级语言支持的指令,条件字节设置指令,位操作指令,处理器控制指令和保护方式指令。高级语言支持指令始于80186,保护方式指令始于80286,条

kingcaiyao的专栏 2733

Abaqus中Cohesive单元建模:从本构到失效的完整指南

本文提供了Abaqus中Cohesive单元建模的完整指南,涵盖从本构模型到失效分析的全过程。详细解析了Cohesive单元作为模拟界面粘结与失效的关键工具,其核心在于弹性本构、损伤起始准则和损伤演化定律的设置。文章通过双悬臂梁(DCB)实例,手把手指导前处理、材料定义、求解设置及后处理分析,并分享了刚度、强度、断裂能等关键参数的影响与收敛性调优的实用避坑技巧,帮助用户准确模拟复合材料及胶接结构的界面失效行为。

cuda7parallel的博客 700

80386汇编

80386汇编知识 与汇编语言略有不同,是一门全新的编程语言,尽管继承了汇编语言的语法. 80836寄存器 通用寄存器(EAX EBX ECX EDX,ESP,EBP,ESI,EDI) 段寄存器(CS SS DS ES FS GS) 指令寄存器和变址寄存器(EIP EFLAGS) 系统地址寄存器(GDTR IDTR LDTR … 控制寄存器(CR0 CR1 CR2 CR3 CR4) 调试寄存器...

lonmar的博客 2224

手把手教你用LIO-SAM搞定激光雷达和IMU联合标定(附避坑指南)

本文详细介绍了使用LIO-SAM进行激光雷达与IMU联合标定的全流程,包括标定原理、工具选型、硬件配置、数据采集、LI_calib标定步骤及LIO-SAM集成验证。特别提供了避坑指南和参数优化技巧,帮助开发者高效完成传感器标定,提升自动驾驶和机器人定位精度。

hadoop5ranger的博客 995

从报错到定位:Memtest86 DQ位算法解析与实践指南

本文深入解析了Memtest86内存测试工具报错信息的解读方法,重点介绍了通过地址解析、数据转换、位比对和DQ定位四步算法,精准锁定故障DQ位的实践流程。文章以DDR4和DDR5为例,详细拆解了从十六进制报错到二进制比对的完整步骤,并提供了从单个报错分析到故障模式诊断的进阶指南,帮助用户将抽象的报错信息转化为具体的维修或排查依据。

sre5engineer的博客 486

汇编语言基础知识

是很多文章的总结,不太记得来源了

weixin_42277902的博客 4710

华为OD机试双机位C卷-统计差异值大于相似值二元组个数(C/C++/Py/Java/Js/Go)

华为OD机试(机考)双机位C卷 【统计差异值大于相似值二元组个数】,提供Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 统计差异值大于相似值二元组个数

qq_45776114的博客 783

[80386]80x86汇编指令

16位和32位的80x86之间的区别 16位操作系统中的中断调用相当于32位操作系统中的API调用。16位操作系统中的段地址和偏移地址在32位中消失了,在32位操作系统中统一采用平坦的内存地址模式寻址 16位操作系统中的程序运行在RING0级,也就是说普通程序和操作系统程序运行在同一个级别并且拥有最高权限,而32位操作系统中的程序一般只拥有RING3级运行权限,程序的所有操作都受到操作系统控制,...

Carlos 2138

Oracle EBS R12 AR 标准发票 核心表结构

​ Oracle EBS R12 AR 标准发票 核心表结构 聚焦手动标准发票 (Standard Invoice),按头→行→分配→税→收款计划→会计分录→历史分层,标注主键、外键、关键字段、业务含义,同时说明表间关联关系,适配开发 / 运维 / 数据核对场景。 一、主数据层(发票头 + 行,核心业务表) 1. RA_CUSTOMER_TRX_ALL 【发票头表】 作用:存储整张发票头部信息,一张发票对应一条记录,AR 发票主表。 主键:CUSTOMER_TRX_ID (唯一 ID,系统内部键) 业

金牌架构师 282

4、基于抽象解释的静态分析器中的跟踪分区与ASTRÉE分析器解析

本博客探讨了基于抽象解释的静态分析器中的跟踪分区技术,并深入解析了ASTRÉE分析器的工作原理和应用。通过示例程序说明了跟踪分区如何提升分析精度,减少误报,以及ASTRÉE如何利用多种数值抽象域(如八角形域、浮点区间线性形式等)来处理复杂的嵌入式C程序。此外,还讨论了ASTRÉE的模块化设计、循环展开优化、用户断言与自动细化的局限性等内容,为保障嵌入式软件的安全性和可靠性提供了理论与实践支持。

kotlin6android的博客 117

Intel-80386微处理器(IA-32架构)

80386 1985年10月,Intel公司发布了其第一片32位微处理器80386。80386是一种与80286相兼容的高性能的全32位微处理器,它是为需要高性能的应用领域和多用户、多任务操作系统而设计的。 在80386芯片内部集成了存储器管理部件和硬件保护机构,内部寄存器的结构及操作系统全都是32位的。它的地址线为32位,可寻址的物理存储空间为4GB(232),80386支持的虚拟地址空间(逻辑...

优快云 1万+

亚马逊跨境电商选品数据分析:Python爬虫实战指南

本文将带领大家构建一套完整的亚马逊选品数据采集与分析系统,使用最新的Python技术栈,从零开始爬取亚马逊商品数据,并进行深度分析。

2201_76125261的博客 299

80386ASM程序设计基础

    80386ASM程序设计基础     kingcaiyao        80386 ASM程序设计基础,呵呵,这是最近一段时间我的业余爱好。本期将连续推出若干篇有关80386ASM程序设计的基础,主要介绍80386ASM指令的详细用法及如何在80386实模式下,保护模式下及虚拟8086模式编程以及我会详细介绍80386下的段页管理机制,我会将80386下的指令与8086下的相同指令进行比

Hi, CT here! 2866

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

80386 ASM程序设计基础 (一)

80386 ASM程序设计基础,呵呵,这是最近一段时间我的业余爱好。 80386处理器是Intel公司80×86发展史上的里程碑,它不但兼容先前的8086/8088,80186,80286处理器,而且也为后来的486,Pentium(586),Pentium Pro(686)的发展

ANSWER 的专栏 1315

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

80386ASM程序设计基础(一)

    80386 ASM程序设计基础,呵呵,这是最近一段时间我的业余爱好。本期将连续推出若干篇有关80386ASM程序设计的基础,主要介绍80386ASM指令的详细用法及如何在80386实模式下,保护模式下及虚拟8086模式编程以及我会详细介绍80386下的段页管理机制,我会将80386下的指令与8086下的相同指令进行比较。在你去看罗云彬的ASM编程之前,不妨先看看我的基础篇,希望有志于从事汇

kingcaiyao的专栏 3147

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【转贴】80386ASM程序设计基础(八)

80386实模式下编程 80386在实模式下是一个更快的8086,它不但可以进行32位操作,而且还可以进32位寻址,并且还可以使用80386的扩展指令。不过,由于是在实模下,寻址的最大空间为1M。在一个段内,段的最大长度不超过64K,否则就会发生异常。 在8086下定义一个段的完整格式是: 段名 [定位类型]  [组合类型]  [‘类别’] 80386下定义一个段的完整格式是: 段名 [定位类型]

766

80386ASM程序设计基础(二)

 80386处理器的寻址方式    在实式模式下,80386处理器的最大寻址空间仍然为1M,和8086/8088相似。即段地址*10H+段内偏移地址,从而形成20位地址。此种模式下,段基址是16的倍数,长度最大不超过64K。    在保护模式下,80386处理器可以使用所有的物理内存。段基址可以是32位,也可以不是16的倍数,同时它的最大长度为4G,这与8086完全不同,在形成逻辑地址时用段基址直

kingcaiyao的专栏 2255

80386ASM程序设计基础(八)

 80386实模式下编程 80386在实模式下是一个更快的8086,它不但可以进行32位操作,而且还可以进32位寻址,并且还可以使用80386的扩展指令。不过,由于是在实模下,寻址的最大空间为1M。在一个段内,段的最大长度不超过64K,否则就会发生异常。 在8086下定义一个段的完整格式是: 段名 [定位类型]  [组合类型]  [‘类别’] 80386下定义一个段的完整格式是: 段名 [定位类型

kingcaiyao的专栏 1802

80386ASM程序设计基础(九)

 虽然80386处理器要较以前的处理器的功能大大增强,但这些功能只能在保护模式下才能全部得到发挥。在实模式下最大寻址空间只有1M,但在保护模式最大寻址空间可达4G,可以访问到所有的物理内存。同时由于引入虚拟内存的概念,在程序设计中可使用的地址空间为64TB。80386处理器采用了可扩充的分段管理和可选的分页管理机制,这两个存储管理机制由MMU(Memory Management Unit)部件来实

kingcaiyao的专栏 2529

80386ASM程序设计基础(四)

   算术运算指令,逻辑运算指令,移位指令   AA.算术运算指令   A.加减法运算ADD,ADC,INC,SUB,SBB,DEC,CMP,NEG   a.ADD,和8086功能,用法相同,不过支持32位操作,下面的语句都是合法的。   ADD  ESI,EDI   ADD  EAX,DWORD  PTR  [1000H]   b.ADC,带进位的加法指令,即OPRDS+OPRDD+CF,其中O

kingcaiyao的专栏 1813

80386ASM程序设计基础(五)

  控制转移指令,串操作指令  80386控制转移指令包括:转移指令,循环指令,过程调用和返回指令。  A.转移指令包括无条件转移指令JMP和条件转移指令,无条件转移指令分为段内直接转移,段内间接转移,段间直接转移,段间间接转移。由于80386有保护模式和实模式,在实模式下,段内转移的范围在-128~127,段间转移最大范围为64K。在保护模式需要用48位指针,即CS:EIP(16位+32位)。条

kingcaiyao的专栏 1731

80386ASM程序设计基础(十一)

 主要介绍系统地址寄存器和控制寄存器以及在程序中实方式下与保护方式下的切换   80386处理器新增了一组控制寄存器CR0,CR1,CR2,CR3和一组系统地址寄存器GDTR,LDTR,IDTR,TR,它们全部都是32位的。CR0包含了指定处理器工作方式的控制位,CR1保留未使用,CR2和CR3由分页管理部件使用,CR0中的5~30位和CR3中的0~11位必须为0,分别介绍如下:     ____

kingcaiyao的专栏 2538

【转贴】80386ASM程序设计基础(二)

80386处理器的寻址方式    在实式模式下,80386处理器的最大寻址空间仍然为1M,和8086/8088相似。即段地址*10H+段内偏移地址,从而形成20位地址。此种模式下,段基址是16的倍数,长度最大不超过64K。    在保护模式下,80386处理器可以使用所有的物理内存。段基址可以是32位,也可以不是16的倍数,同时它的最大长度为4G,这与8086完全不同,在形成逻辑地址时用段基址直接

737

【转贴】80386ASM程序设计基础(五)

  控制转移指令,串操作指令  80386控制转移指令包括:转移指令,循环指令,过程调用和返回指令。  A.转移指令包括无条件转移指令JMP和条件转移指令,无条件转移指令分为段内直接转移,段内间接转移,段间直接转移,段间间接转移。由于80386有保护模式和实模式,在实模式下,段内转移的范围在-128~127,段间转移最大范围为64K。在保护模式需要用48位指针,即CS:EIP(16位+32位)。条

900

【转贴】80386ASM程序设计基础(九)

 虽然80386处理器要较以前的处理器的功能大大增强,但这些功能只能在保护模式下才能全部得到发挥。在实模式下最大寻址空间只有1M,但在保护模式最大寻址空间可达4G,可以访问到所有的物理内存。同时由于引入虚拟内存的概念,在程序设计中可使用的地址空间为64TB。80386处理器采用了可扩充的分段管理和可选的分页管理机制,这两个存储管理机制由MMU(Memory Management Unit)部件来实

710
上一篇: 【转贴】80386ASM程序设计基础(二)
下一篇: 【转贴】80386ASM程序设计基础(四)
TalosChen
博客等级 码龄23年 1粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值