汇编语言传递数据和地址的误区

最近学习汇编语言的时候,发现了一个盲点:mov 寄存器,标号,它是传送数据还是地址?

我一直都以为16位为传数据,32位为传地址,这里拿16位和32位举例

16位:

复制代码
assume cs:code ,ds:data
data segment
    db 'hpspkhpspk'
    db '..........'
data ends

code segment
start:  mov ax,data
    .....
        

code ends
end start

32位:

复制代码
section .bss
    buffer resb 64
    
section .data
    prompt db 'your name:'
    ;...
    
section .text
    global _start

_start: ;...
    mov ecx,prompt

    ;...

两个mov的寄存器结果:

复制代码
ax:076A  ecx:0x804a000

这里其实已经出答案了,但当时我先学的16位汇编,没想过这个问题,直到最近学32位汇编才发现(大家引以为戒)

++两个都是传地址++,只是16位的data太迷惑人了,搞得我以为mov ax,data是传数据

data和prompt都是标号,本质是内存地址的别名

再写个注释:

复制代码
mov ax,data ;ax=data段地址(16位)
mov ecx,prompt ;ecx=prompt的线性地址(32位)

如果是mov 寄存器,标号才是传数据比如:

复制代码
mov al,[data]   ;读取一个字节或   mov ecx,[prompt]   ;读取四个字

原文链接:汇编语言传递数据和地址的误区

相关推荐
滕州市燕猫虎计算机科技工作室个体工商户9 小时前
《Rust程序设计》学习笔记八:结构体
笔记·学习·rust·rust程序设计
志尊宝11 小时前
Vue3 零基础每日笔记(082):文件上传实战——el-upload 校验、自定义上传、头像预览
前端·javascript·vue.js·笔记·#javascript·#vue.js
后季暖12 小时前
电商问数笔记(2)
笔记
xier_ran12 小时前
【infra之路】AI 编译器学习笔记(二):重拾 C++——移动语义与 LLVM 风格的类型转换
人工智能·笔记·学习
星恒随风14 小时前
Linux库的底层原理:ELF文件格式、静态链接、程序加载、虚拟地址空间与GOT/PLT详解
linux·运维·笔记·学习·状态模式
罗西的思考14 小时前
[Agent Memory / 强化学习] MemPO源码学习笔记 — (7)— 混合机制
笔记·学习
ClinicTech15 小时前
婴儿培养箱技术笔记:温控、报警与数据记录的三层架构
笔记
xiaominngtongxue15 小时前
从一次接触网实训课看中职实训教学的组织逻辑
笔记
xier_ran16 小时前
【infra之路】AI 编译器学习笔记(四):PatternRewriter 与贪心 driver
人工智能·笔记·学习
ACP广源盛1392462567317 小时前
硬件选型笔记|国产 PCIe4.0 交换芯片 IX8012@ACP,边缘 AI 设备 IO 扩展方案探讨
人工智能·笔记·硬件架构·pcie·国产芯片