当前位置: 首页 > news >正文

32位汇编:实验4传送类指令的使用

将上述汇编程序并保存为 test4.asm,使用 ML 和 Link 进行汇编和链接,生成可执行文件

传送指令方式分析

数据段布局

首先,我们需要了解数据段的布局。

变量名地址初始值大小
var100403000h1010h2字节
var200403002h未定义2字节
var300403004h1234h2字节
var400403006h6789h2字节
var500403008h10h,20h,30h3字节
buffer0040300Bh10个010字节
arrayB00403015h10h,20h,30h,40h,50h5字节
arrayW0040301Ah1FFh,200h,300h6字节
arrayD00403020h10000h,20000h8字节

接下来,我们逐条分析代码执行后的寄存器和内存变化:

  1. MOV ax, var1

    • AX = 1010h
  2. MOV var2, ax

    • AX = 1010h, var2 = 1010h
  3. MOV CL, 80h

    • CL = 80h
  4. MOVSX DX, CL

    • DX = FF80h(符号扩展)
  5. MOVZX DX, AL

    • DX = 0010h(零扩展)
  6. mov ax, var3

    • AX = 1234h
  7. xchg ax, var4

    • AX = 6789h, var4 = 1234h

    交换AX和var4的值

  8. mov var3, ax

    • AX = 6789h, var3 = 6789h
  9. MOV al, [var5+2]

    • AL = 30h
  10. MOV al, var5+3

    • AL = 00h
  11. lea ebx, [buffer+5]

    • EBX = 00403010Fh

    将buffer+5的有效地址加载到EBX

  12. mov al, arrayB

    • AL = 10h
  13. mov al, [arrayB+1]

    • AL = 20h
  14. mov al, [arrayB+2]

    • AL = 30h
  15. mov ax, arrayW

    • AX = 01FFh
  16. mov ax, [arrayW+2]

    • AX = 0200h
  17. mov eax, arrayD

    • EAX = 00010000h
  18. mov eax, [arrayD+4]

    • EAX = 00020000h
  19. mov eax, [arrayD+TYPE arrayD]

    • EAX = 00020000h(TYPE arrayD = 4)

    将arrayD+TYPE(arrayD)地址处的双字传送到EAX

  20. lea ebx, [arrayD+4]

    • EBX = 00403024h
  21. mov eax, [ebx]

    • EAX = 00020000h

知识疑解

符号扩展(Sign Extension)和零扩展(Zero Extension)是汇编语言中处理数据类型转换的两种重要技术,主要用于将较小数据类型的值转换为较大数据类型。

基本概念

符号扩展(Sign Extension)

  • 原理:用源操作数的符号位(最高位)填充目标操作数的所有高位
  • 应用场景:有符号数的扩展
  • 指令MOVSX (Move with Sign-Extension)

零扩展(Zero Extension)

  • 原理:用0填充目标操作数的所有高位
  • 应用场景:无符号数的扩展
  • 指令MOVZX (Move with Zero-Extension)

1. 符号扩展过程分析

MOV  CL,80h; CL = 80h = 1000 0000b
MOVSX DX,CL; 将CL符号扩展到DX

执行过程

  • CL的二进制值:1000 0000
  • 最高位(符号位)是1,表示负数
  • 符号扩展:用1填充DX的高8位
  • 结果:DX = 1111 1111 1000 0000 = FF80h

数值含义

  • 作为有符号数:80h = -128(8位有符号数)
  • 扩展后:FF80h = -128(16位有符号数)
  • 数值保持不变:-128

2. 零扩展过程分析

; 假设执行前AL = 10h (来自AX=1010h的低字节)
MOVZX DX,AL; 将AL零扩展到DX

执行过程

  • AL的二进制值:0001 0000 = 10h
  • 零扩展:用0填充DX的高8位
  • 结果:DX = 0000 0000 0001 0000 = 0010h

数值含义

  • 作为无符号数:10h = 16(十进制)
  • 扩展后:0010h = 16(十进制)
  • 数值保持不变:16

数值对比表

操作源值扩展方式结果数值解释(有符号)数值解释(无符号)
MOVSX DX,CL80h符号扩展FF80h-12865408
MOVZX DX,AL10h零扩展0010h1616
  • 符号扩展:保持有符号数的数值不变(-128扩展后仍是-128)
  • 零扩展:保持无符号数的数值不变(16扩展后仍是16)

扩展规则总结

源类型目标类型正确指令错误指令原因
有符号字节有符号字MOVSXMOVZX保持符号
无符号字节无符号字MOVZXMOVSX保持数值
有符号字有符号双字MOVSXMOVZX保持符号
无符号字无符号双字MOVZXMOVSX保持数值

MOV al, var5+3 和 MOV al, [var5+2] 的区别详解

特性MOV al, [var5+2]MOV al, var5+3
语法带有方括号 [ ]没有方括号
操作类型内存访问(间接)内存访问(直接)
MASM解释明确的间接寻址MASM隐式解释为内存访问
操作数内存地址 var5+2 处的内容内存地址 var5+3 处的内容
推荐程度推荐(明确清晰)不推荐(容易混淆)

MOV al, var5+3 - MASM的隐式内存访问

MOV al, var5+3; 将var5+3地址处的字节内容传送到AL

执行过程

  • MASM 根据上下文(目标操作数是8位寄存器AL)推断这是内存访问
  • 计算地址:var5地址 + 3
  • 假设 var5 地址为 00403008h,则 var5+3 = 0040300Bh
  • 访问内存地址 0040300Bh,读取该处的字节值
  • var5+3 指向 buffer 数组的起始位置,初始值为 00h
  • 结果:AL = 00h

特点

  • 没有方括号,但MASM根据上下文推断为内存访问
  • 只在MASM汇编器中这样解释
  • 在其他汇编器(如NASM)中可能有不同含义

mov eax, [arrayD+TYPE arrayD]

mov eax, [arrayD+TYPE arrayD]
  • TYPE arrayD: 汇编时常量表达式,在编译时计算

执行过程

  1. 编译时计算:
    • TYPE arrayD 返回数组元素的大小
    • arrayD 是 DWORD 数组,所以 TYPE arrayD = 4
    • arrayD+TYPE arrayD = arrayD+4
  2. 运行时执行:
    • 计算有效地址: arrayD的地址 + 4
    • 访问该地址处的4字节数据(双字)
    • 将数据加载到 eax 寄存器

内存布局示例

假设 arrayD 起始地址为 00403020h:

地址        内容        说明
00403020h   00010000h   arrayD[0] = 10000h
00403024h   00020000h   arrayD[1] = 20000h ← 这里就是arrayD+4

结果eax = 00020000h (arrayD的第二个元素)

特点

  • 编译时计算: 偏移量在编译阶段确定
  • 直接寻址: 地址计算不依赖运行时寄存器值
  • 可维护性高: 使用 TYPE 操作符,代码更健壮

http://www.dtcms.com/a/408151.html

相关文章:

  • MP4和WMV2压缩机制对比
  • 网站 图片延时加载农家院网站素材
  • 做网站包括什么条件网络游戏行业防沉迷自律公约
  • 17软件测试用例设计方法-决策表
  • 做英文行程的网站wordpress收费阅读插件
  • 网站建设技术难点wordpress评分管理
  • el-tooltip数据刷新之后没有显示tip提示
  • Ansible Playbook 编写指南:从入门到 Roles 模块化
  • 合成记录中声波时差的作用和常见取值
  • 整体设计 逻辑拆解之4 分布式架构设计:三次工程进阶(初始化/序列化/谱系化)的服务器协同方案
  • 成都建设网站公司哪家好2019个人建网站
  • 服务器与网站吗中企动力福利待遇好吗
  • 装饰公司看的设计网站电商网站seo公司
  • 旋转力学中的“坐标系优化”:深入浅出理解惯性主轴
  • wordpress网站网页加密网站建设的比较合理的流程
  • 陕西恒立建设集团网站网店seo名词解释
  • 建行网站会员有什么用网站开发 程序开发原理
  • 阿里云备案成功怎么建设网站安徽水安建设集团网站
  • 哪个网站可以兼职做效果图装修网站有哪些
  • 个人网站名可以和别人一样吗腾讯云网站建设教程视频
  • 学校门户网站建设的优势软件开发工具包英文缩写
  • 市场营销培训江苏seo网络
  • Transformer 的革命之路
  • 四川自助网站上海前十名广告传媒公司
  • wordpress网站入口dw可以用来做网站吗
  • WordPress影视站源码红桥网站建设
  • 下载Win11系统镜像
  • 【Qt】常用控件3——显示类控件
  • frontpage网站模板网站备案ip地址
  • 中国老区建设促进会网站报价单